欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TCL事物控制语言

程序员文章站 2022-07-05 13:22:55
...
#TCL (transaction control language)事物控制语言
/*
事物:一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行
事物的特点:(ACID)
	1、原子性(atomicity):一个事物不可再分割,都执行或都不执行
	2、一致性(consistency):一个事物会使数据从一个一致状态切换到另一个一致状态(没有中间商赚差价)
	3、独立性(isolation):一个事物的执行不受其他事物的干扰(由设置的级别决定)
	4、持久性(durability):事物一旦执行,会永久改变数据,不可撤回
事物的创建:
	隐式事物:事物没有明显的开启和结束的标志
		如update,insert,delect语句(默认一个语句为一个事物)
	显式事物:有明显的开启和结束的标志
		前提:设置自动提交功能为禁用  set autocmmit=0;
创建事物的步骤:
	step1、开启事物
		set autocmmit=0;   #关闭自动提交功能
		【start transaction;】  #可不写,关闭自动提交功能默认开启事物
	step2、编写事物中的SQL语句(select,update,delect,insert)
		。。。
		。。。
	step3、结束事物
		commit;    #提交事物---结束方式1
		rollback;  #回滚事物---结束方式2
事物隔离的级别:
				脏读		不可重复度		幻读
	read uncommitted:	出现		  出现			出现
	read committed:		 \		  出现			出现
	repeatable read:	 \		    \			出现
	serializable: 		 \		    \ 			  \    
	
	1、MySQL默认第三隔离级别  repeatable read
	   oracle默认第二隔离级别  read committed
	2、查看隔离级别的语句 select @@tx_isolation;
	3、设置隔离级别的语句(当前或全局) set session|global transction isolation level 隔离级别;
	
*/
SHOW ENGINES; #显示存储引擎
SHOW VARIABLES LIKE 'autocom`student`mit';  #查看自动提交状态是否开启
SET autocommit=0;                   #设置自动提交状态关闭
-- -----------------------------------------------------------
#新建数据表插入数据
DROP TABLE IF EXISTS account;

CREATE TABLE IF NOT EXISTS account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20),
	balance DOUBLE
);

INSERT INTO account (username,balance) VALUES('老板','10000'),('我','10000');
SELECT * FROM account;
-- -------------------------------------------------
#1、演示事物使用步骤
#1、开启事物
SET autocommit=0;
START TRANSACTION;
#2、编写事物语句
UPDATE account SET balance=10000 WHERE username='我';
UPDATE account SET balance=10000 WHERE username='老板';
#3、提交事物
COMMIT;
-- rollback;  #就是执行不完又回到执行前的样子了

-- -------------------------------------------------
#2、演示事物对delete和truncate 的处理的区别
-- --------delete支持回滚------
SET autocommit=0;
START TRANSACTION;
DELETE FROM account;
ROLLBACK;
-- --------truncate不支持回滚,直接删掉--------
SET autocommit=0;START TRANSACTION;
TRUNCATE TABLE account;
ROLLBACK;

-- -----------------------------------------------------
#3、演示savepoint的使用(设置保存点,和rollback配合使用)
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=1;
SAVEPOINT a;   #设置保存点
DELETE FROM account WHERE id=2;
ROLLBACK TO a;   #回滚到保存点(保存点之前的执行完了,之后的没执行)

SELECT * FROM account;