**以下所有约束状态均能用describe查询
1、主键约束:
它能够唯一确定一张表中的一条记录,也就是我们通过某个字段添加约束,就可以是的改字段不重复且不为空。
**①方法一:**
create table user( # 创建表
id int primary key, # 创建主键约束,id将不能重复添加
Name varchar(20)
);
**②方法二:联合主键,只要主键加起来不重复就可以。**
Create table user2(
Id int,
Name varchar(20),
Password varchar(20),
Primary key(id, name) # 在此约束主键,可联合,任一不能为空
);
insert into user2 value(1, '张三', '123');
insert into user2 value(2, '张三', '123'); √
**③如果忘记创建主键约束:**
Alter table user4 add primary key(id); # 修改表格约束,添加主键约束
Alter table user4 drop primary key; # 删除主键约束
Alter table user4 modify id int primary key; # 使用modify修改字段,添加主键约束
2、自增约束:在添加记录时将自动增加约束
Create table user3(
Id int primary key auto_increment, # 在添加项时id自动增加
Name varchar(20)
);
Insert into user3 (name) values('张三'); # id=1
Insert into user3 (name) values('张三'); # id =2
3、唯一约束:约束修饰的字段的值不可以重复(可以为空)
**①方法一**
Create table user5(
Id int,
Name varchar(20)
);
Alter table user5 add unique(name); # 添加位于约束,name不能重复
# 比如身份证
**②方法二:唯一约束也可以组合约束**
Creat table user6(
Id int,
Name varchar(20),
Unique(name)
);
**③方法三**
Creat table user7(
Id int,
Name varchar(20) unique
**④修改唯一约束:**
Alter table user7 add unique(name); #增加唯一约束
Alter table user7 drop index name; # 删除唯一约束
Alter table user7 modify name varchar(20) unique; # 修改唯一约束
4、非空约束:修饰的字段不能为空 NULL
Create table user9(
Id int,
Name varchar(20) not null
);
Insert into user9 values(1,); # 由于没有增加namechar,增加失败
非空约束not null也可以使用 add drop modify等进行修改
5、默认约束:当我们插入字段值的时候,如果没有传值,就会使用默认值
Create table user10(
Id int,
Name varchar(20),
Age int default 10
);
6、外键约束:涉及到父表、子表,主表、副表
**--班级表**
Create table classes(
Id int primary key,
Name varchar(20)
);
**--学生表**
Create table students(
Id int primary key,
Name varchar(20),
Class_id int,
Foreign key(class_id) references classes(id) # 将学生表的class_id 与班级表中的id绑定
);
insert into classes values(1,'一班');
insert into classes values(2,'二班');
insert into classes values(3,'三班');
insert into classes values(4,'四班');
Insert into students values(1001,'张三',1); # √
Insert into students values(1002,'张三',2); # √
Insert into students values(1003,'张三',3); # √
Insert into students values(1004,'张三',4); # √
Insert into students values(1005,'李四',5); # ×,外键连接失败
--主表中classes没有的数据值,在副表(子表)中是不可以使用的。
--主表中的记录被副表引用,主表中的相应记录是不可以删除的。
Delete from classes where id =4; # ×