事务与其性质
事务是一组操作的集合。
事务有以下四大特性:
1.原子性:一个事务要么完成要么回滚
2.一致性:一个事务必须使数据库从一个一致性状态变换到另一个一致性状态
3.隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
4.持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
注意:一致性是指语义上的一致性(保证事务中的操作在应用程序语义方面准确、正确和有效地执行),单单原子性不能保证一致性,其他三种性质一起保证了一致性。
例子如下,事务1和2都是读取A的账户并A+100,事务2操作在事务1读取A之后进行,之后的结果是A+=100而不是200。
事务操作
start transaction
select * from account where name = ‘张三’;
update account set money = money - 1000 where name = ‘张三’;
update account set money = money + 1000 where name = ‘李四’;
commit;
– rollback;
并发事务问题
脏读:B读到了A未提交的数据
不可重复读:A读的两次数据不相同
幻读:A查询x不存在,插入x时候发现x存在了
并发事务问题的解决:设置事务隔离级别
Read uncommitted:最低权限,什么都解决不了
Read committed:解决脏读
Repeatable Read(默认):解决脏读,不可重复读
Serializable :最高权限,全部解决
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL {隔离级别}