MySQL进阶15--TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读
#TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行; 事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的; 处理事务的关键字: 建立事务: SET autocommit=0; START TRANSACTION; 结束事务: commit; #rollback; #回滚 设置断点: SAVEPOINT a; #设置一个回滚点 ROLLBACK TO a; #回滚到保存点a ----------------------- 事务的隔离级别中出现的异常: 脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的. 不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了. 幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插 入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行. --------------------------- (回滚无效)脏读 幻读 不可重复读 read uncommited : √ √ √ read commited : × √ √ repeatable read : × x √ serializable : x x x -------------------------- Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ COMMITED Mysql 支持 4 种事务隔离级别. Mysql 默认的事务隔离级别 为: REPEATABLE READ ; ---------------------------- 查看隔离级别: (未能实现,找不到该命令!!) select @@tx_isolation; 设置隔离级别: set session/global(全库) transaction isolation level 隔离级别; */ #1、通过show engines;来查看mysql支持的存储引擎。 SHOW ENGINES; #Engine Support Comment Transactions XA Savepoints #InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES #2/演示事务的使用步骤:转账 #(1)建立表 CREATE DATABASE test; DROP TABLE IF EXISTS account; CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20), balance DOUBLE ); INSERT INTO account(username,balance) VALUES('张无忌',1000),('赵敏',1000); #(2)开启事务,编写一组事务的语句,结束事务COMMIT(提交) SET autocommit=0; START TRANSACTION; UPDATE account SET balance =500 WHERE username='张无忌'; UPDATE account SET balance =1500 WHERE username='赵敏'; COMMIT; SELECT * FROM account; #--------------------------------- #: 或者使用#rollback 进行回滚,滚回更新前的结果 SET autocommit=0; START TRANSACTION; UPDATE account SET balance =1000 WHERE username='张无忌'; UPDATE account SET balance =1000 WHERE username='赵敏'; ROLLBACK; SELECT * FROM account; #命令行下设置事务最低的隔离级别 : read uncommitted SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; # 结果: Query OK, 0 rows affected (0.00 sec) #--------------------------- #2.演示事务对delete 和 truncate 的处理的区别 SET autocommit=0; START TRANSACTION; DELETE FROM account; #truncate from account; # 事务不支持这种删除! ROLLBACK; SELECT * FROM account; INSERT INTO account VALUES(25,'qwq',111),(26,'aaa',222); #3:演示savapoint(保存点) 的使用 SET autocommit=0; START TRANSACTION; DELETE FROM account WHERE id=25; SAVEPOINT a; #设置一个回滚点 DELETE FROM account WHERE id=25; ROLLBACK TO a; #回滚到保存点a SELECT * FROM account;
你不逼自己一把,你永远都不知道自己有多优秀!只有经历了一些事,你才会懂得好好珍惜眼前的时光!