MySQL精华大全

数据库:按照数据结构组织,存储和管理数据的仓库,是一个长期存储在计算机内的,有组织的,可共享的,统一管理的大量数据的集合。
MySQL是关系型数据库管理系统(表格组,表与表之间通过主键与外键建立关系)。
首先从MySQL数据类型说起:
一.
1.数据型
TINYINT 有符号:-128到127
无符号:0-255 所占字节1
SMALLINT 有符号:-32768到32767
无符号:0-65535 所占字节2
MEDIUMINT 有符号:-2^23 到 2^23 -1
无符号:2^24 所占字节3
INT 有符号:-2^31 到 2^31 -1 注释:11位
无符号:2^32 -1 所占字节4
BIGYINT 有符号:-263到263-1
无符号:2^64 -1 所占字节8
BOOLEAN 相当于TINYINT(1) 0为FALSE 1为TRUE 字节1
FLOAT[(M,D)]:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
DOUBLE[(M,D)]:双精度实型,含字节数为8,64bit,数值范围-1.7E308~1.7E308(15个有效位)
DECIMAL[(M,D)]:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)
注释:MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度

2.字符串类型(常用):
CHAR(M) 定长 M字段 0<M<255 注释:缺点浪费空间
VARCHAR(M) 可变长度 M+1个字节(其中有个结束字符) 0<M<65535
TEXT M+2个字节 M<2^16 长文本

二,数据表的创建和删除
创建表:create table 表名 (字段设定列表);
删除表:drop table 表名;
修改表:alter table t1 rename t2
查询表:select * from 表名;
清空表:delete from 表名;
标准建表语句模板:
CREATE TABLE IF NOT EXISTS dodoke_user(
id INT,
username VARCHAR(20),
password CHAR(32),
email VARCHAR(50),
age TINYINT,
card CHAR(18),
tel CHAR(11),
salary FLOAT(8,2),
married TINYINT(1),
addr VARCHAR(100),
sex ENUM(‘男’,‘女’,‘保密’)
)ENGINE=INNODB CHARSET=UTF8;

三.常见MySQL字段约束
主键约束(PRIMARY KEY:PK):唯一的确定在数据表中的记录,而且主键约束是不能为空的,我们一般使用没有业务含义的字段去进行主键定义,在MySQL中可以使用自增长类型的主键或者可以使用 UUID 。一个表只能有一个主键。
非空约束(NOT NULL)
默认值(DEFAULT)
唯一约束(UNIQUE KEY:UK):在一个表中可以有多个字段是唯一的
外键约束(FOREIGN KEY:FK)
自增约束(AUTO_INCREMENT):只能用于数值列,而且配合索引使用

四.数据的增删改查
增:
单个新增:
Iinsert into table_name[(field1, field2,…)] values(value1, value2, value3)
insert table set 字段=“值”,字段=“值”,字段=“值”
批量新增:
insert tbl_name (字段名称,…) values (值,…),(值,…),(值,…);
复制新增:
insert into table select * from table2( )
修改:
update s set code=‘ss6’,birthday=‘1990-10-10’ where name=‘zhangsan’
删除:
delete from table where condition
查询:
select * from table
避免重复查询:select distinct * from table

五.MySQL的语句 (条件,模糊,排序,分组,连接)
1.WHERE的筛选:
在where后面,我们可以跟上所要设置的查询条件。那么如何描述查询条件呢?
带关系运算符和逻辑运算符的表达式;
带 BETWEEN AND 关键字的条件查询;
带 IS NULL 关键字的条件查询;
带 IN 关键字的条件查询;
带 LIKE 关键字的条件查询。

BETWEEN AND
SELECT * FROM stu_info WHERE age BETWEEN 16 AND 20
SELECT * FROM stu_info WHERE age >= 16 AND age <=20

IS NULL:
SELECT * FROM stu_info WHERE name IS NULL;
SELECT * FROM stu_info WHERE name = ‘’; – 判断空字符串

