8.2.事物

开启事物:当开启事物之后,数据只会在临时表修改,如果不提交,那么关闭窗口之后,事物就会自动回滚
START TRANSACTION;
如果发现错误,执行回滚,就不会讲数据提交给正式表
ROLLBACK;
如果没有错误,那么就提交数据
COMMIT;

---------------------------
在mysql中一条语句会自动提交
为1代表自动提交

image.png

---将参数改为0,就是一条语句不默认提交,除非commit
set @@autocommit=0;

ps:mysql是自动提交一条语句,而Oracle是手动提交一条语句


事物的四大特征

1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
2.持久性:如果事物一旦提价或者回滚,数据库会持久化的保存数据
3.隔离性:多个事物之间相互独立
4.一致性:事物操作前后,数据总量不变

事物的隔离级别

//多个事物操作同一批数据可能引发的问题
1.脏读:一个事物读取到另一个事物中没有提交的事物
2.不可重复读(虚读):在同一个事物中,两次读取到的数据不一样
3.幻读:一个事物操作(DML)数据表中所有记录,另一个事物添加了一条数据,则第一个事物查询不到自己的修改
事物的隔离级别:安全性越来越高,效率越来越低
1.read uncommitted:读未提交的
        产生的问题:脏读,不可重复读,幻读
2.read committed:读已提交的(oracle默认)
        产生的问题:不可重复读,幻读
3.repeatable read:可重复读(mysql默认)
         产生的问题:幻读
        为什么会产生不可重复读问题?
                当两个窗口设置为read committed的时候,第一个窗口开启了事
务,然后修改数据但是未提交,
这个时候,第二个窗口查询的是原来的数据,然后第一个窗口提交数据,第
二个窗口再次查询数据,查询到的是修改后的数据,
这样两次查询出来的数据就不一样,所以就叫不可重复读!
              当设置为可重复读之后,两个窗口都开启事物,第一个窗口修改数据
但是未提交,第二个窗口查询数据也未提交,这个时候查询的是未修改的数
据,然后第一个窗口提交数据,但是第二个窗口再次查询数据,仍然未提交
事务,这个时候查询的仍然是未修改的数据,这样第二个窗口两次查询到的
都是未修改的数据,数据保持一致,这就叫可重复读!当把第二个窗口的
事务提交之后,再次查询才能够查询到提交之后的数据

4.serializable:串行化
        可以解决所有的问题
        当第一个事物操作这张表,它会锁住这张表,不让另外的事务访问,这
个事物会一直暂停在这里,除非第一个事物提交或者回滚
数据库查询隔离级别
select @@tx_isolation;
数据库设置隔离级别,必须关闭当前窗口之后才会生效
set global transaction isolation level 级别字符串;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 为了充分发挥MySQL的性能并顺利地使用,就必须理解其设计。MySQL的灵活性体现在很多方面。例如,你可以通过配置...
    李文文丶阅读 4,990评论 0 4
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 10,180评论 0 30
  • 事物 事务执行是一个整体,所有的 SQL 语句都必须执行成功。如果其中有 1 条 SQL 语句出现异常,则所有的S...
    哈哈大圣阅读 3,188评论 0 1
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 9,047评论 0 7
  • 1.检查接口 1.功能说明:检查园区名称是否重复 2.请求方式:GET 3.请求URL: 4.请求参数: 5.返回...
    陈丽富阅读 2,732评论 0 0

友情链接更多精彩内容