mysql - Mysql,在更新语句中,条件有主键列和非索引列那么是表级锁定还是行级锁定?
问题描述
关于一个更新查询,我不断收到死锁错误。两个事务都显示下面提到的相同更新语句
表结构是
CREATE TABLE `question` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`questionname` VARCHAR(300) NOT NULL COLLATE 'utf8mb4_0900_ai_ci',
ctype VARCHAR(20),
`isActive` TINYINT(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
AUTO_INCREMENT=525672
;
更新声明
UPDATE question SET isActive=1 WHERE id=5 and CType='CTEE';
在我的代码片段id
中,主键是主键,其余列不被认为是唯一的,主键列和非索引列都应用于 where 子句。所以我打算从 where 子句中删除列 Ctype(非索引列)。
我的问题是:
- 目前 where 子句条件具有主键列和非唯一键。是表级还是行级锁定?
- 如果我从 where 子句中删除 Ctype 条件。是很好的解决方案吗?
解决方案
推荐阅读
- python - 在 Windows Server 2019 上安装 Scrapy,在 Docker 容器中运行
- c++ - 检查向量是否
包含字符串 - bash - How to send stdin to redis channel in realtime?
- python - 在字典内的列表上附加列表
- python - 无法理解pytube“第一”方法
- css - 我使用角度响应轮播库。但我不能改变箭头设计和圆点设计
- linux - 紧凑的 shellcode 打印一个寄存器指向的以 0 结尾的字符串,给定 puts 或 printf 在已知的绝对地址?
- android - 无法在本机反应中解析配置“:classpath”的所有工件
- python - 在 Zapier 用 python 读取 html 文件
- android - 如何使用 kotlin 在 android 中添加 http 日志拦截器和另一个拦截器?