约束:一种限制,用于限制行或者表中的数据,为了保证表中的数据的准确和可靠性
create table 表名(字段名 字段类型 约束)
分类:not null 非空,用于保证该字段的值不能为空
default:默认,用于保证该字段有默认值
primary key:主键,用于保证该字段的值具有唯一性
unique:唯一,用于保证该字段的值具有唯一性,可以为空
check:检查约束,MySQl中不支持
foreign key:外键,用于限制二个表的关系,用于保证该字段的值必须来自于主表关联列的值
添加约束的时间:创建表或者修改表时
约束的添加分类:列级约束(以上约束都支持,但外键没什么效果),表级约束(除了非空,默认,都支持)
1.添加列级约束:直接在字段名和类型后追加约束类型
-
CREATE
DATABASE students;
-
USE students;
-
CREATE
TABLE stuinfo(
-
id
INT PRIMARY
KEY,
-
stuName
VARCHAR(
20)
NOT
NULL,
-
gender
CHAR(
1),
-
seat
INT
UNIQUE,
-
age
INT
DEFAULT
18,
-
majorId
INT
REFERENCES major(
id)
-
);
-
CREATE
TABLE major(
-
id
INT PRIMARY
KEY,
-
majorName
VARCHAR(
20)
-
);
2.添加表级约束:在各个字段的最下面 【constraint 约束名】 约束类型(字段名)
-
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 fk_stuinfo_major FOREIGN
KEY(majorid)
REFERENCES major(
id),
-
-
);
通用的写法:
-
CREATE
TABLE
IF
Not
EXISTS stuinfo(
-
id
INT PRIMARY
KEY,
-
stuname
VARCHAR(
20)
NOT
NULL,
-
gender
CHAR(
1),
-
seat
INT
UNIQUE,
-
age
INT
DEFAULT
18,
-
majorid
INT,
-
CONSTRAINT fk_stuinfo_major FOREIGN
KEY(majorid)
REFERENCES major(
id)
-
);
主键和唯一的比较:保证唯一性 是否允许为空 一个表中可以有几个 是否允许组合
主键:是 不允许 至多一个 允许,但不推荐
唯一:是 允许 可以有几个 允许,但不推荐
外键:1.要求在从表设置外键关系
2.从表的外键列的类型和主表的关联列类型要求一致,名称无所谓
3.主表的关联列必须是一个key(一般是主键或唯一)
4.插入数据时,先插入主表,在插入从表,删除数据时先删从表,在删除主表
3.修改表时添加约束:添加列级:alter table 表名 modify column 字段名 字段类型 新约束;
添加表级:alter table 表名 add [constraint 约束名] 约束类型 (字段名)【外键的引用】
1.添加非空约束:
ALTER TABLE studio MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
2.添加默认约束:
ALTER TABLE studio MODIFY COLUMN age INT DEFAULT 18;
3.添加主键:
列级:
ALTER TABLE studio MODIFY COLUMN id INT PRIMARY KEY;
表级:
ALTER TABLE studio add PRIMARY KEY(id);
4.添加唯一:
列级:
ALTER TABLE studio MODIFY COLUMN seat INT UNIQUE;
表级:
ALTER TABLE studio ADD UNIQUE(seat);
5.添加外键:
ALTER TABLE studio ADD FOREIGN KEY(majorid) REFEENCES major(id);
4.修改表时删除约束:
1.删除非空约束:
-
-
ALTER
TABLE studio
MODIFY
COLUMN stuname
VARCHAR(
20)
NULL;
-
-
2.删除默认约束:
-
-
ALTER
TABLE studio
MODIFY
COLUMN age
INT;
-
-
3.删除主键:
-
-
ALTER
TABLE studio
DROP PRIMARY
KEY;
-
-
4.删除唯一:
ALTER TABLE studio DROP INDEX seat;
5.删除外键:
ALTER TABLE studio DROP FOFEIGN KEY majorid;