约束:一种限制,用于限制行或者表中的数据,为了保证表中的数据的准确和可靠性
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;