MySQL(零基础)详解之约束

目录

一、约束的作用

1.1、查看某个表的约束

二、主键约束

2.1、创建主键约束

2.2、删除主键约束

三、唯一约束

3.1、创建唯一约束

3.2、删除唯一约束

3.3、主键约束和唯一约束区别

四、外键约束

4.1、添加外键约束

4.2、建表后再创建外键约束

4.3、删除外键约束

五、非空约束

5.1、创建表时指定

5.2、创建表后指定

六、检索约束

七、缺省约束(default 约束)


一、约束的作用

约束是为了保证数据的完整性精确性以及可靠性
MySQL 中约束有以下几种:
(1)键约束:包括主键 (Primary Key) 约束、外键 (Foreign Key) 约束、唯一键 (Unique) 约束
(2) 非空约束:也就是 NOT NULL 约束
(3) 检查约束:也叫 Check 约束
(4) 缺省约束:也叫 Default 约束

1.1、查看某个表的约束

语法格式:
select * from information_schema.TABLE_CONSTRAINTS 
where table_name='表名称';
例如:查看 t_stu 表的约束
select * from information_schema.TABLE_CONSTRAINTS 
where table_name='t_stu';

二、主键约束

主键约束也是 Primary Key 约束,简称 PK ,它是数据库的主键,用于保证实体的完整性,可以是一个列,也可以是多个列的组合。
对于主键约束来说,它相当于唯一约束 + 非空约束的组合。对于主键约束的列,它是不允许数据重复,也不允许出现空值。
每个表有且最多只允许一个主键约束
当我们在创建表时,如果指定了主键,也就指定了主键约束,同时在 MySQL 中,还会为主键约
束建立主键索引,当删除主键时,同时也会删除主键约束和索引。

2.1、创建主键约束

(1)在创建表中主键后直接加主键约束

create table t_teacher ( 
tid int(11) primary key, -- 主键约束 
tname varchar(20), 
gender char 
);

注意:这种方式不能添加复合主键约束。

(2)在创建表中的最后来单独声明

create table t_course( 
cid int(11), 
name varchar(100),
description varchar(200), 
primary key(cid) -- 添加主键约束 
);
这各种方式可以用于添加复合主键约束,如果要添加复合主键约束,只需要把字段名写在括号中,用英文逗号分隔即可。
(3) 创建好表后再添加约束
语法格式:
alter table 表名 add [constraint 约束名称] primary key(字段名1,字段名2,...);
示例:
create table t_xx ( 
id int(11), 
name varchar(20) 
)

alter table t_xx add constraint t_xx_pk primary key(id);

2.2、删除主键约束

删除主键约束时,不需要指定主键名称,因为一张中最多只有一个主键约束。
语法格式:
alter table 表名 drop primary key;

三、唯一约束

唯一约束( Unique Key ),简称 UK
同一张表可以有多个唯一约束,唯一约束可以使是某一个列的值唯一,也可以让多个列组合为唯一约束后从而实现值的唯一。

3.1、创建唯一约束

(1)在创建表时,指定表主键

(2)在创建表中来指定唯一约束

 添加唯一约束的语法是:

 constraint 唯一约束名称 unique key(字段名列表)
create table t_per( 
id int primary key, 
name varchar(100), 
tel varchar(11), 
constraint uk_t_per_tel unique key (tel) 
);

(3)在表创建好后再指定

语法格式:
alter table 表名 add constraint 唯一约束名称 unique key(字段名列表);
这种方式是要先创建表,然后再添加约束。

3.2、删除唯一约束

语法格式:
alter table 表名 drop index 唯一约束名;

3.3、主键约束和唯一约束区别

(1) 主键约束是非空,唯一约束允许为空;
(2) 主键约束一个表只能有一个,唯一约束一个表可以有多个。

四、外键约束

外键约束 Foreign Key ,简称 FK
外键约束是为了保证一个或两张表之间的参照完整性,它是用于构建表与表之间的关系。
当我们在创建外键约束时,数据默认会在这个列上建立对应的普通索引。当删除外键时,外键上的普通索引也会删除。
对于外键的使用要注意以下几点 :
(1)在从表上建立外键,而且主表要先存在
(2)从表的外键列,在主表中引用的只能是键列(主键、唯一键、外键);
(3)一个表可以建立多个外键约束;
(4)从表的外键值必须在主表中能找到或者为空,从而约束了从表的外键列的值的添加和修改;

4.1、添加外键约束

示例:

create table t_a(
 aid int primary key auto_increment,
 aname varchar(20) 
);

create table t_b( 
bid int primary key auto_increment, 
bname varchar(20), 
a_id int(11), -- 外键 
-- 添加外键 
constraint fk_t_a_aid 
foreign key(a_id) references t_a(aid) on update cascade on delete restrict 
);

说明:

(1)使用 constraint 外键名列 foreign key(外键字段) references 引用表(字段) 的语法格式来创建外键。

(2)constraint 外键名列 这个部分是可以省略。

(3)on update cascade on delete restrict 表示做级联操。

4.2、建表后再创建外键约束

语法格式:
alter table 表名 add [constraint 约束名] 
foreign key(从表字段) references 主 表名(主表中被参照的字段名);
例如:
alter table t_b add constraint fk_t_a_aid 
foreign key(a_id) references t_a(aid);

4.3、删除外键约束

语法格式:
alter table 表名 drop foreign key 外键约束名;

例如:

alter table t_b drop foreign key fk_t_a_aid;

五、非空约束

5.1、创建表时指定

非空约束也就是 NOT NULL 约束,它是规定某个字段不能为空值。
create table t_user( 
uid int primary key, 
uname varchar(50), 
tel varchar(11) not null 
);
此时, tel 这个字段就建立了非空约束。

5.2、创建表后指定

创建表后指定非空约束也是使用 alter 语法来指定。
语法格式:
alter table 表名 modify 字段名 数据类型(长度) not null;
示例:
alter table t_per modify name varchar(100) not null ;

六、检索约束

MySQL 中是不支持检查约束,但是可以使用 check 约束来进行指定,只是没有什么效果。
例如: age tintint check(age > 18) 或者我们实现 gender char(1) check(gender in (' ',' '))
 
create table t_yy( 
id int primary key, 
name varchar(20),
gender char not null check(gender in ('男','女')) 
);
插入数据
insert into t_yy values (1, 'sz', '男'); 
insert into t_yy values (2, 'sz', '人');

 从上面的执行结果可以看出,check 约束MySQL是支持的,但是没有效果。

七、缺省约束(default 约束)

缺省约束也是 default 约束,它是默认值,在插入数据时,如果某列没有给定值,那么就会将默认值添加到新记录中。
create table t_zz( 
id int primary key, 
age int(2) not null default 0 
);
在上例中,我们给 age 字段指定了默认值,它就是缺省约束。
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值