MySQL(20) 之 事务(TCL)

事务(TCL)

Transaction Control Language 事务控制语言


事务:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。

案例:转账

张三丰  1000
郭襄    1000

update 表 set 张三丰的余额=500 where name='张三丰'
意外
update 表 set 郭襄的余额=1500 where name='郭襄'


事务的特性:
ACID
原子性:一个事务不可再分割,要么都执行要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:一个事务的执行不受其他事务的干扰
持久性:一个事务一旦提交,则会永久的改变数据库的数据.

事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如insert、update、delete语句

delete from 表 where id =1;

显式事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用

set autocommit=0;

步骤1:开启事务
set autocommit=0;
start transaction;可选的
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...

步骤3:结束事务
commit;提交事务
rollback;回滚事务

savepoint 节点名;设置保存点

事务的隔离级别:
                                   脏读      不可重复读    幻读
read uncommitted:    √              √                  √
read committed:          ×            √                  √
repeatable read:         ×            ×                  √
serializable                   ×             ×                  ×


mysql中默认 第三个隔离级别 repeatable read
oracle中默认第二个隔离级别 read committed
查看隔离级别
select @@tx_isolation;
设置隔离级别
set session|global transaction isolation level 隔离级别;


开启事务的语句;
update 表 set 张三丰的余额=500 where name='张三丰'

update 表 set 郭襄的余额=1500 where name='郭襄' 
结束事务的语句;

SHOW VARIABLES LIKE 'autocommit';
SHOW ENGINES;

#1.演示事务的使用步骤

#开启事务
SET autocommit=0;
START TRANSACTION;
#编写一组事务的语句
UPDATE account SET balance = 1000 WHERE username='张无忌';
UPDATE account SET balance = 1000 WHERE username='赵敏';

#结束事务
ROLLBACK;
#commit;

SELECT * FROM account;


#2.演示事务对于delete和truncate的处理的区别

SET autocommit=0;
START TRANSACTION;

DELETE FROM account;
ROLLBACK;



#3.演示savepoint 的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;#回滚到保存点


SELECT * FROM account;

 

TCLMySQL中并不是指某种特定的编程语言,您可能是想问的是“事务控制语句”(Transaction Control Language)。这些命令用于管理数据库中的事务处理,确保数据的一致性和完整性。 以下是几个常用的 MySQL 事务控制语句: 1. **START TRANSACTION** 或者 **BEGIN**: 开始一个新的事务。这标志着一系列操作将作为一个整体来对待,在所有步骤都成功完成之后才能真正生效。 ```sql START TRANSACTION; ``` 2. **COMMIT**: 提交当前事务的所有更改,并将其永久保存到数据库中。一旦提交,则无法撤销已做的修改。 ```sql COMMIT; ``` 3. **ROLLBACK**: 如果遇到了错误或者其他需要终止的情况时可以回滚事务,即取消从上一次`START TRANSACTION`以来所作的一切变更,恢复到最初状态。 ```sql ROLLBACK; ``` 4. **SAVEPOINT name**: 创建一个名为name的保存点,允许部分地回退某个大事务内的某些小的操作序列而不影响其他已完成的部分。 ```sql SAVEPOINT my_savepoint; ``` 5. **RELEASE SAVEPOINT name**: 删除指定名称的savepoint。如果此保存点是在活动事务内设置的第一个或唯一的保存点,则该事务会隐式结束并自动提交;如果不是第一个的话则仅移除该标记而已并不会立即触发commit动作。 ```sql RELEASE SAVEPOINT my_savepoint; ``` 6. **SET autocommit=0/1**: 设置是否开启自动提交模式,默认值为1(开启) 。当关闭了autocomit选项(`set autocommit = 0`) 后每次对表的数据更新都需要显式的调用commit命令才能够使改动持久化存储下来; 而开启了auto-commit 功能的情况下每条SQL指令会被视为独立的小型"事务", 执行完就会立刻存盘入库. 注意:并非所有的 SQL 数据库系统都支持相同的语法结构,请参照具体产品文档确认细节差异。另外需要注意的是InnoDB 引擎对于事务的支持比较好,而 MyISAM 则不行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值