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,这个字段必须是主键

备注约束:某个字段备注为一个值,

 

 

 

  

  

 

 

 

 

  

  

  

  

  

  

  

  

  

  

 

 

 

 

 

  

  

  

 

  

 

posted @ 2023-12-07 23:00  q_7  阅读(14)  评论(0编辑  收藏  举报