8.数据库约束学习笔记:从非空、默认、唯一与主键约束到主键自增
目录一、引出数据库约束核心理念二、数据库约束讲解1. NOT NULL 非空约束创建表时使用约束插入空值测试2. DEFAULT 默认值示例3. UNIQUE 唯一约束示例4. PRIMARY KEY 主键约束重点主键的两个核心特性示例5. 主键自增AUTO_INCREMENT设计数据表时一般都会给表设定一个主键列主键列通常就是一个整数的 id。手动指定 id 的值可能就会遇到重复的情况。示例手动插入主键也可以自增主键的分配规则三、小结作为一名正在学习数据库的学生今天把课上关于数据库约束的核心内容整理成笔记啦这篇博客会按照老师讲的知识点结合代码示例一步步带你理解各种约束的作用和用法。一、引出数据库约束核心理念老师在课上强调了一个很深刻的理念人是不靠谱的机器靠谱计算机靠谱程序靠谱所以我们希望数据库程序能够按照咱们指定的要求对数据进行一定程度的校验。如果发现某个数据不符合预期直接报错这让我想到了Java中的多态和Override注解子类重写方法的时候需要在方法上加Override注解。不加这个注解代码也能正确编译执行但加上了编译器会做校验。这和数据库约束的思想很像——用规则提前拦截错误而不是依赖人去保证正确。二、数据库约束讲解1. NOT NULL 非空约束null表示空相当于表格的这个单元格是空着的。非空约束就是要求这个列必须有值不能留空。创建表时使用约束drop table student; create table student(id int not null, name varchar(20) not null); desc student;插入空值测试insert into student values(null, null); -- 结果插入空值会报错 select * from student; 注意NOT NULL约束确保列不能存储NULL值。如果尝试插入NULL数据库会直接报错。2. DEFAULT 默认值给列指定默认值当没有给该列赋值时使用默认值。没被指定的列也就是剩下的列会被指定为默认值。示例create table student(id int, name varchar(20) default 匿名); insert into student (id) values(1); select * from student; 注意DEFAULT约束指定列插入时的默认值。如果插入时不指定该列数据库会自动填充默认值。3. UNIQUE 唯一约束unique唯一约束值不能重复每次插入/修改数据的时候都会先进行查询数据库自动进行的判定要插入/修改的数据是否已经存在如果存在了就会失败对比✅ unique是存的数据就不能重复重复的数据存不下去查询的结果自然也是不重复的~~✅distinct本来数据库服务器存储的内容中可能已经有重复的了展示给用户的时候展示的是去重的结果✅ 身份证号、手机号码、护照号码……这些字段通常都需要加UNIQUE约束。示例create table student(id int unique, name varchar(20)); insert into student values(1, 张三); -- 尝试插入重复的 id update student set id 1 where name 张三; -- 结果会报错Duplicate entry 1 for key student.id 注意UNIQUE约束确保列中的所有值都是不同的。如果尝试插入重复值数据库会拒绝。4. PRIMARY KEY 主键约束重点主键约束是数据库里最重要的约束它描述表中的某个列/某几个列作为“主键”主键就能起到这个数据行“身份标识”的效果。主键的两个核心特性不能重复不能为空 相当于unique not null的结合体示例create table student(id int primary key, name varchar(20)); desc student; -- 尝试插入 null insert into student values(null, 张三); -- 结果报错Column id cannot be null -- 尝试插入重复值 insert into student values(1, 李四); insert into student values(1, 王五); -- 结果报错Duplicate entry 1 for key student.PRIMARY5. 主键自增AUTO_INCREMENT数据库提供了自增主键功能主键的值不需要手动分配自动分配设计数据表时一般都会给表设定一个主键列主键列通常就是一个整数的 id。手动指定 id 的值可能就会遇到重复的情况。示例create table student(id int primary key auto_increment, name varchar(20)); insert into student values(null, 张三); select * from student; 注意这里插入null不是插入空值而是提醒数据库进行自增主键的操作手动插入主键也可以insert into student values(100, 张三); select * from student; 注意既自动分配 手动分配后再次手动分配则 id 会接着手动分配的。比如你手动插了 100下一次自动分配会从 101 开始再手动插 100数据库不会报错因为主键冲突但通常会报错因为自增机制会记录最大值下次自动分配从 101 开始。自增主键的分配规则自增主键分配的值是拿着最大值再 1的方式来分配的三、小结通过今天的学习我理解了数据库约束的核心思想用规则和程序来保证数据质量而不是依赖人。主要约束类型约束类型作用NOT NULL列不能为空DEFAULT列有默认值UNIQUE列值不能重复PRIMARY KEY列值唯一且非空身份标识AUTO_INCREMENT主键自动增长避免手动管理PS更多有关约束的内容我将在下一篇博客中详细讲述欢迎关注温馨提示所有代码示例均在Navicat环境中测试过