1. 事务和mysql的关系
事务是具有原子性,一致性,隔离性和持久性,而mysql是实现事务的方式之一,mysql根据事务规则来存储和获取数据的
2. 事务的四个特性解释
在一个事务中可以有很多的操作,比如更新操作1,更新操作2,查询操作1等
| -------------- | ------------ | ------------ | ------------- | ------------ | ------------ |
事务开始 更新操作1 更新操作2 查询操作3 更新操作4 更新操作5 事务结束
原子性:指事务一次执行成功或者失败,当在事务的中间出现异常,执行失败,需要回滚到事务开始的阶段
一致性:主要指的数据一致性,当事务执行失败,或者对之前执行过程的数据进行回滚,或者对执行失败步骤的数据进行补偿
隔离性:指事务之前的操作是互相隔离开的,互不影响,但是并发操作存在线程安全的问题
持久性:指的是事务是有状态的,比如事务执行了,之前操作的状态是可以查找的,不会因为外部问题,造成数据查找不到
3. 并发事务造成的数据库问题
并发产生多个事务,如果多个事务操作多条数据,是不会产生事务问题的,但是操作一条数据就会产生问题:
脏读:多个事务操作一条数据,当T1修改了数据,而T2读取T1修改了之后的数据,但是T1事务失败回滚,所以T2读取到的数据就是无效数据,就会出现脏读
不可重复读:多个事务操作一条数据,当T1修改了数据,T2修改了数据,当T3在读取数据时,就会和T1读取的数据不一样,造成了对同一条数据的不可重复读
幻读:是操作多条数据,T1获取的数据条数和T2获取的数据条数不一致造成幻读
4. mysql数据库为了避免并发事务的问题,设置了数据的隔离级别
多个事务对一条数据操作,指的是update操作,读操作不当做事务方式
读未提交的数据:读取事务未提交的数据,多个事务操作一条数据可能造成脏读,不可重复读,操作多条数据可以能造成幻读
读已提交的数据:因为已经提交的数据不会回滚造成一开始读取的失效,所以不会造成脏读,但是多个事务操作一条数据造成不可重复读,操作多条数据可以造成幻读
重复读取数据:禁止多个事务同时操作一条数据,但是在事务执行期间,可以确保多次读取的数据都是重复的,但是幻读避免不了,实际是就是锁行
串行化:锁表,在一个事务执行时,该表数据就会被锁定,在事务执行期间,可以确保多次读取数据的行数是一致的