mysql的约束
数据表的约束
约束的目的是保证数据库中数据的完整性和一致性
常见的约束有
主键约束(primary key )
外键约束(foreign key)
非空约束(not null)
唯一约束(unique)
默认约束(default)
1:primary key约束
理解:primary key 可以有一个字段或者多个字段组成,
要求:主键字段的数据唯一,并且不能为空
一个数据表最多只有一个主键
单键约束和复合主键
单字段主键
1)创建表时指定主键
1 2 3 4 5 6 | create table company( company_id int (11) primary key , company_name varchar (50), company_address varchar (200) ); |
2)为已存在的表添加主键
1 2 3 | #先删除之前的数据表 #再来创建,没有指定主键的数据表 alter table company modify company_id int (11) primary key ; |
还是修改数据表的结构,所以使用的结构是alter table 表名 modify 修改的字段
3)删除主键约束
1 | alter table company drop primary key ; |
使用desc来查看数据表的结构
1 | desc company; |
复合主键
跟之前的单键的约束一样
1)创建一个复合主键
就是使用primary key(字段1,字段2)
1 2 3 4 5 6 | 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)创建表时添加外键约束
语法:
1 | foregin key 从表的外键字段名 references 主表名(主表的主键字段名) |
先创建主表
1 2 3 4 5 6 | create table dept ( id int (11) primary key , name varchar (11), location varchar (50) ); |
再来创建从表
1 2 3 4 5 6 7 | 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)为已存在的表添加外键
格式:
1 | alter table 表名 add foreign key (外键字段名) references 主表(主键字段) |
先删除之前的2个表
1 2 3 | #要先删除从表,再来删除主表 drop table dept; drop table emp; |
添加外键
1 | alter table emp add foreign key (dept_id) references dept(id); |
3)删除外键约束
1 | alter table 表名 drop foreign key 外键约束名 |
删除外键
1 | alter table emp drop foreign key emp_ibfk_1; |
3:not null constraint(非空约束)
就是指定的字段的值不能为空,可以定义多个非空字段
1)创建表时添加非空约束
格式:
1 | 字段名 数据类型 not null |
创建company表,设置company_id为主键,company_address为非空约束
1 2 3 4 5 6 | create table company ( company_id int (11) primary key , company_address varchar (200) not null , company_name varchar (10) ); |
2)为已存在的表添加非空约束
格式:
1 | alter table 表名 modify 字段名 数据类型性格 not null |
将company_name 设置为非空字段
1 | alter table company modify company_name varchar (5) not null ; |
3)删除非空约束
不使用drop删除,使用modify来修改
格式:
1 | alter table 表名 modify 字段名 数据类型 |
将company_address和company_name删除非空约束
1 2 | alter table company modify company_name varchar (5); alter table company modify company_address varchar (200); |
4:unique约束
唯一约束要求该列的值唯一,不能重复,可以保证一列或者好几列不出现重复值
1)创建表时添加唯一约束
格式:
1 | 字段名 数据类型 unique ; |
创建表company表,将company_id 设置为主键,将company_address设置为非空约束,company_name设置为唯一约束
1 2 3 4 5 | create table company( company_id int (11) primary key , company_address varchar (22) not null , company_name varchar (5) unique ); |
声明为唯一约束的字段允许有空值,但是声明为主键不允许有空值
2)为已存在的表添加唯一约束
格式:
1 | alter table 表名 modify 字段名 数据类型 unique ; |
将company_address设置为唯一约束
保留非空的约束
1 | alter table company modify company_address varchar (200) unique not null ; |
就是修改为唯一约束的话,之前的约束会被替代,如果要保留的话,就在后面添加保留的约束
3)删除唯一约束
格式:
1 | alter table 表名 drop index 字段名; |
删除company_addres和company_name的唯一约束
1 2 | alter table company drop index company_address; alter table company drop index company_name; |
5:default约束
就是将字段的设置成一个值,默认值可以是null
1)创建表时添加默认约束
设置company_cel为为031
格式:
1 | 字段名 数据类型 default 默认值 |
1 | create table company(company_cel int (11) default '031' ) |
2)为一已存在的表创建默认约束
1 | alter table 表名 modify 字段名 数据类型 default 默认值 |
将company_cel修改为777
1 | alter table company modify company_cel int (11) default '777' ; |
3)删除默认约束
也不需要使用drop
格式:
1 | alter table 表名 modify 字段名 数据类型 |
1 | alter table company modify company_cel int (11); |
约束的总结:
非空约束和默认约束删除都不使用drop
主键约束与外键约束:这个是必要的,因为主键约束,是唯一的,且不能为空的
外键约束就是建立表与表之间的联系的(他有主表和从表)
唯一约束:也是非常重要的,它能够设置好几列的值都没有重复的
6:设置表的字段值自动添加
就是这个约束他的字段必须为主键,auto_increment这个约束
默认值为1,添加其他字段的时候,不需要添加这个字段,他会自动的添加
1:创建表时设置为自动添加约束
company_id为自动约束
1 2 3 4 5 6 7 8 | 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:为已存在的表添加自动添加约束
1 | alter table company modify company_id int (11) auto_increment; |
3:删除自动添加约束
1 | alter table company modify company_id int (11); |
7:备注的添加
1)创建表时添加注释
格式:
1 | 字段名 类型 约束条件 ,comment '备注' ; |
2)唯一存在的表,添加注释
格式:
1 | alter table 表名 modify comment '备注' ; |
3)删除备注
格式:
1 | aalter table 表名 modify 字段名 类型; |
8: 总结
总结就是:
这些
主键约束和外键约束,唯一约束使用drop
not null 和default和自动增加和备注删除都不使用drop,使用modify来删除这些约束
主键约束的特征:唯一不能为空,一个表只能有一个主键(单,复合主键,共同组成一个主键)
外键约束的特征:有主表和从表,建立表和表之间的关系,从表的外键必须是依赖与主表的主键,可以为空,不为空时,是主表主键的某个值,不允许在主表中删除域子表具有关系的记录
唯一约束特征:就是确定某个列或者好几列都没有重复值,可以为空
非空约束特征:不能为空
默认约束特征:某个列默认为一个值,可以为空值
字段自动添加约束特征:就是增加字段的时候,不需要添加这个字段,会自动的添加,默认值为1,这个字段必须是主键
备注约束:某个字段备注为一个值,
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步