IN:
SELECT * FROM stu_info WHERE clazz IN (‘C1’, ‘C2’);

LIKE(模糊查询)
SELECT * FROM stu_info WHERE name LIKE ‘李_强’;
SELECT * FROM stu_info WHERE name LIKE ‘李%’;
SELECT * FROM stu_info WHERE name LIKE ‘%李%’;

2.排序与分组:
ORDER BY 默认ASC升序, 降序是DESC
分组:GROUP BY
GROUP BY 分组:把值相同放到一个组中,最终查询出的结果只会显示组中一条记录。
SELECT id,username,age,sex FROM user;
内连接:
SELECT s.code, s.name, c.name FROM student s INNER JOIN clazz c ON s.clazz_id = c.id
左外连接:
SELECT 字段名称,… FROM tb_name1 LEFT [OUTER] JOIN tb_name2 ON 条件
先显示左表中的全部记录,再去右表中查询符合条件的记录,不符合的以NULL代替
右外连接则相反。

六(NULL值处理,运算符,聚合函数,日期函数,事务)
NULL值判断:
select * from user where user_name<=>null ;
运算符:
关系运算符:>、 >=、 <、 <=、=、<=>;
逻辑运算符:AND(&&)、OR(||)、NOT(!)
聚合函数:
count 总数
sum 求和
avg 平均值
max 最大值
min 最小值
例子:
SELECT
COUNT(*) AS totalUsers,
SUM(age) AS sum_age,
MAX(age) AS max_age,
MIN(age) AS min_age,
AVG(age) AS avg_age,
FROM user

日期:
curtime()显示当前时间
current_time()显示当前时间
now()显示当前日期时间
current_timestamp()显示当前日期时间
sysdate()显示当前日期时间
month(‘2017-02-19’);显示当前月份2
各个函数可以嵌套 select month(curdate()),monthName(curdate());
curdate()//
dayname(now());//返回星期几
dayofweek(now());//返回一周内的第几天,星期天是1星期一是2
week(now())//返回一年中的第多少个星期
year(now())返回年份
day(now())返回日
hour(now())返回小时
minute()返回分钟
second()返回秒
select datediff(‘2017-01-05’,‘2019-01-05’);计算两个日期相差的天数

事务的特性:
ACID:
1.原子性: 一个事务中所有操作要么都完成, 要么都不完成, 不会在中途结束. 执行过程中如果发生错误, 就会回滚(rollback) 到事务开始前的状态, 就跟没执行一样.
2.一致性: 事务执行前后, 数据要是合法的. 换句话说, 就是数据要完全符合预设的规则(正确的).
3.隔离性: 多个事务 并发 执行时, 事务的内部操作与其他事务的内部操作是相互隔离的(互相没有影响).
4.持久性: 事务执行完后, 对数据库的修改是永久的, 不会受之后操作的影响.
注释:
并发带来的三个问题及解决方法:
脏读: 读到了脏数据(错误的数据).
解决方法: 在写操作时"加锁".
不可重复读: 一个事务内读取两次数据的结果不一致.
解决方法: 在读操作时"加锁".
幻读: 同一个事务内多次查询返回的结果集不一样.
解决方法: “串行化”, 这样就没有并发了.

isolation:
MySQL中的事务隔离级别(手动设置级别, 调节并发性和隔离性):
read uncommitted 允许读取未提交的数据. 并发最高, 隔离最低, 会产生脏读问题.
read committed 只允许读取提交的数据, 相当于写加锁. 并发降低, 隔离提高, 能够避免脏读问题, 但存在不可重复读问题.
repeatable read (默认隔离级别) 读写都加锁, 并发进一步降低, 隔离进一步提高, 能够避免不可重复读问题, 但存在幻读问题.
serializable 严格串行执行, 隔离程度最高, 并发最低, 能够避免幻读问题.

猜你喜欢

转载自blog.csdn.net/hgfhjtff/article/details/108027287