事务指的是一组SQL语句,它们是一个执行单位,且在必要时还可以取消。事务处理是通过使用提交和回滚功能来实现的。
另一个用途确保某个操作所涉及的行不会在你正在使用它们时被其他客户端修改。事务把多条语句定义为一个执行单位,防止在多客户端环境里可能会发生的并发问题。
事务系统通常具有“ACID”的四种特性:
原子性:构成事务的所有语句应该是一个独立的逻辑单元,不能只执行其中的一部分。
一致性:数据库在事务的执行前后都必须是一致的。
独立性:事务之间不应该相互影响,这样事务在并发执行时才会得到与挨个依次执行一样的效果。
持久性:当事务执行成功完成时,其影响将被永久性地记录到数据库里。
利用事务保证语句安全执行
- 首先需要禁用自动提交模式
- 如:
- SET autocommit = 0;//禁止自动提交模式
- SET autocommit = 1;//开启自动提交模式
- 先调用START TRANSACTION(或BEGIN)语句,挂起自动提交模式
- 再执行构成本次事务的各条语句
- 最后commit语句结束事务
- 如:
- START TRANSACTION;
- INSERT INTO t SET name = 'aa';
- INSERT INTO t SET name = 'asd';
- COMMIT;
- SELECT * FROM t;
出现错误使用ROLLBACK回滚到本次事务的最开始。
select * from score where event_id = 5 AND student_id IN(8,9);
使用事务对其进行分数交换。
update score set score=13 where event_id =5 and student_id = 9;
事务保存点
在事务中使用SAVEPOINT savepoint_name;
当出现错误回滚到该点rollback to SAVEPOINT savepoint_name;
事务隔离
事务出现的问题有:脏读,不可重复读,幻影行
InnoDB提供了四种事务隔离机制