在MySQL中对于使用表级锁定的存储引擎 表锁定时不会死锁的 这通过总是在一个查询开始时立即请求所有必要的锁定并且总是以同样的顺序锁定表来管理
对WRITE MySQL使用的表锁定方法原理如下
◆ 如果在表上没有锁 在它上面放一个写锁
◆否则 把锁定请求放在写锁定队列中
对READ MySQL使用的锁定方法原理如下
◆如果在表上没有写锁定 把一个读锁定放在它上面
◆否则 把锁请求放在读锁定队列中
当一个锁定被释放时 锁定可被写锁定队列中的线程得到 然后是读锁定队列中的线程
这意味着 如果你在一个表上有许多更新 SELECT语句将等待直到没有更多的更新
如果INSERT 语句不冲突 可以自由为MyISAM 表混合并行的INSERT 和SELECT 语句而不需要锁定
InnoDB 使用行锁定 BDB 使用页锁定 对于这两种存储引擎 都可能存在死锁 这是因为 在SQL语句处理期间 InnoDB 自动获得行锁定 BDB 获得页锁定 而不是在事务启动时获得
行级锁定的优点
· 当在许多线程中访问不同的行时只存在少量锁定冲突
· 回滚时只有少量的更改
· 可以长时间锁定单一的行
行级锁定的缺点
· 比页级或表级锁定占用更多的内存
· 当在表的大部分中使用时 比页级或表级锁定速度慢 因为你必须获取更多的锁
· 如果你在大部分数据上经常进行 GROUP BY 操作或者必须经常扫描整个表 比其它锁定明显慢很多
· 用高级别锁定 通过支持不同的类型锁定 你也可以很容易地调节应用程序 因为其锁成本小于行级锁定
在以下情况下 表锁定优先于页级或行级锁定
· 表的大部分语句用于读取
· 对严格的关键字进行读取和更新 你可以更新或删除可以用单一的读取的关键字来提取的一行
# ; UPDATE tbl_name SET column = value WHERE unique_key_col = key_value ;
# ; DELETE FROM tbl_name WHERE unique_key_col = key_value ;
· SELECT 结合并行的INSERT 语句 并且只有很少的UPDATE或 DELETE 语句
· 在整个表上有许多扫描或 GROUP BY 操作 没有任何写操作
lishixinzhi/Article/program/MySQL/201311/29594
【mysql数据库怎么锁 mysql数据库加锁】mysql数据库怎么锁的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于mysql数据库加锁、mysql数据库怎么锁的信息别忘了在本站进行查找喔 。
推荐阅读
- 关于app直播大秀平台的信息
- csshtml的左边菜单栏,html做一个左侧菜单栏,右侧为主体部分
- 文字恋爱手机游戏,手游文字恋爱游戏
- 字画视频号直播推广文案,字画直播带货
- java代码转ARM java代码转换
- 30岁c语言转java的简单介绍
- 小程序火热书柜怎么进,小程序火热书柜怎么进入
- 虚拟机启动报错inter,虚拟机failed to start
- linux命令剩余内存 linux 内存耗尽