一、MySQL的表级约束和列级约束
对于一个列所创建的约束,称之为列级约束,而对于两个或两个以上的列所创建的约束,我们称之为表级约束,列级约束在使用的时候,既可以在列定义的时候声明,也可以在列定义以后声明,而表级的约束只能在列定义以后来声明,在实际开发中,用列级约束比较多,表级约束很少用,除此之外,在所有的约束中,并不是说每种约束都存在着表级或列级约束,其中,NOT NULL 非空约束,DEFAULT约束这两种约束就不存在表级约束,它们只有列级约束,而对于其他的三种,像主键,唯一,外键,它们都可以存在表级和列级约束。二、MySQL常见的几种约束
1、主键约束 primary key
主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
常用语句
1)添加主键约束
create table emp(
id int primary key,
name varchar(20)
);
alter table emp add primary key (id);
复合主键:
create table emp(
id int,
name varchar(20),
pwd varchar(10),
primary key(id,name)
);
alter table emp add primary key (id,name);
2) 修改主键约束
alter table emp modify id int primary key;
3) 删除主键约束
alter table emp drop primary key;
2、外键约束 foreign key
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
常用语句
1)创建外键约束
基本用法
主表
create table class(
id int primary key,
name varchar(20)
);
从表
create table student(
id int primary key,
name varchar(20),
class_id int,
foreign key (class_id) references class (id)
);
多列外键组合,必须用表级别的约束语法
主表
create table class (
id int,
name varchar(20),
number int,
primary key (name,number)
);
从表
create table students(
id int auto_increment primary key,
name varchar(20),
class_name varchar(20),
class_number int,
foreign key (class_name,class_number) references class (name,number)
);
2)增加外键约束
alter table student add foreign key (class_name,class_number) references class (name,number);
3)删除外键约束
alter table student drop foreign key (class_id);
3、 唯一约束unique
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。唯一约束不允许出现重复的值,但是可以为多个null。同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
1) 创建表时设置
create table emp(
id int not null,
name varchar(20),
password varchar(10),
unique (name,password)
);
2)添加唯一约束
alter table emp add unique (name,password);
3)修改唯一约束
alter table emp modify name varchar (25) unique;
4)删除唯一约束
alter table emp drop index name;
4、非空约束 not null 与 默认值 default
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
Null类型特征:所有的类型的值都可以是null,包括int、float 等数据类型
1)创建table表,ID为非空约束,name为非空约束,且默认值为‘abc’
create table emp (
id int not null,
name varchar(20) not null default 'abc',
sex char
);
2)增加非空约束
alter table emp modify sex varchar (2) not null;
3)取消非空约束
alter table emp modify sex varchar (2) null;
4)取消非空约束,增加默认值
alter table emp modify sex varchar(2) default 'abc' null;