事务
使用场景
处理操作两大,复杂度高的数据
- 举个例子:在人员管理系统中,你准备删除一个人员,这是你需要删除人员的基本资料、相关的信息(信箱、文章等等)
满足条件
1.原子性
- 一个事务中的所有操作,要么全完成,要么全部完成
- 事务在执行中发生错误,会被回滚到事物开始前的状态
2.一致性
- 事务开始前和开始后,完整性没有被破坏
3.隔离性
- 事物隔离分为不同级别
- 读未提交
- 读提交
- 可重复读
- 串行化
4.持久性
- 事务处理结束后,对数据的修改就是永贵的,即便系统故障也不会丢失
注意事项
- 在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。
- 因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
事物控制语句
- BEGIN 或 START TRANSACTION
- COMMIT等价于COMMIT WORK
- ROLLBACK等价于ROLLBACK WORK 回滚到结束用户的事务,并撤销正在进行的所有未提交的修改
- SAVEPOINT identifier,SAVEPOINT允许在食物中创建一个保存点,一个事务可以有多个SAVEPOINT
- RELEASE SAVEPOINT identifier删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常
- ROLLBACK TO identifier把事务回滚到标记点;
- SET TRANSACTION 用来设置事物的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABL
两种主要方法
方法一
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- CONNIT 事务确认
方法二
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交
insert into value 与 insert into values的差异在效率上
- 插入单行时,values比value快
- 插入多行时,value比values快