事务控制语言(TCL)

事务

概念:一个或一组SQL语句组成的执行单元,执行单元所有SQL语句要么全执行,要么全不执行。
栗子:张三给李四转账。
张三:账户1000元。      李四:账户1000元。
update 表 set '张三账户' = 500 where name = '张三';
数据库中途异常...
update 表 set '李四账户' = 1500 where name = '李四';
(两条语句组成一个执行单元,中途如果出现意外,结果显然不是想要的。)

每条语句相互依赖,作为一个不可分割的整体,如果发生意外回滚至最初状态。

事务的特点:
①.原子性:事务是不可分割的一个单位,事务中操作要么都执行,要么都不执行。
②.一致性:事务必须从一个一致性状态到另一个一致性状态。
(转账栗子中转账前是2000元,转账后依然是2000元。)
③.隔离性:一个事务执行不被另一个事务干扰。(隔离级别控制)
④.持久性:一个事务一旦被提交,对数据库数据是永久性的。
(删除操作,无法恢复,只能重新创建。)
事务的创建和分类:
①.隐式事务:事务没有明显开启结束标记。
(如:insert、update、delete语句。autocommit自动提交默认开启状态。)
②.显式事务:事务具有明显开启结束标记。
(设置自动提交为off ,只对当前事务有效)。
栗子:
    ⒈设置自动提交状态。
    set autocommit = 0;
    ⒉编写需要的SQL语句。
    (select、delete、update、insert)
    ⒊结束事务。
    commit;(提交事务)  或  rollback;(回滚事务)

隔离

事务并发:
同时运行的多个事务,当这些事务访问数据库相同数据时,
如果没有采用隔离机制,就会出现并发问题。
出现的问题:
①.脏读:事务1对数据库数据进行更新,但没有提交,
事务2读取相同数据,此时如果事务1回滚事务2读取的数据就是临时且无效的数据。
②.不可重复读:事务1读取数据库数据之后,没有提交,
此时事务2对相同数据进行更新,事务1再次读取数据时数据变了。
③.幻读:事务1读取数据库数据之后,没有提交,
此时事务2插入新的数据,事务1再次读取数据时多出一些数据。
事务的隔离级别:
①.read uncommitted :脏读,不可重复读,幻读都会出现。
②.read committed :避免脏读,会出现不可重复读和幻读。
③.repeatable read :避免脏读和不可重复读,会出现幻读。
④.serializable :都会避免。
命令:
    ⒈查看隔离级别:
     select tx_@@isolation;
    ⒉设置隔离级别:
     set session/global transaction isolation level 隔离级别;

MySQL默认第三种隔离级别,Oracle默认第二种。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值