1.原子性:即一个事务是一个整体,不可分割。
2.一致性:事务在开始和结束后,能保证数据库完整性约束的正确性即数据的完整性。
3.隔离性:事务之间完全隔离。不能同一时间操作同一数据表
4.持久性:一旦事务完成,无法回滚,对数据操作是永久性的
1.脏读:一个事务读取另一个事务还没有提交的数据称为脏读。也就是B事务还没有提交,A事务已经读取B修改的数据。如果B事务因为某种原因造成回滚,那么A读取的数据完全无效
2.不可重复读:同一个事务中,多次读出的同一数据不相同(修改造成)
3.幻读:事务A检查数据库,发现并没有数据。事务B此时添加了一条信息,事务A再次查询时,发现已经有数据了,好像发生了幻觉(针对添加删除操作)
并不是 begin/ start transaction 执行完就开始了, 而是执行完begin transaction后的第一条sql语句执行完成,事务才开始
MySQL版本:8.0.15
命令
1.查看当前的事务隔离级别
SELECT @@transaction_isolation;2.设置事务隔离级别
set session transaction isolation level read uncommitted;
事务隔离级别为读提交(read committed 不可重复读,第二级别)时,写数据只会锁住相应的行
事务隔离级别为串行化时(serializable ,第四级别),读写数据都会锁住整张表
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。