范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MySQL的事务原理详解,一文让你搞懂

  事务(ACID)
  场景:小明向小强转账10元原子性(Atomicity)
  转账操作是一个不可分割的操作,要么转失败,要么转成功,不能存在中间的状态,也就是转了一半的这种情况。我们把这种要么全做,要么全不做的规则称之为原子性。隔离性(lsolation)
  另外一个场景:
  1. 小明向小强转账10元
  2. 小明向小红转账10元
  隔离性表示上面两个操作是不能相互影响的一致性(Consistency)
  对于上面的转账场景,一致性表示每一次转账完成后,都需要保证整个系统的余额等于所有账户的收入减去所有账户的支出。
  如果不遵循原子性,也就是如果小明向小强转账10元,但是只转了一半,小明账户少了10元,小强账户并没有增加,所以没有满足一致性了。
  同样,如果不满足隔离性,也有可能导致破坏一致性。
  所以说,数据库某些操作的原子性和隔离性都是保证一致性的一种手段,在操作执行完成后保证符合所有既定的约束则是一种结果。
  实际上我们也可以对表建立约束来保证一致性。持久性(Durability)
  对于转账的交易记录,需要永久保存。事务的概念
  我们把需要保证原子性、隔离性、一致性和持久性的一个或多个数据库操作称之为一个事务。事务的使用 开启事务
  BEGIN语句代表开启一个事务,后边的单词WORK可有可无。开启事务后,就可以继续写若干条语句,这些语句
  都属于刚刚开启的这个事务。
  BEGIN[WORK]mysql> BEGIN;
  Query OK, 0 rows affected (0.00 sec)
  mysql> sql...START TRANSACTION
  START TRANSACTION语句和BEGIN语句有着相同的功效,都标志着开启一个事务,比如这样:mysql> START TRANSACTION;
  Query OK, 0 rows affected (0.00 sec)
  mysql> sql...提交事务mysql> BEGIN;
  Query OK, 0 rows affected (0.00 sec)
  mysql> UPDATE account SET balance = balance - 10 WHERE id = 1;
  Query OK, 1 row affected (0.02 sec)
  Rows matched: 1 Changed: 1 Warnings: 0
  mysql> UPDATE account SET balance = balance + 10 WHERE id = 2;
  Query OK, 1 row affected (0.00 sec)
  Rows matched: 1 Changed: 1 Warnings: 0
  mysql> COMMIT;
  Query OK, 0 rows affected (0.00 sec)手动终止事务> mysql> BEGIN; Query OK, 0 rows affected (0.00 sec) mysql> UPDATE
  > account SET balance = balance - 10 WHERE id = 1; Query OK, 1 row
  > affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql>
  > UPDATE account SET balance = balance + 1 WHERE id = 2; Query OK, 1 row
  > affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql>
  > ROLLBACK; Query OK, 0 rows affected (0.00 sec)
  这里需要强调一下,ROLLBACK语句是我们程序员手动的去回滚事务时才去使用的,如果事务在执行过程中遇到了某些错误而无法继续执行的话,事务自身会自动的回滚。自动提交
  mysql> SHOW VARIABLES LIKE "autocommit";
  默认情况下,如果我们不显式的使用START TRANSACTION或者BEGIN语句开启一个事务,那么每一条语句都算是一个独立的事务,这种特性称之为事务的自动提交
  如果我们想关闭这种自动提交的功能,可以使用下边两种方法之一:
  显式的的使用START TRANSACTION或者BEGIN语句开启一个事务。这样在本次事务提交或者回
  滚前会暂时关闭掉自动提交的功能。
  把系统变量autocommit的值设置为OFF,就像这样: SET autocommit = OFF; 这样的话,我们写入的多条语句就算是属于同一个事务了,直到我们显式的写出COMMIT语句来把这个事务提交掉,或者显式的写出ROLLBACK语句来把这个事务回滚掉隐式提交
  当我们使用START TRANSACTION或者BEGIN语句开启了一个事务,或者把系统变量autocommit的值设置为OFF时,事务就不会进行自动提交,但是如果我们输入了某些语句之后就会悄悄的提交掉,就像我们输入了COMMIT语句了一样,这种因为某些特殊的语句而导致事务提交的情况称为隐式提交,这些会导致事务隐式提交的语句包括:定义或修改数据库对象的数据定义语言(Data definition language,缩写为:DDL)。所谓的数据库对象,指的就是数据库、表、视图、存储过程等等这些东西。当我们使用CREATE、ALTER、DROP等语句去修改这些所谓的数据库对象时,就会隐式的提交前边语句所属于的事务。隐式使用或修改mysql数据库中的表:当我们使用ALTER USER、CREATE USER、DROP USER、GRANT、RENAME USER、SET PASSWORD等语句时也会隐式的提交前边语句所属于的事务。事务控制或关于锁定的语句:当我们在一个事务还没提交或者回滚时就又使用STARTTRANSACTION或者BEGIN语句开启了另一个事务时,会隐式的提交上一个事务。或者当前的autocommit系统变量的值为OFF,我们手动把它调为ON时,也会隐式的提交前边语句所属的事务。或者使用LOCKTABLES、UNLOCKTABLES等关于锁定的语句也会隐式的提交前边语句所属 的事务。加载数据的语句:比如我们使用LOAD DATA语句来批量往数据库中导入数据时,也会隐式的提交前边语句所属的事务。其它的一些语句:使用ANALYZE TABLE、CACHE INDEX、CHECK TABLE、FLUSH、 LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE、RESET等语句也会隐式的提交前边语 句所属的事务。保存点
  如果你开启了一个事务,并且已经敲了很多语句,忽然发现上一条语句有点问题,你只好使用ROLLBACK语句来让数据库状态恢复到事务执行之前的样子,然后一切从头再来,总有一种一夜回到解放前的感觉。所以MYSQL提出了一个保存点(英文:savepoint)的概念,就是在事务对应的数据库语句中打几个点,我们在调用ROLLBACK语句时可以指定会滚到哪个点,而不是回到最初的原点。定义保存点的语法如下:
  SAVEPOINT 保存点名称;
  当我们想回滚到某个保存点时,可以使用下边这个语句(下边语句中的单词WORK和SAVEPOINT是可有可无的):
  ROLLBACK [WORK] TO [SAVEPOINT]保存点名称;
  不过如果ROLLBACK语句后边不跟随保存点名称的话,会直接回滚到事务执行之前的状态。
  如果我们想删除某个保存点,可以使用这个语句:
  RELEASE SAVEPOINT保存点名称;隔离性详解--修改隔离级别
  mysql> set session transaction isolation level read uncommitted;
  --查看隔离级别
  mysql> select @@tx_isolation;读已提交(READ UNCOMMITTED)
  一个事务可以读到其他事务还没有提交的数据,会出现脏读。
  一个事务读到了另一个未提交事务修改过的数据,这就是脏读。读未提交(READ COMMITTED)
  一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,会出现不可重复读、幻读。
  如果一个事务先根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来,这就是幻读。可重复读(REPEATABLEREAD)
  一个事务第一次读过某条记录后,即使其他事务修改了该记录的值并且提交,该事务之后再读该条记录时,读到的仍是第一次读到的值,而不是每次都读到不同的数据,这就是可重复读,这种隔离级别解决了不可重复,但是还是会出现幻读。串行化(SERIALIZABLE)
  以上3种隔离级别都允许对同一条记录同时进行读-读、读-写、写-读的并发操作,如果我们不允许读-写、写-读的并发操作,可以使用SERIALIZABLE隔离级别,这种隔离基金因为对同一条记录的操作都是串行的,所以不会出现脏读、幻读等现象。总结READ UNCOMMITTED隔离级别下,可能发生脏读脏读、**不可重复读、、幻读**问题。READCOMMITTED隔离级别下,可能发生不可重复读 不可重复读和**幻读问题,但是不会发生 问题,但是不会发生脏读**问题。REPEATABLE READ隔离级别下,可能发生幻读幻读问题,不会发生脏读脏读和**不可重复读**的题。SERIALIZABLE隔离级别下,各种问题都不可以发生。
  注意:这四种隔离级别是SQL的标准定义,不同的数据库会有不同的实现,特别需要注意的是MySQL在在REPEATABLE READ隔离级别下,是可以禁止幻读问题的发生的 隔离级别下,是可以禁止幻读问题的发生的。版本链
  对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(row_id并不是必要的,我们创建的表中有主键或者非NULL唯一键时都不会包含row_id列):trx_id:每次对某条记录进行改动时,都会把对应的事务id赋值给trx_id隐藏列。roll_pointer:每次对某条记录进行改动时,这个隐藏列会存一个指针,可以通过这个指针找到该记 录修改前的信息。Readview
  对于使用READ UNCOMMITTED隔离级别的事务来说,直接读取记录的最新版本就好了,对于使用SERIALIZABLE隔离级别的事务来说,使用加锁的方式来访问记录。对于使用READ COMMITTED和REPEATABLE READ隔离级别的事务来说,就需要用到我们上边所说的版本链了,核心问题就是:需要判断一下版本链中的哪个版本是当前事务可见的。
  ReadView中主要包含4个比较重要的内容:
  1. m_ids:表示在生成ReadView时当前系统中活跃的读写事务的事务id列表。
  2. min_trx_id:表示在生成ReadView时当前系统中活跃的读写事务中最小的事务id,也就是m_ids中的最小值。
  3. max_trx_id:表示生成ReadView时系统中应该分配给下一个事务的id值。
  4. creator_trx_id:表示生成该ReadView的事务的事务id。
  注意:max_trx_id并不是m_ids中的最大值,事务id是递增分配的。比方说现在有id为1,2,3这三个事务,之后id为3的事务提交了。那么一个新的读事务在生成ReadView时,m_ids就包括1和2,min_trx_id的值就是1,max_trx_id的值就是4。
  有了这个ReadView,这样在访问某条记录时,只需要按照下边的步骤判断记录的某个版本是否可见:如果被访问版本的trx_id属性值与ReadView中的creator_trx_id值相同,意味着当前事务在访问它自己修改过的记录,所以该版本可以被当前事务访问。如果被访问版本的trx_id属性值小于ReadView中的min_trx_id值,表明生成该版本的事务在当前事务生成ReadView前已经提交,所以该版本可以被当前事务访问。如果被访问版本的trx_id属性值大于ReadView中的max_trx_id值,表明生成该版本的事务在当前事务生成ReadView后才开启,所以该版本不可以被当前事务访问。如果被访问版本的trx_id属性值在ReadView的min_trx_id和max_trx_id之间,那就需要判断一下trx_id属性值是不是在m_ids列表中,如果在,说明创建ReadView时生成该版本的事务还是活跃的,该版本不可以被访问;如果不在,说明创建ReadView时生成该版本的事务已经被提交,该版 本可以被访问READ COMMITTED的实现方式
  每次读取数据前都生成一个ReadView
  REPEATABLE READ的实现方式
  在第一次读取数据时生成一个ReadViewMVCC总结
  MVCC(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程。可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。READ COMMITTD、REPEATABLE READ这两个隔离级别的一个很大不同就是:生成ReadView的时机不同,READ COMMITTD在每一次进行普通SELECT操作前都会生成一个ReadView,而REPEATABLE READ只在第一次进行普通SELECT操作前生成一个ReadView,之后的查询操作都重复使用这个ReadView就好了。
  至此MySQL事务就给大家讲完了,了解更多JAVA知识及资料可关注微信公众号"老周扯IT"

一部智能手机最长能用几年?主要有三个因素决定了手机的寿命现在手机更新换代的速度都太快了,一部手机可以使用多久,这是我们很多消费者,心里都想要知道的问题,那么有哪些因素是可以给我们手机的寿命带来影响的,笔者接下来就给大家分析一下。电池续航荣耀60系列正式上市,十大升级亮点多多荣耀60系列已全渠道开售,新机依旧主打颜值自拍,根据官方海报来看,新机有十大升级点,包含流光四曲屏前置500万AI超感知镜头一亿像素超清影像等等。外观设计部分,荣耀60系列主要面向苹果要出15英寸的iPad?颠覆的可能是带屏音箱作为知名的苹果专家,彭博社记者MarkGurman经常会带来关于苹果方面的最新消息。日前,在彭博社最新一期的PowerOn通讯中,MarkGurman透露苹果工程师及设计团队正在开12月20日晚间影响市场重要政策消息速递(附新闻联播集锦)我国公司法修改涉及国家出资公司公司登记制度等内容中华人民共和国公司法(修订草案)20日提请十三届全国人大常委会第三十二次会议审议。主要修改内容包括坚持党对国有企业的领导,完善国家出为什么越来越多的系统在做服务化?服务化有什么好处?首先要表明一个观点脱离业务实际情况的架构都是耍流氓,所以不是所有系统都必须服务化,也不要为了服务化而服务化。在了解服务化的好处之前,让我们先看看传统的系统架构是什么样的,当了解传统如果淘宝失去了薇娅,对于淘宝产生的影响会有多大?鲸落万物生能有啥影响?唯一的影响她赚的少了。品牌供应商把她那份直接让利买家,不是更好?她再不完蛋,淘宝都得怕她了我觉得没有任何影响,地球上缺了谁不转?我也不看她带货啊!带货的人这么哪个平台可以做文档管理系统?既然是要做系统,那自然是专业开发管理系统的免代码平台合适了,具体哪个平台的话个人比较推荐云表企业管理系统开发平台,这个平台不仅确实地实现了免代码,还有极高的开发自由度,可以保证做出为什么卸载淘宝和支付宝后,手机会顺畅很多,运行速度也更快了?假设你的手机配置为八gb运行内存,储存空间为128g,当支付宝和淘宝安装使用一段时间,比如2到3个月,由于在使用的过程中,支付宝和淘宝基本是在安装的过程中,会默认自动更新,并且自动我给淘宝店家打了差评,为什么他好评率还是100,而且它评论根本没有差评显示?你写差评得方式不够正宗,首先要超过30字,最好在60字左右,其次,要有调理重点的写,必须要强调是不是正品啊,客服态度啊,质量啊,这类敏感词。第三,也是最重要的,就是要放图片,最好多商汤科技重新启动公开招股,发行规模价格区间未受美国财政部名单影响央广网北京12月20日消息(记者马可佳)12月20日,中国人工智能企业商汤科技重启公开招股。此前,12月10日,在商汤科技赴港IPO公开招股之际,美国财政部将商汤集团列入涉军企业名拍照有了新方式,OPPOFindN后置自拍更高清现阶段随着消费者需求的不断提升,手机影像能力也在不断提升,后置的摄像头素质越发强大。这种情况下会有朋友在好奇要是自拍也能利用到手机的后置摄像头,那拍出来的画面清晰度等内容想必会有进
彭博社苹果正在内部开发新的金融支付系统据彭博社报道,苹果正在制定一项多年计划,未来将把金融服务引入内部,以减少对高盛等金融合作伙伴的需求。苹果正在开发支付处理技术和基础设施,如贷款风险评估欺诈分析信用检查和纠纷处理,此奥秘克戎毒株又双叒突变了,新毒株我们知道了什么?最近英国发现了奥密克戎毒株BA。1BA。2的重组毒株XE,在英国感染人的速度比BA。2快9。8。以后这种重组现象可能会越来越常见。奥密克戎目前已经产生了许多关联毒株,其最开始的版本SpringCloudGateway集成SaToken引言Hello大家好,这里是Anyin。在我之前的文章中,不知道大家有没有发现我的代码都是放在AnyinCloud1这个项目的(欢迎大家点个星星)。这个项目我积累了一些我自己平时在纯电宝马3系首发在即,30万的话,还选特斯拉?要说新能源,宝马还算是传统车企中较早涉猎的,例如此前的宝马i3,带有飞飞门的混动超跑宝马i8,对于当时来讲,还算不错了。鉴于新势力的不断发展和新能源汽车市场日渐完善,宝马i3已经渐竞争特斯拉model3,比亚迪海豹全新官图曝光,3。8秒破百日前,大众侃车从比亚迪官方处获得了海豹的官图和相关信息。作为比亚迪的全新车型,新车基于e平台3。0打造,定位于中型纯电轿车。据悉,新车有望于4月份正式发布,售价或为2228万元区间质感升级一战封神,这就是拯救者Y7000P2022想起之前Y7000P2021款横空出世的时候,无数电竞玩家直呼杀疯了!,而2022款拯救者Y7000P现已接踵而至,所以新款Y7000P到底做了哪些实质性的升级,今天这篇文章统统告道通智能EVOII8KADVANCED无人机EVOII8KADVANCED拥有无需后期合成的8K移动延时功能,即拍即出,无需等待可同时记录JPEGRAW格式照片,使用户拥有足够的后期制作空间。其镜头拥有超级夜景拍摄能力,支持大屏轻薄游戏本,小新Pro16做到了联想小新pro16是联想旗下热销的一款大尺寸的轻薄本,性能强劲,屏幕素质高,这些优势都让这款产品在同级别轻薄本阵营中脱颖而出。但小新pro16的在售版本很多,很多朋友不清楚哪个版本出租车行业要怎样才能恢复景气?把网约车全部去掉,只保留正规出租车出租车行业要恢复景气只有放开,不能保护少数人利益。如把权力交给个人,车自己买自己修,保养验车都是自己,跑一天车交一天税,不跑车不交税,政府只管理他腾讯PCG连下三幅猛药百名总监遭下岗威胁据晚点LatePost消息,腾讯平台与内容事业群(PCG)旗下在线视频事业部(OVBU)将强化管理层考核,从4月起,在近百名总监层级的管理干部中推行聘任制。根据规定,所有总监聘任期被骗的整个过程3月29日下午5点半接到一个自称是京东客服的电话,说我的账号学历信息填写不正确,并指导我在京东客户端打开程序APP,以我对京东的信任度没有多想就听从了他的诱导,。打开以后发现学历信