【MySQL】聊聊唯一索引是如何加锁的
在MySQL中,如果一个操作涉及唯一索引,并且这个唯一索引是唯一的(即不允许有重复的值),MySQL会使用唯一索引来加锁。当插入或更新记录时,如果违反了唯一性约束,MySQL会通过锁定相应的唯一索引来避免并发问题。
以下是一个简单的例子,演示了唯一索引加锁的情况:
假设有一个表users
,它有一个唯一索引username
。
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) UNIQUE
);
当你尝试插入一个已经存在于username
字段的唯一索引时,比如:
INSERT INTO users (username) VALUES ('alice');
INSERT INTO users (username) VALUES ('alice'); -- 这条语句会锁定'alice'这个唯一索引,直至第一条语句提交或回滚。
在这个例子中,第二条INSERT
语句会被阻塞,直到第一条语句完成并释放了对alice
索引的锁。
这种行为确保了数据的一致性和完整性,防止了可能的并发冲突。
评论已关闭