mysql的约束
数据表的约束
约束的目的是保证数据库中数据的完整性和一致性
常见的约束有
主键约束(primary key )
外键约束(foreign key)
非空约束(not null)
唯一约束(unique)
默认约束(default)
1:primary key约束
理解:primary key 可以有一个字段或者多个字段组成,
要求:主键字段的数据唯一,并且不能为空
一个数据表最多只有一个主键
单键约束和复合主键
单字段主键
1)创建表时指定主键
create table company( company_id int (11) primary key, company_name varchar(50), company_address varchar(200) );
2)为已存在的表添加主键
#先删除之前的数据表 #再来创建,没有指定主键的数据表 alter table company modify company_id int(11) primary key;
还是修改数据表的结构,所以使用的结构是alter table 表名 modify 修改的字段
3)删除主键约束
alter table company drop primary key;
使用desc来查看数据表的结构
desc company;
复合主键
跟之前的单键的约束一样
1)创建一个复合主键
就是使用primary key(字段1,字段2)
create table company( company_id int(11), company_name varchar(50), company_address varchar(200), primary key(company_id,company_name) );
其余的都一样,添加已有的主键约束或者删除主键约束
2:foregin key 约束
外键在2个表的数据之间建立关系,他可以是一个字段或者多个字段,一个表可以有多个或者一个外键
一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。关联就是在关系型数据库中,子表中的外键必须关联父表的主键,且关联的数据类型必须匹配
定义外键后,不允许在主表中删除与子表具有关联关系的记录
主表(父表):对于2个具有关联关系的表而言,相关联字段中主键所在的那个表即为主表
从表(子表):外键所在的那个表为从表
1)创建表时添加外键约束
语法:
foregin key 从表的外键字段名 references 主表名(主表的主键字段名)
先创建主表
create table dept ( id int(11) primary key, name varchar(11), location varchar(50) );
再来创建从表
create table emp ( id int(11) primary key, name varchar(11), dept_id int(11), foreign key(dept_id) references dept(id) );
查询的外键的方式
desc 表名 或者 show create table 表名(可以看到怎么创建的表)
总结:主表的字段和从表的字段必须类型兼容或者类型一致,且含义一样,
创建外键时,必须先创建主表,再来创建从表
2)为已存在的表添加外键
格式:
alter table 表名 add foreign key (外键字段名) references 主表(主键字段)
先删除之前的2个表
#要先删除从表,再来删除主表 drop table dept; drop table emp;
添加外键
alter table emp add foreign key(dept_id) references dept(id);
3)删除外键约束
alter table 表名 drop foreign key 外键约束名
删除外键
alter table emp drop foreign key emp_ibfk_1;
3:not null constraint(非空约束)
就是指定的字段的值不能为空,可以定义多个非空字段
1)创建表时添加非空约束
格式:
字段名 数据类型 not null
创建company表,设置company_id为主键,company_address为非空约束
create table company ( company_id int(11) primary key, company_address varchar(200) not null, company_name varchar(10) );
2)为已存在的表添加非空约束
格式:
alter table 表名 modify 字段名 数据类型性格 not null
将company_name 设置为非空字段
alter table company modify company_name varchar(5) not null;
3)删除非空约束
不使用drop删除,使用modify来修改
格式:
alter table 表名 modify 字段名 数据类型
将company_address和company_name删除非空约束
alter table company modify company_name varchar(5); alter table company modify company_address varchar(200);
4:unique约束
唯一约束要求该列的值唯一,不能重复,可以保证一列或者好几列不出现重复值
1)创建表时添加唯一约束
格式:
字段名 数据类型 unique;
创建表company表,将company_id 设置为主键,将company_address设置为非空约束,company_name设置为唯一约束
create table company( company_id int(11) primary key, company_address varchar(22) not null, company_name varchar(5) unique );
声明为唯一约束的字段允许有空值,但是声明为主键不允许有空值
2)为已存在的表添加唯一约束
格式:
alter table 表名 modify 字段名 数据类型 unique;
将company_address设置为唯一约束
保留非空的约束
alter table company modify company_address varchar(200) unique not null;
就是修改为唯一约束的话,之前的约束会被替代,如果要保留的话,就在后面添加保留的约束
3)删除唯一约束
格式:
alter table 表名 drop index 字段名;
删除company_addres和company_name的唯一约束
alter table company drop index company_address; alter table company drop index company_name;
5:default约束
就是将字段的设置成一个值,默认值可以是null
1)创建表时添加默认约束
设置company_cel为为031
格式:
字段名 数据类型 default 默认值
create table company(company_cel int(11) default '031')
2)为一已存在的表创建默认约束
alter table 表名 modify 字段名 数据类型 default 默认值
将company_cel修改为777
alter table company modify company_cel int(11) default '777';
3)删除默认约束
也不需要使用drop
格式:
alter table 表名 modify 字段名 数据类型
alter table company modify company_cel int(11);
约束的总结:
非空约束和默认约束删除都不使用drop
主键约束与外键约束:这个是必要的,因为主键约束,是唯一的,且不能为空的
外键约束就是建立表与表之间的联系的(他有主表和从表)
唯一约束:也是非常重要的,它能够设置好几列的值都没有重复的
6:设置表的字段值自动添加
就是这个约束他的字段必须为主键,auto_increment这个约束
默认值为1,添加其他字段的时候,不需要添加这个字段,他会自动的添加
1:创建表时设置为自动添加约束
company_id为自动约束
create table company( company_id int(11) primary key auto_increment, company_name varchar(11) unique not null, company_address varchar(20) default '公司' ); insert into company(company_name,company_address) values( 'qcy','jia'),('qqq','jia'),('fff','jia');
当插入数据的时候,company_id这个字段会自动的添加
2:为已存在的表添加自动添加约束
alter table company modify company_id int(11) auto_increment;
3:删除自动添加约束
alter table company modify company_id int(11);
7:备注的添加
1)创建表时添加注释
格式:
字段名 类型 约束条件 ,comment '备注';
2)唯一存在的表,添加注释
格式:
alter table 表名 modify comment '备注';
3)删除备注
格式:
aalter table 表名 modify 字段名 类型;
8: 总结
总结就是:
这些
主键约束和外键约束,唯一约束使用drop
not null 和default和自动增加和备注删除都不使用drop,使用modify来删除这些约束
主键约束的特征:唯一不能为空,一个表只能有一个主键(单,复合主键,共同组成一个主键)
外键约束的特征:有主表和从表,建立表和表之间的关系,从表的外键必须是依赖与主表的主键,可以为空,不为空时,是主表主键的某个值,不允许在主表中删除域子表具有关系的记录
唯一约束特征:就是确定某个列或者好几列都没有重复值,可以为空
非空约束特征:不能为空
默认约束特征:某个列默认为一个值,可以为空值
字段自动添加约束特征:就是增加字段的时候,不需要添加这个字段,会自动的添加,默认值为1,这个字段必须是主键
备注约束:某个字段备注为一个值,