纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

MySQL基础知识整理

11月11日 渡缘祠投稿
  一、简介1。什么是事务
  事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。在整个过程中,无论事务是否成功完成,总能确保数据的完整性。2。如何使用事务
  银行应用是解释事务必要性的一个经典例子。
  假设一个银行的数据库有两张表:支票(checking)表和储蓄(savings)表。现在要从用户的支票账户转移200元到他的储蓄账户,那么需要至少三个步骤:1。检查支票账户的余额高于200元。2。从支票账户余额中减去200元。3。在储蓄账户余额中增加200元。
  上述三个步骤的操作必须打包在一个事务中,任何一个步骤失败,则必须回滚所有的步骤。
  可以用STARTTRANSACTION语句开始一个事务,然后要么使用COMMIT提交事务将修改的数据持久保留,要么使用ROLLBACK撤销所有的修改。
  事务SQL的样本如下:开始事务STARTTRANSACTION;检查支票账户的余额高于200元SELECTbalanceFROMcheckingWHEREcustomerid10233276;从支票账户余额中减去200元UPDATEcheckingSETbalancebalance200。00WHEREcustomerid10233276;在储蓄账户余额中增加200元UPDATEsavingsSETbalancebalance200。00WHEREcustomerid10233276;提交事务COMMIT;二、事务的ACID特性
  ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。一个运行良好的事务处理系统,必须具备这些标准特征。1。原子性(atomicity)
  一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。2。一致性(consistency)
  数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,支票账户中也不会损失200元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。3。隔离性(isolation)
  通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外一个账户汇总程序开始运行,则其看到的支票账户的余额并没有被减去200元。4。持久性(durability)
  一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。三、事务的隔离级别1。READUNCOMMITTED(未提交读)
  在READUNCOMMITTED级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读(DirtyRead)。这个级别会导致很多问题,从性能上来说,READUNCOMMITTED不会比其他的级别好太多,但却缺乏其他级别的很多好处,除非真的有非常必要的理由,在实际应用中一般很少使用。2。READCOMMITTED(提交读)
  大多数数据库系统的默认隔离级别都是READCOMMITTED(但MysQL不是)。READCOMMITTED满足前面提到的隔离性的简单定义:一个事务开始时,只能看见已经提交的事务所做的修改。换句话说,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候也叫做不可重复读(nonrepeatableread),因为两次执行同样的查询,可能会得到不一样的结果。3。REPEATABLEREAD(可重复读)
  REPEATABLEREAD解决了脏读的问题。该级别保证了在同一个事务中多次读取同样记录的结果是一致的。但是理论上,可重复读隔离级别还是无法解决另外一个幻读(PhantomRead)的问题。所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(PhantomRow)。InnoDB和XtraDB存储引擎通过多版本并发控制(MVCC,MultiversionConcurrencyControl)解决了幻读的问题。
  可重复读是MySQL的默认事务隔离级别。4。SERIALIZABLE(可串行化)
  SERIALIZABLE是最高的隔离级别。它通过强制事务串行执行,避免了前面说的幻读的问题。简单来说,SERIALIZABLE会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。实际应用中也很少用到这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑采用该级别。四种隔离级别对比
  隔离级别
  脏读可能性
  不可重复读可能性
  幻读可能性
  加锁读
  READUNCOMMITTED
  READCOMMITTED
  REPEATABLEREAD
  SERIALIZABLE
  四、死锁1。什么是死锁
  死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。当多个事务试图以不同的顺序锁定资源时,就可能会产生死锁。多个事务同时锁定同一个资源时,也会产生死锁。2。死锁实例
  设想下面两个事务同时处理StockPrice表:事务1:STARTTRANSACTION;UPDATEStockPriceSETclose45。50WHEREstockid4anddate20020501;UPDATEStockPriceSETclose19。80WHEREstockid3anddate20020502;COMMIT;事务2STARTTRANSACTION;UPDATEStockPriceSEThigh20。12WHEREstockid3anddate20020502;UPDATEStockPriceSEThigh47。20WHEREstockid4anddate20020501;COMMIT;
  如果凑巧,两个事务都执行了第一条UPDATE语句,更新了一行数据,同时也锁定了该行数据,接着每个事务都尝试去执行第二条UPDATE语句,却发现该行已经被对方锁定,然后两个事务都等待对方释放锁,同时又持有对方需要的锁,则陷入死循环。除非有外部因素介入才可能解除死锁。3。如何解决死锁问题
  为了解决死锁问题,数据库系统实现了各种死锁检测和死锁超时机制。越复杂的系统,比如InnoDB存储引擎,越能检测到死锁的循环依赖,并立即返回一个错误。这种解决方式很有效,否则死锁会导致出现非常慢的查询。还有一种解决方式,就是当查询的时间达到锁等待超时的设定后放弃锁请求,这种方式通常来说不太好。InnoDB目前处理死锁的方法是,将持有最少行级排他锁的事务进行回滚(这是相对比较简单的死锁回滚算法)。
  锁的行为和顺序是和存储引擎相关的。以同样的顺序执行语句,有些存储引擎会产生死锁,有些则不会。死锁的产生有双重原因:有些是因为真正的数据冲突,这种情况通常很难避免,但有些则完全是由于存储引擎的实现方式导致的。死锁发生以后,只有部分或者完全回滚其中一个事务,才能打破死锁。对于事务型的系统,这是无法避免的,所以应用程序在设计时必须考虑如何处理死锁。大多数情况下只需要重新执行因死锁回滚的事务即可。五、MySQL事务的特点1。自动提交(AUTOCOMMIT)
  MySQL默认采用自动提交(AUTOCOMMIT)模式。也就是说,如果不是显式地开始一个事务,则每个查询都被当作一个事务执行提交操作。在当前连接中,可以通过设置AUTOCOMMIT变量来启用或者禁用自动提交模式:mysqlSHOWVARIABLESLIKEAUTOCOMMIT;VariablenameValueautocommitON1rowinset(0。00sec)mysqlSETAUTOCOMMIT0;QueryOK,0rowsaffected(0。00sec)mysqlSHOWVARIABLESLIKEAUTOCOMMIT;VariablenameValueautocommitOFF1rowinset(0。00sec)mysql〕SETAUTOCOMMIT1;QueryOK,0rowsaffected(0。00sec)mysqlSHOWVARIABLESLIKEAUTOCOMMIT;VariablenameValueautocommitON1rowinset(0。00sec)
  1或者ON表示启用,0或者OFF表示禁用。当AUTOCOMMIT0时,所有的查询都是在一个事务中,直到显式地执行COMMIT提交或者ROLLBACK回滚,该事务结束,同时又开始了另一个新事务。修改AUTOCOMMIT对非事务型的表,比如MyISAM或者内存表,不会有任何影响。对这类表来说,没有COMMIT或者ROLLBACK的概念,也可以说是相当于一直处于AUTOCOMMIT启用的模式。
  另外还有一些命令,在执行之前会强制执行COMMIT提交当前的活动事务。典型的例子,在数据定义语言(DDL)中,如果是会导致大量数据改变的操作,比如ALTERTABLE,就是如此。另外还有LOCKTABLES等其他语句也会导致同样的结果。如果有需要,请检查对应版本的官方文档来确认所有可能导致自动提交的语句列表。MySQL可以通过执行SETTRANSACTIONISOLATIONLEVEL命令来设置隔离级别。新的隔离级别会在下一个事务开始的时候生效。可以在配置文件中设置整个数据库的隔离级别,也可以只改变当前会话的隔离级别:mysqlSETSESSIONTRANSACTIONISOLATIONLEVELREADCOMMITTED;2。隐式和显式锁定
  InnoDB采用的是两阶段锁定协议(twophaselockingprotocol)。在事务执行过程中,随时都可以执行锁定,锁只有在执行COMMIT或者ROLLBACK的时候才会释放,并且所有的锁是在同一时刻被释放。前面描述的锁定都是隐式锁定,InnoDB会根据隔离级别在需要的时候自动加锁。
  另外,InnoDB也支持通过特定的语句进行显式锁定,这些语句不属于SQL规范(这些锁定提示经常被滥用,实际上应当尽量避免使用)SELECT。。。LOCKINSHAREMODESELECT。。。FORUPDATE
  MySQL也支持LOCKTABLES和UNLOCKTABLES语句,这是在服务器层实现的,和存储引擎无关。它们有自己的用途,但并不能替代事务处理。如果应用需要用到事务,还是应该选择事务型存储引擎。
  经常可以发现,应用已经将表从MyISAM转换到InnoDB,但还是显式地使用LOCKTABLES语句。这不但没有必要,还会严重影响性能,实际上InnoDB的行级锁工作得更好。
  LOCKTABLES和事务之间相互影响的话,情况会变得非常复杂,在某些MySQL版本中甚至会产生无法预料的结果。因此,建议除了事务中禁用了AUTOCOMMIT,可以使用LOCKTABLES之外,其他任何时候都不要显式地执行LOCKTABLES,不管使用的是什么存储引擎。
  原文链接:https:segmentfault。coma1190000022732257
