赞
踩
学习数据库时发现,有时插入数据失败,自增约束仍然会增加,导致下一次插入成功时自增的 id 变得不再连续。而有的时候插入失败又不会自增。搜了一下并没有具体说明,于是自己试了一下。
数据库结构:
字段 | 约束 | 意义 |
---|---|---|
id | primary key auto increment | id |
name | unique | 姓名(实际上重名可能性很大。不过这里为了尝试就不考虑太多了) |
age | check(age<=120&&age>=0) | 年龄 |
gender | not null | 性别 |
department_id | foreign key | 学院号 |
实验:
插入满足约束的学生记录,插入成功,id 默认为1.
插入年龄为121的学生,插入失败。
插入一个满足约束的学生,插入成功,id 默认为2.
插入一个重名学生,插入失败。
插入一个满足约束的学生,插入成功,id 默认为4.
插入性别格式不符(数字)的学生,插入失败。
插入一个满足约束的学生,插入成功,id 默认为5.
插入性别为 null 的学生,插入失败。
插入一个满足约束的学生,插入成功,id 默认为6.
插入外键在参照表中没有对应值的学生,插入失败。
插入一个满足约束的学生,插入成功,id 默认为8.
所以目前尝试发现:不满足非空约束和外键约束的记录,尽管插入失败,仍然会引发 id 的自增约束;而不满足非空约束、检查约束、格式的记录,插入失败,id 的自增约束也不会增加。
至于原因大概是和回滚有关……博主先深入学习一下事务的问题在想想。
如果有自己的观点也欢迎讨论~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。