SQL 常见约束(非空、默认、唯一、主键和外键)
·
常见约束
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性。
分类:
六大约束:
- not null 非空 :用于保障该字段的值不能为空, 比如姓名、学号等
- Default 默认: 用于保证该字段有默认值,比如性别、
- PRIMARY KEY 主键: 用于保证该字段的值有唯一性,并且 非空。是能够唯一的标识一组数据的数据元素;比如说:学号,姓名,年龄,性别,课程号课程中学号是唯一的
- UNIQUE 唯一约束: 用于保障该字段的值有唯一性,可以为空, 比如座位号
- Check 检查约束:mysql中不支持,但不报错
- Foreign KEY 外键:用于限制两个标的关系 用于保证该字段的值必须来自于主表关联的值。 一组数据的主键是另一组数据的的元素;主键约束了外键所在表中不能存在主键类之外的值;外键用于与另一张表的关联。比如:学生表的专业编号、员工表的部门编号。
添加约束表的实际: 1)创建表时;2)修改表时
约束添加分类:
- 列级约束: 六大约束语法上都支持,但外建没有效果
- 表级约束:除了非空和默认,其他的都支持
create table 表名(
字段名1 字段类型 列级约束,
字段名2 字段类型,
字段名3 字段类型
表级约束
)
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
SQL的主键和外键就是起约束作用。
代码实例
#创建约束
create database stu;
use stu;
create table major(
id int Primary Key,
majorName VarChar(20));
create table stuinfo(
id int primary key, #主键
stuName VarChar(20) NOT NULL, #非空
gender CHAR(1) check(gender='男'or gender='女'), #检查,mysql不支持
seat int Unique, #唯一
Age int default 18, #默认
major int references major(id) #外键,mysql不支持
);
#添加表级约束
drop table if exists stuinfo;
create table stuinfo(
id int,
stuName VarChar(20),
gender CHAR(1),
seat int,
Age int,
majorid int,
constraint pk primary key(id),
constraint uq unique(seat),
constraint ck check(gender='男' or gender='女'),
constraint fk_stuinfo_major foreign key(majorid) REFERENCES major(id)
);
#查看约束情况
DESC stuinfo;
show index from stuinfo;
通用写法:
create table if not exists stuinfo(
id int primary key, #主键
stuName VarChar(20) NOT NULL, #非空
gender CHAR(1), #检查,mysql不支持
seat int Unique, #唯一
Age int default 18, #默认
majorid int,
constraint fk_stuinfo_major foreign key(majorid) REFERENCES major(id)
fk_stuinfo_major 列名_当前表名_引用表名
主键和唯一的对比
保证唯一性 | 是否为空 | 一个表有多少个 | 允许组合? | |
---|---|---|---|---|
主键 | 可以 | X | 最多一个 | 允许,但不推荐 |
唯一 | 可以 | 可以 | 可以有多个 | 允许,但不推荐 |
组合主键
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo (
id INT,
stuName VARCHAR ( 20 ),
gender CHAR ( 1 ),
seat INT,
Age INT,
majorid INT,
PRIMARY KEY(id,stuName),
UNIQUE(seat),
check(gender='男'or gender='女'),
FOREIGN KEY ( majorid ) REFERENCES major ( id )
);
结果显示 id 和stuName 都是主键,两个字段一摸一样时不能插入数据。保证两个字段的组合是唯一的。
https://www.bilibili.com/video/BV12b411K7Zu?p=128
更多推荐
已为社区贡献14条内容
所有评论(0)