mysql总结

来源:互联网 发布:淘宝直播广告图片 编辑:程序博客网 时间:2024/06/06 09:19


mysql是现在非常流行的(RDBMS:Relational Database Management System)关系型数据库,因为它的性能非常好,更重要的是免费的,一般中小型企业完全是够用的。

Linux平台下安装mysql

需要的包:mysql服务器,mysql-client客户端程序,mysql-devel库和包含文件,mysql-shared,mysql-bench

rpm -qa | grep mysql

rpm -e mysql

rpm -e --nodeps mysql

yum install mysql

yum install mysql-server

yum install mysql-devel

service mysqld start

如果用的是Centos7版本,可以直接使用mariadb --> yum install mariadb-server mariadb

systemctl start mariadb #启动mariadb

systemctl stop mariadb #停止mariadb

systemctl restart mariadb #重启mariadb

systemctl enable mariadb #设置开机启动


[root@xiangping]# mysql

mysql> show databases;//可以看到数据库列表


连接:mysql -u root -p *********

参数列表:

username 用户名

password 密码

dbname 数据库

port 服务器端口

host ip地址



创建数据库:create database 'dbname';

删除数据库:drop database 'dbname';

使用数据库:use dbname;


mysql的数据类型:

1.基本类型

类型大小范围(有符号)范围(无符号)用途TINYINT1 字节(-128,127)(0,255)小整数值SMALLINT2 字节(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 字节(-8 388 608,8 388 607)(0,16 777 215)大整数值INT或INTEGER4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值BIGINT8 字节(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值FLOAT4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
浮点数值
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值


日期与时间类型

类型大小
(字节)
范围格式用途DATE31000-01-01/9999-12-31YYYY-MM-DD日期值TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间YEAR11901/2155YYYY年份值DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值TIMESTAMP41970-01-01 00:00:00/2037 年某时YYYYMMDD HHMMSS混合日期和时间值,时间戳

字符串类型

类型大小用途CHAR0-255字节定长字符串VARCHAR0-65535 字节变长字符串TINYBLOB0-255字节不超过 255 个字符的二进制字符串TINYTEXT0-255字节短文本字符串BLOB0-65 535字节二进制形式的长文本数据TEXT0-65 535字节长文本数据MEDIUMBLOB0-16 777 215字节二进制形式的中等长度文本数据MEDIUMTEXT0-16 777 215字节中等长度文本数据LONGBLOB0-4 294 967 295字节二进制形式的极大文本数据LONGTEXT0-4 294 967 295字节极大文本数据

创建数据库表:

CREATE TABLE `xp` (
`uid`  int(11) NOT NULL AUTO_INCREMENT COMMENT '用户主键ID' ,
`username`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户昵称' ,
`gender`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别' ,
`mobile`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '手机号' ,
`passwd`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码' ,
`createtime`  datetime NULL DEFAULT NULL COMMENT '创建时间' ,
PRIMARY KEY (`uid`)
FOREIGN KEY (`did`) REFERENCES `device` (`did`) ON DELETE CASCADE ON UPDATE RESTRICT,
FOREIGN KEY (`mgid`) REFERENCES `macro_group` (`mgid`) ON DELETE CASCADE ON UPDATE RESTRICT,
INDEX `macro_dev_fk` (`did`) USING BTREE ,
INDEX `macro_macrogroup_fk` (`mgid`) USING BTREE 


)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=1
ROW_FORMAT=DYNAMIC
;

删除数据库表:drop table tablename

添加数据:

insert into xp (uid,username,gender,mobile,passwd,createtime) values(1,'xiangping','男','13111111111','123456',now());

删除数据:

delete from xp where uid = 1

delete from xp where uid in(1,2,3)

delete from xp;

修改数据:

update xp set username = 'xp' where uid = 1

查询数据格式:

select 选择的列
from 表
where 查询的条件
group by 分组属性 having 分组过滤的条件
order by 排序属性
limit 起始记录位置,取记录的条数



select  * from xp;

select * from where uid = 1;

select username,gender from xp where uid = 1;

select * from xp where gender = '男‘ and username like '%平%’;

select * from users where uid > 10 order by username desc;

select gender,count(*) as '个数' from users where uid > 10 group by gender;

select d.dname da.usbspeed from device d INNER JOIN device_attribute da ON d.did = da.did;

select * from users1 u1 left join users2 u2 on u1.id = u2.id left join users3 u3 on u2.id = u3.id;

select * from users1 u1 right join users2 u2 on u1.id = u2.idright join users3 u3 on u2.id = u3.id;

.....

查询数据练习:

1.子句查询:http://www.cnblogs.com/chiangchou/p/mysql-2.html

2.子查询:http://www.cnblogs.com/chiangchou/p/mysql-3.html

mysql数据库正则:

模式描述^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。.匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。[...]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。[^...]负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。p1|p2|p3匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。

查找name字段中以'st'为开头的所有数据:select name from person where name regexp '^st'

查找name字段中以'ok'为结尾的所有数据:select name from person where name regexp 'ok&'

查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:select name from person where name regexp '^[aeiou]|ok&'


函数和视图:http://www.cnblogs.com/chiangchou/p/mysql-4.html

数据库的优化:http://www.cnblogs.com/chiangchou/p/mysql-5.html

数据库查询优化:http://www.cnblogs.com/chiangchou/p/mysql-5.html



事务

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

  • 1、事务的原子性:一组事务,要么成功;要么撤回。
  • 2、稳定性 :有非法数据(外键约束之类),事务撤回。
  • 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit 选项 决定什么时候吧事务保存到日志里。

事物控制语句:

  • BEGIN或START TRANSACTION;显式地开启一个事务;

  • COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;

  • ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  • SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;

  • RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO identifier;把事务回滚到标记点;

  • SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。


MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交



数据库的alter命令

删除表字段:alter table users drop username

添加表字段:alter table users add username varchar(50) not null

alter table users add username varchar(40) first

alter table users add username varchar(50) not null after uid

修改表字段:alter table users modify username char(20)

alter table users change username uname varchar(30)

alter table users modify gender varchar(4) not null default '男‘

修改默认值字段:alter table users alter age set default 10

删除默认值字段:alter table users alter age drop default;

修改表名:alter table user rename to alter user_xp

修改存储引擎:alter table users engine=myisam

删除外键约束:alter table users drop foreign key keyName

修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面:alter table tablename modify name1 type1 first | after name2