MySQL常见约束(主键,外键,默认,非空,检查,唯一)

#常见约束
/*
六大约束
NOT NULL :非空
DEFAULT  :默认 保证该字段有默认值
PRIMARY KEY :主键 保证该字段有唯一性且非空
UNIQUE   : 保证唯一但可以为空
CHECK :检查约束(MySQL中不支持)限制该字段的值在一个范围
FOREIGN KEY :外键  从表中添加外键约束,引用主表中某列的值
语法:列名 类型 ,【constraint 约束名】 foreign key(majorId) references major(id);
添加约束的时机
1、创建表时
2、修改表时

分类
	列级约束:
		六大约束语法上都支持,但是外键约束没有效果
	表级约束:
		除了非空和默认,其他都支持
*/

#一、创建表时添加约束

CREATE DATABASE students;
USE students;
#1、添加列级约束
CREATE TABLE stuinfo(
	id INT PRIMARY KEY,
	stuName VARCHAR(20) NOT NULL,
	gender CHAR(1) CHECK(gender='男' OR gender='女'),#不支持
	seat INT UNIQUE,
	age INT DEFAULT 18,
	majorId INT ,FOREIGN KEY(majorId) REFERENCES major(id)
);

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 un UNIQUE(seat),
	CONSTRAINT fk CHECK(gender='男' OR gender='女'),
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES `major`(id)	
	#constraint和约束名可以省略	     
);

SHOW INDEX FROM stuinfo;

#通用写法:外键约束用表级约束,其他用列级约束


#主键和唯一的区别!!!!!!!!面试题
/*	是否保证唯一	是否允许为空	一个表中有几个	是否允许组合
主键	是		否		<=1		是,但不推荐
唯一	是		是		任意		是,但不推荐

主键组合
primary key(id,stuname)二者共同充当主键
如
insert into students values (1,'john',...)
insert into students values (2,'john',...)

insert into students values(1,'john',...)
insert into students values(1,'lily',...)
上面两组皆可插入成功
insert into students values(1,'john',...)
insert into students values(1,'john',...)
这组不行
*/


#外键的特点!!!
/*
1、要求再从表设置外键关系
2、从表外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、要求主表的关联列必须是一个key(一般是主键,或者唯一键,主键居多)
4、要求插入数据时,先插入主表,再插入从表
   删除数据时,先删除从表,在删除主表
*/


#修改表时添加约束

#1、添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#2、添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#3、添加主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;#列级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);#表级约束
#4、添加唯一
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;#列级约束
ALTER TABLE stuinfo ADD UNIQUE(seat);#表级约束
#5、添加外键
ALTER TABLE stuindo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);#可省略constraint


#修改表时删除约束
#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;#seat为key name
SHOW INDEX FROM stuinfo;#先查看key name

#5、删除外键
ALTER TABLE stuinto DROP FOREIGN KEY fk_stuinfo_major;#fk_stuinfo_major为key name





上一篇:数据库课堂笔记3(SQL语句)


下一篇:c#学习第二天