8.数据库约束学习笔记:从非空、默认、唯一与主键约束到主键自增

目录

一、引出数据库约束:核心理念

二、数据库约束讲解

[1. NOT NULL 非空约束](#1. NOT NULL 非空约束)

创建表时使用约束:

插入空值测试:

[2. DEFAULT 默认值](#2. DEFAULT 默认值)

示例:

[3. UNIQUE 唯一约束](#3. UNIQUE 唯一约束)

示例:

[4. PRIMARY KEY 主键约束(重点!)](#4. PRIMARY KEY 主键约束(重点!))

主键的两个核心特性:

示例:

[5. 主键自增(AUTO_INCREMENT)](#5. 主键自增(AUTO_INCREMENT))

[设计数据表时,一般都会给表设定一个主键列,主键列通常就是一个整数的 id。手动指定 id 的值,可能就会遇到重复的情况。](#设计数据表时,一般都会给表设定一个主键列,主键列通常就是一个整数的 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 主键约束(重点!)

主键约束是++数据库里最重要的约束!++

它描述表中的某个列/某几个列作为"主键",主键就能起到这个数据行"身份标识"的效果。

++主键的两个核心特性:++

  1. ++不能重复++

  2. ++不能为空++

📌 相当于 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​++的方式来分配的~~


三、小结

通过今天的学习,我理解了数据库约束的核心思想:++用规则和程序来保证数据质量,而不是依赖人。++

主要约束类型:

约束类型 作用
NOT NULL 列不能为空
DEFAULT 列有默认值
UNIQUE 列值不能重复
PRIMARY KEY 列值唯一且非空(身份标识)
AUTO_INCREMENT 主键自动增长,避免手动管理

++PS:更多有关约束的内容我将在下一篇博客中详细讲述!!!欢迎关注++


📌 温馨提示:所有代码示例均在Navicat环境中测试过

相关推荐
m0_609160491 小时前
Golang怎么实现数据库连接重试_Golang如何在启动时重试连接直到数据库就绪【技巧】
jvm·数据库·python
zxrhhm2 小时前
PostgreSQL 大规模随机数据生成完整指南
大数据·数据库·postgresql
techdashen2 小时前
Cloudflare + PlanetScale:在边缘运行全栈应用,数据库也不例外
数据库
m0_624578592 小时前
如何在phpMyAdmin中导入GZIP压缩格式文件_加速传输并突破文件大小限制
jvm·数据库·python
m0_495496412 小时前
mysql数据库表名区分大小写吗_通过lower case table names配置
jvm·数据库·python
瀚高PG实验室2 小时前
PG的JDBC对SQL中绑定变量个数的限制
数据库·sql·postgresql·瀚高数据库
lifewange2 小时前
NoSQL
数据库·nosql
weixin_459753943 小时前
MySQL主从同步跳过错误影响一致性_使用pt-table-sync修复
jvm·数据库·python