工资薪水高低:关键就在于是否精心准备了面试,你认同吗?
上一篇我们说了MySQL中索引的方方面面,这一片我们主要谈谈MySQL中事务方面的点点滴滴。
面试官:说说什么是事务?
事务就是一条或多条DMLSQL语句的集合。关键点就是事务中的所有语句要么都执行成功,要么都执行失败,只有在事务中执行成功才会将结果写入数据库。
在MySQL四大常用引擎中,只有InnoDB支持事务,其余的MyIsAm、bdb、memory均不支持事务操作。MySQL事务用来处理复杂逻辑或者需要大批量操作的数据。而且MySQL中的事务默认都是自提交模式,如果想要手动开启事务,必须以begin命令开始,以commit或者rollback结尾。
面试官:事务都有哪些特性呢?
巧妙记忆:愿(原子性)意(谐音:一致性)被持久(持久性)隔离(隔离性)。
原子性(Atomicity):就是说事务中的所有操作,要么全都成功,要么全都失败,保证数据库中数据是一致的。就比如甲方向乙方转账1000,具体操作应该是先从甲方账户扣除1000,然后在将乙方账户增加1000,而这两个操作要么都提交,要么都回退,原子性就是保证不可能发生一个有效另一个无效的情况。
一致性(Consistency):就是说数据在事务操作前后必须都要满足业务规则的约束。简单点来说就是数据库中的数据从一种状态变成了另一种状态。还是拿转账来说,甲乙双方转账前后的金额必须保持一致。
隔离性(lsolation):数据库允许多个并发事务同时对数据进行读写和修改,为保证数据正确性,事务之间对数据的操作都是隔离的。还是拿转账来说,甲乙双方转账时,丙同时向甲转账。若同时进行的话,则可能产生数据一致性得不到满足,所以在甲乙事务执行过程中,其他事务不可以修改当前数据。如果多个事务同时操作一条数据,必须等前面一个rollback\commit完成,另一个才可以操作。所有事务对数据的操作都是基于上个事务的结果而进行的。
持久性(Durability):每个事务执行结束后对数据的修改都是永久的,即便系统发生故障数据也不会丢失。
面试官:truncate 和 delete 在事务中都有哪些区别呢?
truncate是DDL操作,delete是DML操作,它们共同点是都可以清空表的数据,但truncate执行后在事务中不可回滚,而delete可以回滚。truncate清空表后id重新自增,而delete则不会。
面试官:MySQL中常用的事务语句都有哪些?
开启事务的语句是由begin或者start transaction(read write| read only)命令开始的。或者把自提交关闭(set autocommit=0)。关闭事务的语句通常使用commit或rollback显示结束。commit表示提交事务,此时对数据库做的修改是永久性的,rollback表示回滚事务,撤销当前事务中对数据表的所有操作。
面试官:MySQL中什么情况下会产生隐式提交?
事务除了显示提交和回滚外还有隐式提交和回滚。隐式提交是begin后没有commit或rollback而是又在当前事务中输入了一次begin,隐式回滚是在退出会话、连接超时或者关机后MySQL会自动回滚当前事务。
oracle中事务不是自动提交,而MySQL中事务是自动提交,那到底要不要把MySQL中自动提交关闭呢?
优点:事务自动提交是有好处的,这样就不用手动一个个提交了。可以多个事务一起提交,这样会提高事务的每秒处理能力。
缺点:但在这个过程中如果某个事务一致没有提交此时就会出现行锁等待现象,其它事务必须等这个事务提交后才可以提交,这样也就影响了数据库的TPS值了。
建议:我不建议关闭MySQL的自动提交,这里采用默认就好了。
最后我想说
如果本篇内容对大家有用,请大家转发并收藏一下。写篇不易,写好篇更不易,希望大家可以多多支持鼓励小编。
下篇我们讲:程序员MySQL面试金点:MySQL 事务的面试题总结(下)
本篇由 王者小哆啦 百家号原创出品 谢谢您的观看!