今天和大家简单聊聊MySQL的约束主键与唯一索引约束:
PRIMARY KEY and UNIQUE Index Constraints
文章不长 , 保证有收获 。
触发约束检测的时机:
- insert
- update
当检测到违反约束时 , 不同存储引擎的处理动作是不一样的 。
如果存储引擎支持事务 , SQL会自动回滚 。
例子:
create table t1 (
id int(10) primary key
)engine=innodb;
insert into t1 values(1);
insert into t1 values(1);
其中第二条insert会因为违反约束 , 而导致回滚 。
通常可以使用:
show warnings;
文章插图
来查看违反约束后的错误提示 。
如果存储引擎不支持事务 , SQL的执行会中断 , 此时可能会导致后续有符合条件的行不被操作 , 出现不符合预期的结果 。
例子:
create table t2 (
id int(10) unique
)engine=MyISAM;
insert into t2 values(1);
insert into t2 values(5);
insert into t2 values(6);
insert into t2 values(10);
update t2 set id=id+1;
update执行后 , 猜猜会得到什么结果集?
猜想一:2, 6, 7, 11
猜想二:1, 5, 6, 10
.
.
.
都不对 , 正确答案是:2, 5, 6, 10
第一行id=1 , 加1后 , 没有违反unique约束 , 执行成功;
第二行id=5 , 加1后 , 由于id=6的记录存在 , 违反uinique约束 , SQL终止 , 修改失败;
第三行id=6 , 第四行id=10便不再执行;
推荐阅读
- 泡茶需要注意的冲泡时间
- 茶之鉴赏的要素之茶之韵
- 微服务架构下,Mysql读写分离后,数据库CPU飙升卡壳问题解析
- 如何查看磁盘上的MySQL表大小
- 聊聊常见的数据库架构设计方案如何解决其中的各种数据一致性问题
- 14 个实用的数据库设计技巧
- 超详细的5种用户密码加密方式介绍,选择哪种最安全?
- 了解白茶变味的3大问题
- 如何鉴别翻新茶 陈茶的质量就定差吗
- Python数据可视化的四种简易方法