事务创建
创建事务
基本语法:
1 | set autocommit = 0; #开始 事务 |
注意:在事务执行过程中的语句均改变表中数据,当使用
commit
结束时,结束事务并永久改变数据。使用roll back
时,结束事务,放弃事务中对数据的改变,数据恢复事务开始前。
保存点
save point
可配合roll back
使用,结束事务并滚回到保存点位置
基本语法:
1 | set autocommit = 0; |
事务并发
读取问题
当多个事务并发时,未设置隔离级别时可能出现以下问题:
- 脏读:读取了被
roll back
的数据 - 不可重复读:多次读取的结果不相同
- 幻读:
隔离级别
MySQL 支持4种隔离级别,默认为 repeatable read
Oracle 支持2种(下表2、4),默认为read committed
read uncommitted | 允许读取未被提交的变更,所有错误均可能出现 |
read committed | 允许读取已被提交的变更,可避免脏读 |
repeatable read | 可保证多次读取字段的值相同,避免脏读、不可重复读 |
serializable | 串行化,事务操作表时,禁止其他事务对该表操作,性能低 |
隔离级别设置命令:
1 | #仅对当前连接有效 |