常见约束

含义:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性。

分类
六大约束:

  1. not null 非空 :用于保障该字段的值不能为空, 比如姓名、学号等
  2. Default 默认: 用于保证该字段有默认值,比如性别、
  3. PRIMARY KEY 主键: 用于保证该字段的值有唯一性,并且 非空。是能够唯一的标识一组数据的数据元素;比如说:学号,姓名,年龄,性别,课程号课程中学号是唯一的
  4. UNIQUE 唯一约束: 用于保障该字段的值有唯一性,可以为空, 比如座位号
  5. Check 检查约束:mysql中不支持,但不报错
  6. 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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