
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
MySQL数据库的搭建与应用是大多数后端编程开发程序员都需要熟练掌握的一个编程技术,下面我们就通过案例分析来简单了解一下,MySQL数据库锁的应用都有哪些类型。
1、全局锁
全局锁就是对整个数据库实例加锁。
给数据库实例加全局锁的命令:flushtableswithreadlock;(FTWRL)
释放锁的命令:unlocktables;(表级锁、行级锁释放也是这个命令)
加上全局锁之后,整个数据库处于只读状态,其他线程的以下语句会被阻塞:
数据更新语句(数据的增删改insert、delete、update)
数据定义语句(DDL、包括建表、修改表结构等)
更新类事务的提交语句(更新类事务就是使用了类似select*fromt1forupdate;带forupdate的查询的事务)
2、表级锁
表锁就是对整个数据表加锁。
给数据表加表锁的命令:locktable表名read/write;
释放表锁的命令和释放全局锁的命令一样,都是:unlocktables;。如果不手动释放表锁,在客户端断开的时候会自动释放表锁。
需要注意的是,locktables语法除了会限制别的线程的读写外,也限定了本线程接下来的操作对象。
举个例子,如果在线程A中执行locktablest1read,t2write;这个语句,则其他线程写t1、读写t2的语句都会被阻塞。同时,线程A在执行unlocktables之前,也只能执行读t1、读写t2的操作。连写t1都不允许,自然也不能访问其他表。
3、意向锁
表锁分为:共享锁、独占锁。
如果我们想对整个数据表加共享锁,先要确保表中没有记录被加独占锁
如果我们想对整个数据表加独占锁,先要确保表中没有记录被加共享锁/独占锁
那么我们该如何来判断表中是否有记录被加独占锁/独占锁呢?我们可以通过遍历所有记录的方式来查看表中有没有被加锁的记录,而遍历的方式太慢了。
意向锁的提出就是为了加表级别的共享锁和独占锁时,快速判断表中的记录是否被上锁,以避免用遍历的方式来查看表中有没有被加锁的记录,提供判断速度。
意向锁分为:意向共享锁、意向独占锁:
当事务准备在某条记录上加共享锁时,需要先在表级别加一个意向共享锁;
当事务准备在某条记录上加独占锁时,需要先在表级别加一个意向独占锁。
这样,如果表级别存在意向共享锁,就意味着表中有被加共享锁的记录;如果表级别存在意向独占锁,就意味着表中有被加独占锁的记录。通过意向锁我们就可以快速判断表中是否有记录被加锁。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。