1.3 事务

事务是指将一个业务流程中对数据库的多次操作绑定在一起,使其成为一个最小的执行颗粒,当这些操作中某一个失败了,整个流程也会失败,这样做能防止数据库数据不一致等问题.
事务有以下几个特征(ACID):

  • 原子性(A: atomicity)
    一个事务是一个最小的执行颗粒,不可再分,整个事务要么都成功,要么都失败.

  • 一致性(C:consistency)
    <没理解,感觉更像是原子性的一个补充>

  • 隔离性(I:isolaton)
    一个事务在未提交前对其它事务都是不可见的,其它事务不能访问未提交事务修改的数据.

  • 持久性(D:durability)
    一旦事务提交,其所作的修改都会持久保存下来.

在数据库中,实现了ACID的数据库比未实现了要消耗更多的CPU 和硬盘资源.

在mysql中,可以通过对autocommit参数的修改来开启或者关闭自动提交,当其为0时表示关闭自动提交,这时候在执行sql语句时需要手动在末尾执行commitrollback来提交或者回滚事务.修改autocommit参数的方式为set autocommit=0;

另外,还可以在执行语句前加上start tranaction;来开启一个事务,其优先级大于autocommit,即使autocommit为1,也会开启事务.

1.3.1 事务的隔离级别

在数据库中有如下四种隔离级别:

  • read uncommitted(未提交度)
    是指读取其它事务未提交的数据,这样会造成造成脏读,因为可能会读取到其它事务最终回滚掉的垃圾数据或者未处理完成的数据.

  • read commit(提交读)
    每次读取到的都是其它事务提交的数据,这样有个问题是会造成在同一个事务中多次对同一个数据读取,由于在读取期间其它事务对同一条数据进行了修改提交,这样会造成同一个数据库中的多次读取数据不一样,即不可重复读.

  • repeatable read(可重复读)
    此级别保证了在同一个事务中的多次读取到的数据都是相同的,但这样会出现幻读,它是当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
    可重复读是mysql默认的事务隔离级别,其使用了MVCC解决了幻读的问题.

  • serializable (可串行化)
    此界别是将事务的执行全部串行化,既禁止对同一个数据的并发读取,主要是使用锁来实现.此级别是最高隔离界别,会出现大量的锁的争用和超时问题,只有在确保数据一致性和可以接受没有并发的情况下才考虑用户此级别.

隔离级别 脏读可能性 不可重复读可能性 幻读可能性 加锁读
read uncommitted yes yes yes no
read commit no yes yes no
repeatable read no no yes no
serializable no no no yes

1.3.2 死锁

死锁是指当多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而导致的恶性循环现象.例如:

  • 事务 1
start stranaction;
update user set user_name ='A' where user_id=1;
update user set user_name ='B' where user_id=2;
commit;
  • 事务 2
start stranaction;
update user set user_name ='C' where user_id=2;
update user set user_name ='D' where user_id=1;
commit;

在上面的两个事务中,若两个事务都执行了第一个update语句,这时候这两行数据都被锁定,这时候再执行第二个update语句,就会出现死锁现象.
在mysql的innodb中处理死锁的方式是当检测到死锁发生时,将持有最少行级排它锁的事务进行回滚.对于事务性数据库,死锁是无法避免的.

1.3.3 事务日志

事务日志是在事务数据库中,一次事务的操作修改的是数据表的内存拷贝部分,然后在提交数据后,数据库再将这部分数据拷贝写到数据库中,既对数据表的一次修改操作设计的是硬盘的两次读写.当数据拷贝时突然发生断电,下次再启动时,数据库会再从缓存中将数据拷贝到数据表中,目前mysql采用的是这样的方式.

1.3.4 mysql中的事务

msyql中提供了两种事务型数据库引擎: Innodb 和 NDB Cluster.

  • 自动提交
    在mysql中autocommit是默认开着的,即默认自动提交,可以使用下面命令查看
    show variables like 'autocommit
    可使用set autocommit=1来修改其状态.

mysql 可以通过以下命令修改隔离级别
set session tranaction isoltion level <read committed>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • 一、事务 1、事务四要素:ACID 对于事务,我之前的理解是很粗糙的,不就是为了保证操作的原子性么?一般订单系统或...
    张伟科阅读 1,269评论 0 5
  • 为了充分发挥MySQL的性能并顺利地使用,就必须理解其设计。MySQL的灵活性体现在很多方面。例如,你可以通过配置...
    李文文丶阅读 1,149评论 0 4
  • 11月8日,女性时尚生活线上平台OnlyLady联手KIMISS闺蜜,在上海举办了时尚颁奖盛典2017风尚大赏,打...
    小妖娱阅读 732评论 0 0
  • 首先很感谢一直以来喜欢我的人。 因为特殊原因我已经很久没有更新了。之前的小说也因为我感到并不好而全部删除。新号名为...
    元汐儿阅读 71评论 0 0