1.SQL分类
(1)DDL数据定义语言,用来维护存储数据的结构,代表指令:create、drop、alter
(2)DML数据操纵语言,用来对数据进行操作,代表指令:insert、delete、update
DQL数据查询语言,是DML中单独划分出来的,代表指令:select
(3)DCL数据控制语言,主要负责权限管理和事务,代表指令:grant、revoke、commit
2.事务
事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。
3.事务的基本操作
(1)开启事务
start transaction;
(2)创建一个保存点
savepoint 保存点名;
(3)回到保存点
rollback to 保存点名;
(4)提交事务
commit
(5)举例:工资表
4.事务操作注意事项
(1)如果没有设置保存点,也可以回滚,只能回滚到事务的开始,直接使用 rollback(前提是事务还没有提交);
(2)如果一个事务被提交commit了,则不可以回退rollback;
(3)可以选择回退到哪个保存点,重新执行语句;
(4)InnoDB支持事务,MyISAM不支持事务。
5.事务的隔离级别
如果有多个客户端同时操作数据库的时候,事务隔离级别,规定了在不同的客户端,不同的事务当中,是否可以看到其他的没有提交事务所做的修改。
(1)无隔离性问题
- 脏读
- 不可重复读
- 幻读
注意:不可重读的重点是修改(同样的条件,读取过的数据,再次读取出来发现值不一样了);幻读的重点在新增或着删除(同样条件,第一次和第二次读出来的记录数不一样)。
(2)隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
读未提交(read uncommited) | 会发生 | 会发生 | 会发生 | 不加锁 |
读已提交(read commited) | 不会发生 | 会发生 | 会发生 | 不加锁 |
可重复读(repeatable read) | 不会发生 | 不会发生 | 不会发生 | 不加锁 |
可串行化(serializable) | 不会发生 | 不会发生 | 不会发生 | 加锁 |
设置事务的隔离级别,语法:set session transaction isolation level 隔离级别;
查看当前的隔离级别:select @@tx_isolation;
设置事务的隔离级别的时候,是按照会话来设置的;默认的事务隔离级别是可重复读。
6.事务的ACID特性
- 原子性
事务是应用中最小的执行单位,是应用中不可再分的最小逻辑执行体;事务要执行的一组sql语句,要么全部执行完毕了,要么全部没有开始执行。
- 一致性
事务执行的结果,必须使数据库的状态从一个状态变迁成为另一个状态,或者没有改变。
- 隔离性
多个事务之间的执行是互不影响的。
- 持久性
事务一旦被提交,它对数据库所做的改变都要记录到永久存储中(数据保存在磁盘当中)。