MySQL——InnoDB事务
事务:全部成功 或 全部失败! ---------------------------------------------------------------------------------------------- 1、原子性:全部成功或全部取消。 2、一致性:如果数据库在事务开始时处于一致状态,则在执行该事物期间将保留一致状态。 3、隔离性:事物之间不相互影响。 4、持久性:事务成功完成后,所做的所有改变将准确地记录在数据库中,所做的更改不会丢失。 ---------------------------------------------------------------------------------------------- 5、事务SQL控制语句: ----MySQL5.5之后默认自动提交模式,不需要begin或start transaction语句,默认开启autocommit模式。 ----可以通过以下命令修改关闭(0是关闭,1是开启): (1)临时生效: SET GLOBAL AUTOCOMMIT=0; ---- 所有新建会话 SET SESSION AUTOCOMMIT=0; ---- 当前会话 SELECT @@AUTOCOMMIT; ---- 查看设置结果 (2)永久生效: vim /etc/my.cnf [mysqld] AUTOCOMMIT=0 ----标记: 事务开始:begin / start transaction MySQL5.5之后,自动开启“开始”,不需要手工录入 事务结束:commit 事务撤销(回滚):rollback 6、导致事务提交的非SQL事务控制语句(隐式提交): DDL: alter / create / drop ... DCL: grant / revoke / set password ... 锁定语句: lock tables / unlock tables ... 7、事务日志redo redo: 重做日志,事务日志的一种。 (1)记录内存页的变化。 (2)是为了提高数据持久化的一种特性。 (4)redo工作原理: MySQL在对数据进行修改的时候,是在内存中进行的,提交后才会写到磁盘中, 同时在修改数据的过程中,redo会在数据修改的过程中,对更改信息定时写到磁盘 中,但是如果事务执行失败,redo会重做日志,将磁盘更改信息恢复到修改之前。 8、事务日志undo undo:回滚日志,事务日志的一种。 (1)undo工作原理: MySQL在对数据进行修改的时候,是在内存中进行的,提交后才会写到磁盘中, 在开始修改之前undo会对当前的状态进行“拍照”,同时undo会在数据修改 的过程中,对更改信息定时写到磁盘中,但是如果事务执行失败,undo会用 之前的“照片”覆盖更改信息,将磁盘更改信息恢复到修改之前。 9、LSN(redo/undo中) LSN:日志版本号、或叫日志序列号 10、事务中的锁(锁定)(性能高于MyISAM)(高并发锁:行级锁---->可以只锁一行) 四种隔离级别: ----READ UNCOMMITTED 允许事务查看其它事务所进行的未提交更改 ----READ COMMITTED 允许事务查看其它事务所进行的已提交更改 ----REPEATABLE READ*** 确保每个事务的 SELECT 输出一致 InnoDB的默认级别 ----SERIALIZABLE 将一个事务的结果与其它事务完全隔离