一、非外键约束
1、非外键约束主要包含对字段类型(数值OR字符串)、附加值、主键、外键、是否自增等的定义
2、约束可添加在创建表时、创建表后,而创建表时添加约束分为列级约束和表级约束:列级约束是直接添加在列名后,表级约束在最后一列后逗号添加专门的约束语句;创建表后添加约束用ALTER TABLE 语句
## 表的完整性约束
/*建立一张表存储学生信息t_students,
字段包含学号、姓名、性别、年龄、入学日期、班级、电子邮箱等信息
【1】学号作为主键且自增
【2】名字不能为空
【3】性别默认为男
【4】性别只能为男女
【5】邮箱需唯一
【6】年龄在18-40之间
*/
-- 查看表的完整信息
SELECT * FROM t_students;
-- 创建表(列级约束)
CREATE TABLE t_students(
snu INT(6) PRIMARY KEY Auto_increment, -- PRIMARY KEY主键,Auto_increment自增
sname VARCHAR(5) NOT NULL, -- NOT NULL不能为空
sex CHAR(1) DEFAULT '男' CHECK(sex = '男' OR sex = '女'), -- DEFAULT默认值为男,CHECK是否为男女
age INT(3) CHECK(age>=18 AND age<=40),
enterdate DATE,
class VARCHAR(10),
email VARCHAR(15) UNIQUE -- UNIQUE要求唯一不重复
);
-- 插入数据
INSERT INTO t_students VALUES(1,'张三','男',18,'2020-09-06','建筑1班','zs@163.com');
INSERT INTO t_students VALUES(NULL,'李四','女',19,'2021-09-06','建筑1班','ls@163.com');
INSERT INTO t_students VALUES(NULL,'李华','女',19,'2021-09-06','建筑2班','lh@163.com');
INSERT INTO t_students VALUES(DEFAULT,'小王','男',18,'2019-09-06','软件1班','xw@163.com');
-- 自增列可用default或null代替输入值,若报错会浪费一个序号,后续不连号,但不要求连号
INSERT INTO t_students VALUES(DEFAULT,'小刘','女',20,'2017-09-06','软件2班','xl@163.com');
INSERT INTO t_students VALUES(DEFAULT,'王二','男',18,'2017-09-06','软件1班','we@163.com');
INSERT INTO t_students VALUES(DEFAULT,'小章','女',20,'2017-09-06','软件2班','xz@163.com');
INSERT INTO t_students(sname,age,enterdate,class,email) VALUES('小明',19,'2022-09-04','建筑2班','xm@163.com');
-- 删除表
DROP TABLE t_students;
-- 创建表(表级约束)
CREATE TABLE t_students(
snu INT(6) Auto_increment, -- 自增只能添加为列级约束
sname VARCHAR(5) NOT NULL, -- NULL只能添加为列级约束
sex CHAR(1) DEFAULT '男', -- DEFAULT只能添加为列级约束
age INT(3),
enterdate DATE,
class VARCHAR(10),
email VARCHAR(15),
CONSTRAINT pk_stu_snu PRIMARY KEY(snu), -- pk_stu_snu为主键取约束名,可任意取名(如abc)
CONSTRAINT ck_stu_sex CHECK(sex = '男' || sex = '女'),
CONSTRAINT ck_stu_age CHECK(age>=18 AND age<=40),
CONSTRAINT uq_stu_email UNIQUE(email)
);
-- 插入数据
INSERT INTO t_students VALUES(1,'张三','男',18,'2020-09-06','建筑1班','zs@163.com');
INSERT INTO t_students VALUES(NULL,'李四','女',19,'2021-09-06','建筑1班','ls@163.com');
INSERT INTO t_students VALUES(NULL,'李华','女',19,'2021-09-06','建筑2班','lh@163.com');
INSERT INTO t_students VALUES(DEFAULT,'小王','男',18,'2019-09-06','软件1班','xw@163.com');
INSERT INTO t_students VALUES(DEFAULT,'小刘','女',20,'2017-09-06','软件2班','xl@163.com');
INSERT INTO t_students VALUES(DEFAULT,'王二','男',18,'2017-09-06','软件1班','we@163.com');
INSERT INTO t_students VALUES(DEFAULT,'小章','女',20,'2017-09-06','软件2班','xz@163.com');
INSERT INTO t_students(sname,age,enterdate,class,email) VALUES('小明',19,'2022-09-04','建筑2班','xm@163.com');
-- 在创建表以后添加约束(若创建表时未添加)
CREATE TABLE t_students(
snu INT(6),
sname VARCHAR(5) NOT NULL,
sex CHAR(1) DEFAULT '男',
age INT(3),
enterdate DATE,
class VARCHAR(10),
email VARCHAR(15),
);
ALTER TABLE t_students ADD CONSTRAINT pk_stu_snu PRIMARY KEY(snu);
ALTER TABLE t_students MODIFY snu INT(6) Auto_increment;
ALTER TABLE t_students ADD CONSTRAINT ck_stu_sex CHECK(sex = '男' || sex = '女');
ALTER TABLE t_students ADD CONSTRAINT ck_stu_age CHECK(age>=18 AND age<=40);
ALTER TABLE t_students ADD CONSTRAINT uq_stu_email UNIQUE(email);二、外键约束
1、外键约束即在关系型数据库中用于联系多个表,定义外键的表称作从表,被依赖的表称作主表
2、定义外键后,删除某表中的具有与其他表相关联的列数据时,系统会报错,有效保护了数据
3、同非外键约束一致,外键约束可以添加在创建表中及创建后,创建后也用ALTER TABLE语句
-- 删除表
DROP TABLE t_students_1;
DROP TABLE t_class;
-- 查看表的数据
SELECT * FROM t_students_1;
SELECT * FROM t_class;
-- 创建父表(主表)
CREATE TABLE t_class(
cnu INT(2) PRIMARY KEY Auto_increment,
-- 主表主键与子表外键的名字可不同,但类型定义最好相同
cna VARCHAR(10)
);
INSERT INTO t_class VALUES
(1,'建筑1班'),
(2,'建筑2班'),
(3,'软件1班'),
(4,'软件2班');
-- 创建子表(副表),在创建中添加外键约束
CREATE TABLE t_students_1(
snu INT(6) PRIMARY KEY Auto_increment,
sname VARCHAR(5) NOT NULL,
sex CHAR(1) DEFAULT '男' CHECK(sex = '男' OR sex = '女'),
age INT(3) CHECK(age>=18 AND age<=40),
enterdate DATE,
classn INT(2),
email VARCHAR(15) UNIQUE,
CONSTRAINT fk_stus1_classn FOREIGN KEY(classn) REFERENCES t_class(cnu)
-- 外键约束只能作为列级约束
);
INSERT INTO t_students_1 VALUES
(1,'张三','男',18,'2020-09-06',1,'zs@163.com'),
(NULL,'李四','女',19,'2021-09-06',1,'ls@163.com'),
(NULL,'李华','女',19,'2021-09-06',2,'lh@163.com'),
(DEFAULT,'小王','男',18,'2019-09-06',3,'xw@163.com'),
(DEFAULT,'小刘','女',20,'2017-09-06',4,'xl@163.com'),
(DEFAULT,'王二','男',18,'2017-09-06',3,'we@163.com'),
(DEFAULT,'小章','女',20,'2017-09-06',4,'xz@163.com'),
(NULL,'小明','男',19,'2022-09-04',2,'xm@163.com');
-- 在创建表后添加外键约束
ALTER TABLE t_students_1 ADD
CONSTRAINT fk_stus1_classn FOREIGN KEY(classn) REFERENCES t_class(cnu);版权声明:本文为qq_40530187原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。