今日整理:
1.什么是事务,什么是提交,什么是回滚?
答:
……什么是事务:
事务开启之后, 所有的操作都会临时保存到事务日志中, 事务日志只有在得到 commit 命令才会同步到数据表
中,其他任何情况都会清空事务日志(rollback,断开连接)
在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。
通俗的讲,事务将SQL语句组合成一个单元,而这个单元在处理数据的时候不可分割,一荣俱荣。
……什么是提交:
手动提交事务:
1) 执行成功的情况: 开启事务>执行多条 SQL 语句>成功提交事务
2) 执行失败的情况: 开启事务>执行多条 SQL 语句>事务的回滚
自动提交事务:
MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务, MySQL 默认开始自动提交事务
……什么是回滚?
事务操作失败:rollback(回滚事务)
执行失败的情况: 开启事务>执行多条 SQL 语句>事务的回滚
即数据恢复到事务开始的阶段
2.mysql有几个隔离级别?
答:
- 读 未提交: read uncommitted ,不能解决任何读问题
- 读 提交: read committed ,只能解决脏读问题
- 重复读 : repeatable read ,能解决脏读,以及不可重复读问题
- 序列化: serializable ,能解决所有读问题
各级级别按上面的总结从低到高排列的,隔离级别越高,解决的读问题就越多。
但是:隔离级别越过,数据库的执行效率越差。
3.数据库并发访问问题都有哪些?
答;
- 脏读问题(dirty reads)
一个事务读取到了另一个事务未提交的数据
- 不可重复读(non-repeatable reads)
一个事务读取到了一个事务提交的数据,导致一次事务中,两次读取的数据不一致
- 幻读(phantom reads)
一个事务读取到了另一个事务已经插入的数据,导致一次事务中,两次读取的数据不一致
|