TCL语言之事务

tcl是事务控制语言

事务的特点(ACID)

  • 原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);
  • 一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);
  • 隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);
  • 持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)

事务的分类
隐式事务:事务没有明显的开启和结束标志。可以自动提交。比如:insert 、update 、delete语句。
显式事务:事务有明显的开启和结束标志。前提是必须先设置自动提交功能为禁用。

set autocommit=0;
只针对当前事务有效

事务的创建
步骤1:开启事务

set autocommit=0;
start transaction;(可选)

步骤2:编写事务中的sql语句(select insert update delete)。dbl语言没有事务
步骤3:结束事务

commit#提交事务
rollback#回滚事务

事务的并发问题
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题

  • read uncommtted(读未提交数据):允许事务读取未被其他事务提交的更改。脏读、不可重复读(在另一事务提交前后查询到的内容不同)和幻读(针对插入和删除)的问题都会出现
  • read commted(读已提交数据):只允许事务读取已经被其他事务提交的更改。只可以避免脏读
  • repeatable read(可重复度)(mysql默认):确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行更新。可以避免脏读和不可重复读
  • serializable(串行化):确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其他事务对该表执行插入,更新和删除操作。可以解决所有并发问题,但性能低下
    查看当前的隔离级别
select @ @tx_isolation

设置当前mysql连接的隔离级别

setsessiontransaction isolation level 隔离级别

设置数据库系统的全局的隔离级别

set globalsessiontransaction isolation level 隔离级别

delete和truncate在事务使用时的区别
delete可以回滚,truncate不可以

保存点

savepoint 名;#设置保存点
rollback to 名;  #回滚到保存点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值