sql语句中关键字的执行顺序
from - where -group by - having - select - distinct-order by-limit
关键字之having
用于group by后,order by前,
select * from table where xx group by xx having Max(xx) order by xx
关键字之limit
select * from table limit N; N表示从头开始,取N个数据;
select * from table limit M,N; M表示从第M行开始(不包括M),取N个数据;
MySql的存储引擎:
MyIsam:
B+Tree结构
不支持事务
Innodb:
B+Tree结构
支持事务
事务ACID
A:原子性:整个事务是不可分割的,事务中的操作必须同时成功,否则即使sql语句执行成功,也会回滚到sql执行前的状态
C:一致性:事务不能破坏关系数据的完整性和业务数据的一致性,比如银行转账,转账前后两个账户的钱必须对的上
I:隔离性:在并发情况下,不同事务操作同一个数据,都有自己完整的数据空间,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
①脏读:是指一个事务读取了另一个事务没有提交的数据。
②不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不相同。
D:持久性:只要事务成功,对数据库的操作必须永久性的保存下来
事务的隔离级别:
丧失事务性的三种情况
①脏读: 读到另一个事务未提交的数据;
②不可重复读(行影响): 一个事务内,读取了某个数据后,另一个事务commit,再次读的时候数据前后不一样()
③幻读(表影响): 一个事务内,读取表数据后,另一个事务commit,再次读的时候数据前后不一样(A存入账户100块钱,但是事务未提交,另一个事务统计账户余额为0,A存钱事务提交后再次查询余额变成了100,两次查询结果不一致)
读未提交(READ-UNCOMMITTED):最低等级的隔离级别,允许读取未提交的数据,可能会出现脏读幻读和不可重复读
读已提交(READ-COMMITTED):允许读取并发事务提交的数据,可能会出现幻读和不可重复读(Oracle默认的隔离级别)
可重复读(REPEATABLE-READ):对同一个字段多次读取是一致的,可能会出现幻读(MySQL默认的隔离级别)
可串行化(SERIALIZABLE):最高的隔离级别,可防止幻读脏读和不可重复读,但效率低