排序
- 单排
select * from table_n order by fild_1 asc;
- 多列
select * from table_n order by fild_1, fild_2 desc --fild_1相等看fild_2
- 自定义
select * from table_n order by field(id_n), id_2 desc;
- 多列指定每列顺序
select * from table_n order by fild_1 asc, fild_2 desc;
- 链接查询
- 内链接--关键字:inner join on
select * from a_table a inner join b_table b on a.a_id = b.b_id;
-
外连接
- 左链接-- left join on
select * from A left join B on A.id=B.id;
- 右链接-- right join on
select * from A a right join B b on a.id=b.id;
-
其他
SELECT
*
FROM
table_name
ORDER BY
column_name1 < NOW(),
IF (
column_name1 < NOW(),
0,
column_name1
),
column_name1 DESC;
先按大于等于当前时间升序,再按小于当前时间降序,支持分页。
字符串类型char与vachar区别
- char的长度是不可变的,而varchar的长度是可变的
char(10),varchar(10),char不够会补空格,varchar最长10
- 因char定长,char 查找比varchar快。
- char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。
- 执行顺序:from > where > group by > having > select > order by 语法顺序:select .. from .. where .. group by .. having .. order by ..
函数区别 count(),sum();count()
- sum()用于值求和;count()求行数;
- count()包含所有列,不会忽略NULL;count(列名)只包括列名那一项。
- count(1)、count()、count(id) 推荐使用count()MySQL优化器会优化。
脏读--读取未提交的数据:脏读又称无效数据的读出,是指在数据库访问中,事务 A 对一个值做修改,事务 B 读取这个值,但是由于某种原因事务 A 回滚撤销了对这个值得修改,这就导致事务 B 读取到的值是无效数据。
不可重复读--前后多次读取数据内容不一致:不可重复读即当事务 A 按照查询条件得到了一个结果集,这时事务 B 对事务 A 查询的结果集数据做了修改操作,之后事务 A 为了数据校验继续按照之前的查询条件得到的结果集与前一次查询不同,导致不可重复读取原始数据。
幻读--前后多次读取数据量不一致:幻读是指当事务 A 按照查询条件得到了一个结果集,这时事务 B 对事务 A 查询的结果集数据做新增操作,之后事务 A 继续按照之前的查询条件得到的结果集平白无故多了几条数据,好像出现了幻觉一样。