域名

MySQL 核心模块揭秘 | 插入记录,主键索引冲突加什么锁?

时间:2010-12-5 17:23:32  作者:系统运维   来源:数据库  查看:  评论:0
内容摘要:1. 准备工作创建测试表:复制CREATE TABLE `t1` ( `id` int unsigned NOT NULL AUTO_INCREMENT,

1. 准备工作

创建测试表:复制CREATE TABLE `t1` ( `id` int unsigned NOT NULL AUTO_INCREMENT,心模 `i1` int DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, KEY `idx_i1` (`i1`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;1.2.3.4.5.6.

插入测试数据:

MySQL 核心模块揭秘 | 插入记录,主键索引冲突加什么锁?

复制INSERT INTO `t1` (`id`, `i1`) VALUES (10, 101), (20, 201), (30, 301), (40, 401);1.2.

2. 加锁情况

t1 表中已经有一条 <id = 10> 的记录,我们执行以下 insert 语句,服务器租用块揭再插入一条 <id = 10> 的秘插记录。云服务器

复制begin; insert into t1(id,入记 i1) values (10, 1010);1.2.

因为新插入记录和表中原有记录存在主键冲突,执行 insert 语句之后,b2b供应网录主报错如下:

复制(1062,键索 "Duplicate entry 10 for key t1.PRIMARY")1.

执行以下 select 语句查询加锁情况:

复制select engine_transaction_id, object_name, lock_type, lock_mode, lock_status, lock_data from performance_schema.data_locks where object_name = t1 and lock_type = RECORD\G

copyright © 2025 powered by 编程之道  滇ICP备2023006006号-34sitemap