#常见约束
/*
NOT NULL:非空
该字段的值是必填的,如果不设置该约束,该字段默认是可以为空
default:默认
该字段有默认值
CHECK:检查,mysql语法支持,但效果不支持
该字段值可以加以限制,比如年龄可以控制在0-120之间
primary key:主键
该字段值不可以重复
1、不可以为空
2、一个表中只能有一个主键,但是可以多个字段做组合主键
unique:唯一约束
该字段值不可以重复
1、可以为空
2、一个表中可以有多个唯一键,可以有组合唯一键
foreign key:外键
用于限制多表的关系
1、从表的该字段值必须来自于主表的关联列的值
2、从表和主表的关联列的类型必须一样
3、主表的关联列必须是主键
4、在从表中设置外键
5、一个表中可以添加多个外键
6、插入数据时,先插入主表
删除数据时,先删除从表
分类:
位置 支持
列级约束 列的后面 除了外键
表级约束 表的后面 除了非空和默认
*/
#一、★★★★★★★★★★★创建表时添加约束 ★★★★★★★★★★★ √
#CREATE TABLE表名(
# 字段名字段类型列级约束,
# 字段名字段类型列级约束,
# 表级约束
#1.添加列级约束
use girls
drop table if exists stuinfo
create table stuinfo(
id int not null unique,
stuname varchar(20) unique,
gender char default'男',
age int unsigned check(age between 0 and 120)
)
desc stuinfo
#插入默认值
insert into stuinfo(id,stuname,gender,age) values(1,'bod','女',20)
#唯一和主键
SELECT * from stuinfo
insert into stuinfo VALUES(2,null,default,200)
#2.表级约束
DROP table if exists stuinfo
create table stuinfo(
id int not null,
stuname varchar(20),
gender char default'男',
age int unsigned,
gredeid int,
primary key(id,stuname),
constraint up unique(age),
constraint fk_stuinfo foreign key(gredeid) references grade(id)
)
CREATE TABLE grade(
id INT PRIMARY KEY,
gradename VARCHAR(20)
)
SELECT * from stuinfo
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT ,
stuName VARCHAR(20),
gender CHAR,
age INT UNSIGNED,
gradeid INT
);
#1.添加非空
ALTER TABLE stuinfo MODIFY COLUMN gender CHAR NOT NULL;
#2.添加默认
alter table stuinfo modify column age int unsigned default 18
desc stuinfo
#3.添加主键
#①方式一:列级约束的做法
alter table stuinfo modify column id int primary key;
#②方式二:表级约束的做法
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT ,
stuName VARCHAR(20),
gender CHAR,
age INT UNSIGNED,
gradeid INT
)
DESC stuinfo
alter table stuinfo add primary key(id)
#4.添加唯一
#①方式一:列级约束的做法
alter table stuinfo modify column stuname varchar(20) unique
#②方式二:表级约束的做法
alter table stuinfo add constraint u_stuinfo unique(stuname)
alter table stuinfo add constraint u_id primary key(id)
#5.添加外键
alter table stuinfo ADD constraint stuinfo_grade foreign key(gradeid) references grade(id)
##三、★★★★★★★★★★★修改表时删除约束 ★★★★★★★★★★★
#1.删除非空(删除就是重新修改)
alter table stuinfo modify column gender char
SELECT * from stuinfo
#2.删除默认
alter table stuinfo modify column age int unsigned
#3.删除主键
alter table stuinfo modify column in int;
alter table stuinfo drop primary key
#4.删除唯一
alter table stuinfo modify column stuname varchar(20)
alter table stuinfo drop index uq_stuinfo
#查看指定表的所有索引
show index from stuinfo