Navicat是我比较喜欢的一款工具了,虽然我没有买正版😥😥不过最近经常遇到有小伙伴说“Navicat会导致死锁,不要用”、“Navicat会锁表”等等,于是就有了这篇文章,今天就来聊聊什么情况下会导致死锁。
其实在大多时候,使用Navicat造成死锁的原因都是因为操作不当引起的(基本都是因为图形化界面操作导致)。
下面直接进入正题👇👇

环境

数据库:SQL Server
客户端:Navicat 12.1

死锁演示

事务中使用刷新

先来一张GIF直观的感受一下
Lock1.gif 具体步骤:

  1. 打开数据表
  2. 点击开始事务开始事务
  3. 添加一条数据(也可以啥都不操作)
  4. 点击下方的刷新按钮两次
  5. 恭喜你!啥也干不了了~~~ 老老实实Ctrl+Alt+Del

数据库检查一下,果然死锁。

如果第三步啥也不操作,那么是不会死锁的,只会造成客户端崩溃

1
2
3
4
SELECT request_session_id,
OBJECT_NAME(resource_associated_entity_id) AS 'table' 
FROM sys.dm_tran_locks 
WHERE resource_type='OBJECT'

Lock1.png

事务中使用筛选

先来一张GIF直观的感受一下
Lock2.gif 具体步骤:

  1. 打开数据表
  2. 先对对数据进行一次筛选
  3. 点击开始事务开始事务
  4. 添加一条数据(新增数据必须满足步骤2和5中中的筛选条件)
  5. 修改新的筛选条件
  6. 弹窗报错
  7. 点击提交事务
  8. 恭喜你,Navicat直接挂掉了

总结

其实上述的两种情况,无外乎都是在事务中使用了查询筛选等操作。所以小伙伴们以后在使用Navicat时只要注意一下几点,剩下的就放心大胆的用就好了。敲黑板

  • 需要进行事务操作时,尽量减少使用
  • 如果非得在界面进行事务操作,那么就快速处理完数据然后提交。免得其他人打个岔什么的后自己也忘记了,然后小手一抖,又点了刷新按钮

是不是可以去给开发者提两个可复现的BUG