投诉 评论 转载

英国推行网上离婚试运营就处理了1000多起离婚申请英国推行网上离婚:试运营就处理了1000多起离婚申请离婚本不是一件小事,在我国本该是要夫妻双方到民政局签字办证,可能还会面临阻拦。让人意外的是,如今英国却开始推行网上离婚……新娘新郎婚宴逃单婚宴敬酒时新娘新郎不要做的十件事新娘新郎婚宴逃单:婚宴敬酒时新娘新郎不要做的十件事新娘新郎婚宴逃单,婚宴款必须付。宾馆状告新郎逃单案一审:婚宴款必须付。11月28日,成都成华区法……东盟各国张开双臂欢迎中国游客,广西出台利好措施激活跨境游【编者按】奋战开门红,爱拼才会赢!随着中国出入境政策和国际客运航班管控措施的相继调整,广西抓紧抓实稳定外贸外资,扩大西部陆海新通道物流规模,促进外资稳增量扩存量,广西企业……龙潜花都妈妈苏雅晴年轻貌美的后妈,形容女子年轻貌美龙潜花都妈妈苏雅晴有多美,年轻貌美的后妈,形容女子年轻貌美我老爸是个民营企业家,很富有。在我读大三时母亲因病去世,五十岁的老爸,给我找了比我还小两岁的后妈如烟,他原是我老……第一款4D全息着色技术制作RPG游戏Illuvium深度解析温馨提示:最近打新炼油层出不穷,风险未知,望各位玩家谨慎参与,炼油初品文章仅供玩家了解,不代表投资意见。游戏介绍:illuvium是一款基于以太坊的RPG战斗游戏,……可爱动物萌图揭秘这些动物萌照竟是摆拍的(组图)【可爱动物萌图】揭秘这些动物萌照竟是摆拍的(组图)一张非常可爱的照片,这只细小的树蛙看来就像拿着小叶子在挡雨,既富灵性又有趣。为甚么青蛙要挡雨呢?牠们本身皮肤就需要……MySQL基础知识整理一、简介1。什么是事务事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何……2岁女婴肚子巨大得知原因后,妈妈崩溃的道出了其身世2009年,河南省漯河市的一家医院里,白炽灯、消毒水和来去匆匆的人组成了一幅无声的画。有一对夫妇站在走廊里,他们的母亲抱着他们两岁的女儿。我女儿还在抽泣,因为她感觉……心理健康测试20题目来测测你能答多少分心理健康测试题(20题目):下列问题中,每题有4个备选答案,请根据你的实际情况选择一个最适合你的答案:A表示最近一周内出现这种情况的日子不超过一天,B表示最近……Canalys发布华为穿戴设备全球第三,中国第一智能可穿戴设备主要包括智能手环、智能手表等等。这个领域目前还是以这两项为主,而在全球范围之内苹果还是一家独大,这得益于AppleWatch全球出货量异常高的原因。但在国内市场苹……被三木博主种草了短款羽绒服!这3种搭配显高又时髦,真好看冬天还是得需要羽绒服才能保命,特别是北方的姐妹们。但是羽绒服也一直被大家诟病上身太过臃肿不好看,但其实也仅仅是长款羽绒服才会如此。被三木博主种草的短款羽绒服才是大势!羽绒……300斤巨型魔鬼鱼怎么回事魔鬼鱼是什么揭晓近日汕头渔民捕获了一头魔鬼鱼,重达300斤引起了广泛的关注。那么,300斤巨型魔鬼鱼怎么回事?魔鬼鱼又是什么,下面揭晓一起来了解下。300斤巨型魔鬼鱼怎么回事近日,一条十……
JKL刚超越UZI,又挑战Viper!TES无压力迎战EDG21!国际米兰终于爆发,小因扎吉目标6分榜首,剑指第20冠美联储披露财报受加息影响,2022年净利润接近腰斩被不同的爱围绕的一天苹果获得新扩展现实头显专利突发意外!霍姆格伦在防守詹姆斯时受伤,他的身体能适应NBA吗都美竹出道拍戏引热议,男主角像吴亦凡,前闺蜜爆其黑料三观尽毁阴阳师赤月谜影活动混分攻略胡新年人到中年(38首)17岁K宝变成熟了!恋爱后有女人味,身材日趋丰满,近照好迷人我国豪华版列车,全程14天配备专门管家,游客太贵了备孕三月代价太大

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形