《数据库原理及应用教程-MySQL8.0》课件汇总 尹志宇 第6--13章 数据库查询---数据库的备份与恢复.ppt

《数据库原理及应用教程-MySQL8.0》课件汇总 尹志宇 第6--13章 数据库查询---数据库的备份与恢复.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

10.2.4锁的分类数据库引擎使用不同类型的锁锁定资源,这些锁确定了并发事务访问资源的方式。MyISAM的表锁在执行查询操作(select)前,会自动给涉及的所有表加读锁;在执行更新操作(insert、update、delete等)前,会自动给涉及的所有表加写锁。(1)读锁读锁又叫共享锁(SharedLock,S锁),该锁允许并发事务读取(SELECT)一个资源。资源上存在S锁时,任何其它事务都不能修改数据。10.2.4锁的分类(2)写锁写锁也叫排它锁(ExclusiveLock,X锁),该锁可以防止并发事务对资源进行访问,其它事务不能读取或修改X锁锁定的数据。即X锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受。执行数据更新命令即INSERT、UPDATE或DELETE命令时MySQL会自动使用X锁,但当对象上有其它锁存在时无法对其加X锁。MyISAM表的读操作与写操作之间、以及写操作之间是串行的。10.2.4锁的分类MyISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行更新操作前,会自动给涉及的表加写锁,这个过程并不需要用户干预。当写进程和读进程同时请求同一个MyISAM表的写锁和读锁时,写进程会优先获得锁。即使读请求先于写请求到达锁等待队列,写锁也会插到读锁请求之前。因为MySQL认为写请求一般比读请求更重要,所以MyISAM表不太适合有大量更新操作和查询操作的应用,因为大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。10.2.4锁的分类2.InnoDB的锁InnoDB的行锁有两种:共享锁(S)和排他锁(X)。为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁:意向共享锁(IS锁)和意向排他锁(IX锁),这两种意向锁(IntentLock)都是表锁。一个事务在给数据行加锁之前必须先取得对应表对应的意向锁。10.2.4锁的分类(1)IS锁IS锁表示某事务有读取低层次资源的意向,把S锁放在这些低层次的单个资源上。也就是说,如果对一个数据对象加IS锁,表示它的后裔资源拟(意向)加S锁。例如,要对某个元组加S锁,则要首先对包含该元组的表加IS锁。(2)IX锁IX锁表示某事务有修改低层次资源的意向,把X锁放在这些低层次的单个资源上。也就是说,如果对一个数据对象加IX锁,表示它的后裔资源拟(意向)加X锁。例如,要对某个元组加X锁,则要首先对包含该元组的表加IX锁。9.3.2创建事件【例9-21】每天凌晨3点自动删除bankcard数据库account表中过期的账户的数据。CREATEEVENTevent_del_records_expireONSCHEDULEEVERY1DAYSTARTS2022-01-0103:00:00DODELETEFROMaccountWHEREDATEDIFF(ExpiryDate,CURDATE())=0;9.3.2创建事件【例9-22】创建事件,实现每个月的第一天凌晨1点统计一次储户人数和账户个数,并插入到统计表中。(1)创建名称为p_total的存储过程,用于统计储户人数和账户个数,并插入到统计表tb_total中。首先创建tb_total表。USEbankcard;CREATETABLEtb_total(insert_timedatetimePRIMARYKEY,depositor_numberint,account_numberint);9.3.2创建事件然后创建p_total存储过程。USEbankcard;DELIMITER//CREATEPROCEDUREp_total()BEGINDECLAREn1,n2int;SELECTCOUNT(*)INTOn1FROMdepositor;SELECTCOUNT(*)INTOn2FROMaccount;INSERTINTOtb_totalVALUES(NOW(),n1,n2);END//9.3.2创建事件(2)创建事件event_autototal,每个月的第一天凌晨1点调用存储过程p_total。CREATEEVENTevent_autototalONSCHEDULEEVERY1MONTHSTARTSDATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVALDAY(CURDATE()-1)DAY),INTERVAL1

文档评论(0)

lai + 关注
实名认证
内容提供者

精品资料

版权声明书
用户编号:7040145050000060

1亿VIP精品文档

相关文档