Markdown编辑器用的不顺手,自己选的,跪着也要用完。
事务通俗的来讲就是SQL要么全部执行成功,要么全部执行失败回滚到执行前的状态。不存在部分执行成功,部分执行失败的情况。
事务通常需要满足四个特性,也就是事务的ACID特性。对于Oracle数据库来说,其默认的事务隔离级别是READ COMMITTED;对于InnoDB存储引擎,其默认的事务隔离级别为REPEATABLE READ。
原子性(atomicity)。原子性是指整个数据库事务是个不可分割的工作单位。只有事务中的数据库所有操作操作都执行成功,才算整个事务成功。一致性(consistency)。一致性是指事务讲数据库从一种状态转变为另一种一致的转态。隔离性(isolation)。隔离性也叫并发控制、可串行化、锁等。事务的隔离性要求每个读写事务的对象对其他事务的操作对象能相互分离。持久性(durability)。事务提交后,其结果将会保存到硬件上。 事务的隔离级别事务的隔离级别有
read uncommittedread committedrepeatable readserializable read uncommitted事务1读到了事务2未提交的数据,出现了脏读
事务2增加或者修改了数据,事务1前后两次读取到的数据不一样(不满足事务的一致性)。
1核1G服务器,开启2个事务,我以很快的速度提交事务,一直提示
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction这个问题。后来查询了下,发现是因为有事务没有提交,使用
select * from information_schema.innodb_trx G来查看事务提交情况,使用kill trx_mysql_thread_id就可以了。
repeatable read 会出现幻读,比如我事务1修改了特定或者全部数据,我事务2新增加了一个1条记录。事务2提交后,事务1也提交,再查询,发现有条数据没有被更新成为指定值。
事务最高隔离级别,事务是一个一个执行的,测试的时候发现,更新操作需要等待另外一个事务commit后才能执行成功。
阿里面试事务原理
事务实现原理 redo 和undo 日志查看 小记2、本文参考了 MySQL技术内幕-InnoDB存储引擎 书籍,该书指粗略的看了下,不是太明白,有机会大家多交流交流。
2、Markdown还是用的不是很熟练。和写论文的LaTeX一样,用起来不顺手QAQ。