约束是在表上强制执行的数据校验规则,比如我们在主键上添加一个非空约束,则一旦添加的主键值为空的话,就会报错,从而添加不进去。
(1)非空约束-not null
非空约束指某列不能为空。
create table people(
age int not null
)
特点:
(1)所有数据类型的值都可以是null,如int,float,char等。
(2)空字符串、0、null三者是不同的。
(2)唯一约束-unique
唯一约束用于保证指定列不出现重复值。但可以出现多个null值,因为null值和null值不一样。
//新增方式1-列级约束
create table people(
name varchar(255) unique
);
//新增方式2-表级约束
create table people(
name varchar(255),
pass varchar(255),
//不指定约束名字
unique(name);
//指定约束名字people_uk
constraint people_uk unique(pass)
);
//删除people表上的people_uk唯一约束
alter table people
drop index people_uk;
(3)主键约束-primary key
主键约束代表该列的值能够唯一标识该条记录,每一个表里最多允许有一个主键,但这个主键可以由多个数据列组合而成。主键约束相当于非空约束+唯一约束。
//新增方式1-列级约束
create table people(
id int primary key;
);
//新增方式2-表级约束
create table people(
id int not null,
primary key(id);
);
//新增方式3-建立多列组合的主键约束
create table people(
name varchar(255);
pass varchar(255);
primary key(name,pass)
);
//删除主键约束
alter table people
drop primary key;
主键列有一个自增长的特性,如果某个主键列的类型是整型,则可指定该列为自增长。
create table people(
id int auto_increment primary key,
name varchar(255)
);
(4)外键约束-foreign key
外键为其它表的主键,外键约束是将两个表建立了关联,如此便不能轻易删除主表。当想要删除主表中的记录时,需要先把从表中的外键记录删除后才能执行。
当然,有参照关系的不只是两个表中的某两个字段,也可以是某个表中的两个字段,这种情况被称为自关联。
下面显示怎么建立外键约束:
//建立主表
create table dept
{……};
//建立从表
create table emp
{
……
//【方式一】使用references来建立外键约束
foreign key(Dept_id) references emp (Id)
//【方式二】可以使用constraint来指定外键约束的名字
constraint dept_emp_fk foreign key(Dept_id) references emp (Id)
};
//删除外键约束
alter table emp
drop foreign key dept_emp_fk;
(5)检查约束-check
指定一个布尔表达式,该列的值必须满足此表达式。在mysql中指定check约束不会报错,但也不会起任何作用。
create table people(
id int auto_increment,
name varchar(255),
salary decimal,
check(salary>0)
);