一.事务
1.什么是事务?事务就是将一组操作,封装成一个执行单元,要么一块执行成功,要么一块失败,不会出现执行一般的情况。数据库引擎:InnoDB 才支持事务,MyISAM不支持事务。
2.为什么要用事务?使用事务来控制,保证以上两句SQL 要么全部执行成功,要么全部执行失败
3.使用:
3.1开启事务:mysql 8 之前使用的是start transaction ,mysql之后使用的是begin
3.2 提交事务:commit
3.3 回滚事务:rollback
**注意:事务在开启之后,必须以提交事务或回滚事务来结束。**
4.四大特性(ACID):原子性,一致性,隔离性,持久性
5.隔离级别(4种)
a.查询事务的隔离级别: select @@global.tx_isolation,@@tx_isolation;
b.设置当前客户端的事务隔离级别:set session transaction isolation level 事务隔离级别;
1. 读未提交 read uncommitted:在此隔离级别的事务中,可以读取其他事务未提交的数据,而未提交的数据如果发生了回滚操作,那么此事务读到的数据就是幽灵数据,也叫脏读
2.读已提交 read committed :可以解决脏读的问题,但它纯在不可重复读的问题。不可重复读:使用相同的SQL,执行2次,得到了不同的结果,这个就叫做不可重复读。
3.可重复读 repeatable read 它是MySQL 事务的默认隔离级别
****经典面试题:不可重复读和幻读有什么区别?***
答:不可重复读和幻读描述的侧重点是不同的,不可重复读描述的是修改操作,比如t1时间读取了一行数据,t2时间的时候读取到了这个数据,内容已经发生改变了,这个就叫做不可重复读;而幻读描述的是幻想行的问题,他是指,在t1时间使用一个sql 得到了n条数据,而在t2 时间使用相同的sql 却得到了n+1 条数据,那么多出来的这一条数据就叫做幻象行,而这个操作就叫做幻读,也就是说不可重复读描述的侧重点是修改操作,而幻读描述的侧重点是添加(或删除)操作。
**如果不存在幻读的问题,那么无论你怎么执行,都不会出现幻象行的,也就是不会出现多一条数据的问题的(使用相同的SQL)。