目录
约束的分类
分类
注意
主键约束
添加主键约束
1 建表时,添加
1.1创建表:定义列时指定
1.2 创建表:定义列之后独立指定主键:
2 建表后使用alter 关键字添加
删除约束
在主键添加自动增长属性
疑问
1 建表时添加
2 建表后添加
3 创表之后添加自动增长可以使用关键字 modify/change
关键字 modify/change 的联系
modify
change
主键的特点
唯一约束
实例代码
非空约束
实例代码
发现
总结
约束的分类
分类
主键约束(primary key):唯一且不是null ,每张表,最多只能有一个主键约束
唯一约束(unique):唯一,每一张可以有多个唯一约束
非空约束:不为null
默认约束:保存数据时,如果未指定该字段的值/ 你不添加数据时,则使用默认值
外键约束(foreign key):用于让两张表建立连接,保证数据的一致和完整性
检查约束(check 8.0.16版本之后,才可以被正常使用):为了使该字段满足一定的条件
注意
- 约束是作用在表的字段(该列)上的
- 添加约束,可以在建表时/建完表之后添加约束
主键约束
添加主键约束
1 建表时,添加
1.1创建表:定义列时指定
代码如下
CREATE TABLE stu (sid CHAR(6) PRIMARY KEY,sname VARCHAR (20),age INT,gender VARCHAR (10) ) ;
1.2 创建表:定义列之后独立指定主键:
代码如下
CREATE TABLE stu (sid CHAR(6),sname VARCHAR (20),age INT,gender VARCHAR (10),PRIMARY KEY (sid) ) ;
2 建表后使用alter 关键字添加
ALTER TABLE stu ADD PRIMARY KEY(sid);
删除约束
应用场景:一般发生在建表之后
ALTER TABLE stu DROP PRIMARY KEY;
在主键添加自动增长属性
疑问
注意 :我不知道大家有没有一种疑惑 ,潜意识把自动增长当成主键本身自带的属性
实际上这种说法,是有问题的,以下是关于主键和自动增长的区别和联系
主键(Primary Key)本身并不具有自增(AUTO_INCREMENT)的功能。主键是一种约束,用于确保数据的唯一性和非空性,而自增是一种特殊的属性,用于在插入新记录时自动生成唯一的数值。
以下是主键和自增属性的区别和联系:
主键(Primary Key):
- 主键是一种表级别的约束,用于标识表中的每一行记录。
- 主键列中的值必须是唯一的,且不能为NULL。
- 主键可以是单个列或多个列的组合(复合主键)。
自增(AUTO_INCREMENT):
- 自增是一种列级别的属性,用于在插入新记录时自动生成唯一的数值。
- 自增属性通常用于整数类型的列,如INT或BIGINT。
- 自增属性可以简化数据插入过程,无需手动指定主键值。
联系:
- 虽然主键和自增是两个不同的概念,但它们经常一起使用。
- 将自增属性应用于主键列是一种常见的做法,这样可以确保主键值的唯一性和自动生成。
- 但是,并非所有主键列都需要自增属性。例如,如果主键是基于业务逻辑生成的唯一标识符(如UUID),则不需要自增属性。
为什么需要额外添加AUTO_INCREMENT:
- 主键约束只保证数据的唯一性和非空性,但不会自动生成值。
- 自增属性提供了一种方便的方式来自动生成唯一的主键值,特别是在插入新记录时。
- 如果主键列不是自增的,你需要在插入新记录时手动指定主键值,这可能会导致数据插入的复杂性和错误。
1 建表时添加
写法1
CREATE TABLE stu (sid int auto_increment ,sname VARCHAR (20),age INT,gender VARCHAR (10),PRIMARY KEY (sid) ) ;
写法2
CREATE TABLE stu (sid int primary key auto_increment ,sname VARCHAR (20),age INT,gender VARCHAR (10)) ;
我插入数据
INSERT INTO stu (sname, age, gender) VALUES ('tom1',18,'男'),('jack',19,'女'),('lisa',20,'男'),('tomCat',18,'女'),('dj',16,'男');
最终结果
2 建表后添加
CREATE TABLE stu (sid int primary key ,sname VARCHAR (20),age INT,gender VARCHAR (10)) ;
注意:假设你不添加自动增长,而是直接插入,这会因为没有默认约束而出现错误
3 创表之后添加自动增长可以使用关键字 modify/change
关键字 modify/change 的联系
相同的: 都可以修改字段的类型和属性
不同点:change 可以改变字段名
modify
格式
alter table 表名 modify 字段名 字段类型 [ 属性];
alter table stu modify sid int auto_increment;
change
格式
alter table 表名 change 原本字段名 现在的字段名 字段类型 [ 属性];
alter table stu change sid sid int auto_increment;
插入数据,展示最终结果
主键的特点
1 包含非空 约束和唯一约束,防止出现数据的冗余
注意:如果在插入数据时,确实存 在大量相同的数据时 如 学生表 和班级表 / 员工表和职位表。。应该使用外键。这个下一篇博客会提到。
2 在实际 工作中,我们给表添加主键时,往往被添加的字段,对该表不受影响
原因;是不希望在插入数据时,因为主键约束而无法添加成功
唯一约束
实例代码
// 创建stu 表CREATE TABLE stu (sid int primary key auto_increment ,sname VARCHAR (20) unique ,age INT not null,gender VARCHAR (10) default '男') ;
// 向stu表插入数据
INSERT INTO stu (sname, age, gender) VALUES ('tom1',18,'男'),('jack',19,'女'),('lisa',20,'男'),('tomCat',18,'女'),('tom1',18,'男'),('dj',16,'男');
select *from stu;
大家发现,我给sname 字段 添加唯一约束 ,如果我插入相同 会因为唯一约束报错
非空约束
实例代码
//创建 stu表
CREATE TABLE stu (sid int primary key auto_increment ,sname VARCHAR (20) unique ,age INT not null,gender VARCHAR (10) default '男') ;
//插入数据
INSERT INTO stu (sname, age, gender) VALUES ('tom1',null,'男');
大家发现,我给age 字段 添加非空约束 ,如果我插入null 会因为非空约束报错
总结
本篇博客,介绍了约束的组成和添加约束时不同的场景,下一篇博客介绍 外键 内容