/* MySQL进阶13 常见六大约束: 1.not null 非空 2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10 3.primary key : 主键,用于保证该字段的值具有唯一性,并且非空 4.unique : 唯一约束,保证该字段的值可以为空,具有唯一性 5.check : 检查约束[mysql不支持,不报错,没有实际效果] 6.foreign key : 外键约束; 用于限制两个表的关系, 用于保证该字段的值必须来自于主表的关联列的值; 在从表中添加外键约束,用于引用主表中的某列的值; 比如: 学生表的专业编号,员工表的部门编号,员工表的工种编号; 添加约束的时机: 1.创建表时 2.修改表时 ---------- 约束的添加分类: 列级约束 : 六大约束语法上都支持,但外键没有效果!! 表级约束 : 除了非空,默认, 其他的都支持! 语法 : constraint 约束名 约束类型(字段名) 主键和唯一: 都可以组合! #二. 修改表的时候 添加列级约束 alter table 表名 modify column 字段名 字段类型 新类型; 添加表级约束 alter table 表名 add [constraint 约束名] 约束类型(字段名) [外键的引用]; #********添加表名 # alter table 表名 add column 字段名 字段类型; */ CREATE TABLE 表名( 字段名 字段类型 列级约束, 字段名 字段类型, 表级约束 ); #一: 创建表时添加约束 CREATE DATABASE students; #1.添加列级约束 USE students; CREATE TABLE stuinfo( id INT PRIMARY KEY, #主键 stuName VARCHAR(20) NOT NULL, #非空 gender CHAR(1) CHECK(gender IN ('男','女')), #检查约束 seat INT UNIQUE, #唯一 age INT DEFAULT 18 , #默认约束 majorId INT REFERENCES major(id) #设置为外键 ); DESC stuinfo; CREATE TABLE major( id INT PRIMARY KEY, majorName VARCHAR(20) ); #2 添加表级约束 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) #外键 ); SHOW INDEX FROM stuinfo; #组合写法,更常用! 主键和唯一:都可以组合! DROP TABLE IF EXISTS stuinfo; CREATE TABLE 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 ='女'), #检查 CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键 ); #二. 修改表的时候添加约束 DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo( id INT , stuName VARCHAR(20), gender CHAR(1), seat INT, age INT , majorid INT ); DESC stuinfo; #1.添加非空约束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL; #2 添加默认约束 ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18; #3添加主键: 1)列级约束 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; #2) 表级约束 ALTER TABLE stuinfo ADD PRIMARY KEY(id); #4.添加唯一 #1.列级约束 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE; #2) 表级约束 ALTER TABLE stuinfo ADD UNIQUE(id); #5.添加外键 ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id); ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); #三 .删除约束 #1.删除非空约束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL; #2 删除默认约束 ALTER TABLE stuinfo MODIFY COLUMN age INT; #3删除主键 ALTER TABLE stuinfo DROP PRIMARY KEY; #4删除唯一 ALTER TABLE stuinfo DROP INDEX seat; #5.删除外键 ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major; DESC stuinfo;