数据库之DTL——数据事务语言 事务

事务的定义

指一组相关的SQL操作,这组操作必须同时成功或者同时失败
我们所有的操作都是处在事务中的。
在数据库中,执行业务的基本单位是事务,不是某一条SQL。数据库在默认情况下,事务都是打开的,也就说它是一直处在事务中的,一个事务的结束,代表着下一个事务的开启。
执行commit或者rollback指令时,会结束当前事务。

作用:用来保证数据的平稳性和可预测性。

事务的四大特性(ACID)

atomic,原子性,事务是不可再分割的,要么同时成功,要么同时失败
consistency,一致性,事务一旦结束,内存中的数据和数据库中的数据是保持一致的
isolation,隔离性,事务之间互不干扰,一个事务的结束意味着下一个事务的开启
duration,持久性,事务一旦提交,则数据持久化到数据库中,永久保存

操作事务的命令

  1. commit,提交事务
    把事务中所有的数据持久化到磁盘中
  2. rollback [TO 回滚点],回滚事务
    把事务中所做的操作全部取消,回到初始状态
  3. savepoint 回滚点,设置回滚点
    事务回滚时,回到的起点

多事务的并发处理机制

原因:多个事务同时操作一个表中的同一行数据,如果这些操作是修改操作的话,就会产生并发问题,如果不处理,则会造成数据不一致的情况。

数据库可能产生的并发问题包括:

  1. 脏读
    是指一个事务正在访问数据,并且对这个数据进行修改,而这种修改还没有提交到数据库中,而另一个事务也访问了这个数据,并且使用了这个数据。
    解决方法:一个事务在修改数据时,该数据不能被其他事务访问

  2. 不可重复读
    是指一个事务多次读取同一条记录,如果此时另一个事务也访问并且修改了该数据,则就会出现多次读取出现数据不一致的情况,原来的数据变成了不可重复读取的数据。
    解决方法:只有在修改事务完全提交过后才可以读取到数据

  3. 幻读
    是指一个事务修改表中的多行记录,但是此时另一个事务对该表格进行了插入数据的操作,则第一个事务会发现表格中会出现没有被修改的行,就像发生了幻觉一样。
    解决方法:在一个事务提交数据之前,其他事务不能添加数据

补充

  1. 目前主流的数据库都是支持事务的,而且其中Oracle支持的最好。
  2. 一个事务不能读取到另一个事务还没有提交的数据。
  3. DDL语句都会自动提交事务。
  4. MYSQL默认情况下,DML语句是自动提交事务的;
    ORACLE默认情况下,DML语句是手动提交事务的。
  5. 修改MYQL数据库自动提交模式:
    1.[永久] 修改my.ini文件,在 [mysqld] 下添加autocommit=0,重启服务
    2.[临时] 执行语句 set session autocommit=0; 仅对当前会话窗口有效
  6. 查看当前数据库事务提交模式:
    show session variables like ‘autocommit’;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

toollong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值