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.PRIMARY')5. 主键自增(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的方式来分配的~~
三、小结
通过今天的学习,我理解了数据库约束的核心思想:用规则和程序来保证数据质量,而不是依赖人。
主要约束类型:
约束类型 | 作用 |
|---|---|
| 列不能为空 |
| 列有默认值 |
| 列值不能重复 |
| 列值唯一且非空(身份标识) |
| 主键自动增长,避免手动管理 |
PS:更多有关约束的内容我将在下一篇博客中详细讲述!!!欢迎关注
📌温馨提示:所有代码示例均在Navicat环境中测试过
