永发信息网

为什么说 MySQL 的表锁不会产生死锁

答案:2  悬赏:80  手机版
解决时间 2021-03-01 05:56
为什么说 MySQL 的表锁不会产生死锁
最佳答案
对于MySQL来说,有三种锁的级别:页级、表级、行级

页级的典型代表引擎为BDB。
表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。
行级的典型代表引擎为INNODB。
-我们实际应用中用的最多的就是行锁。
行级锁的优点如下:
1)、当很多连接分别进行不同的查询时减小LOCK状态。
2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。
行级锁的缺点如下:
1)、比页级锁和表级锁要占用更多的内存。
2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。
3)、容易出现死锁。
对于写锁定如下:
1)、如果表没有加锁,那么对其加写锁定。
2)、否则,那么把请求放入写锁队列中。
对于读锁定如下:
1)、如果表没有加写锁,那么加一个读锁。
2)、否则,那么把请求放到读锁队列中。
当然我们可以分别用low_priority 以及high_priority在写和读操作上来改变这些行为。

如果想要在一个表上做大量的 INSERT 和 SELECt 操作,但是并行的插入却不可能时,可以将记录插入到临时表中,然后定期将临时表中的数据更新到实际的表里。可以用以下命令实现:

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
mysql> INSERT INTO real_table SELECT * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;
InnoDB 使用行级锁,BDB 使用页级锁。对于 InnoDB 和 BDB 存储引擎来说,是可能产生死锁的。这是因为 InnoDB 会自动捕获行锁,BDB 会在执行 SQL 语句时捕获页锁的,而不是在事务的开始就这么做。
行级锁的优点有:

在很多线程请求不同记录时减少冲突锁。
事务回滚时减少改变数据。
使长时间对单独的一行记录加锁成为可能。
全部回答
会产生死锁的,只是没有满足产生死锁的条件。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
曹记干锅肥牛王地址在什么地方,想过去办事
VVOL:IF(CURRBARSCOUNT=1 AND PERIOD=5,VOL*2
世界典藏58国纪念币值多少钱
现在学什么专业挣钱
【有氧呼吸和无氧呼吸的相同本质和过程?】
创高电脑地址在哪,我要去那里办事
君你宽心且渐游家门清洁永无忧谋望所求皆得意
50的碳钢管 全氩弧6G什么意思
下面词语书写没有错别字的一项是,A,千山万
私家车拉人乘员受伤,保险公司赔偿吗
我特别想娶一个俄罗斯女人做老婆,能娶到吗
狮子女喜欢光明磊落直接的男人还是喜欢拐弯抹
潮涨潮落。打一成语
皮革 变硬
给屯地址在什么地方,想过去办事
推荐资讯
2000年5月22日上午10点30分命中缺什么
如何做人,做一个大家都喜欢,离不开你的人
梦见死人但看不到死人
车子才开了8000公里发动机故障灯就亮了,合理
黄家铺(石牌666)牛肉店NO.3在哪里啊,我有事
【泌】泌这个字怎么读
重庆交通大学第四教学楼这个地址在什么地方,
永康市岩后小学地址有知道的么?有点事想过去
裕安机动车驾驶员培训中心地址在哪,我要去那
张嘉译有孩子吗 张嘉译有几个孩子
已知m、n是两个连续的自然数(m大于n),且q=m
罗浮知天下在哪里啊,我有事要去这个地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?