失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别

MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别

时间:2021-04-04 21:48:05

相关推荐

MySQL --- 19♪  进阶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:xxx

--------------------------

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;#EngineSupportCommentTransactionsXASavepoints

#InnoDBDEFAULTSupports transactions, row-level locking, and foreign keysYESYESYES

#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;

UPDATEaccount SET balance =500 WHERE username='张无忌';

UPDATEaccount SET balance =1500 WHERE username='赵敏';

COMMIT;

SELECT * FROM account;

#---------------------------------

#: 或者使用#rollback 进行回滚,滚回更新前的结果

SET autocommit=0;

START TRANSACTION;

UPDATEaccount SET balance =1000 WHERE username='张无忌';

UPDATEaccount 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;

MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

如果觉得《MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。