欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL学习——约束

程序员文章站 2022-05-03 15:06:28
MySQL学习——约束 摘要:本文主要学习了数据库的约束。 primary key(主键) 定义 主键约束是一个列或者多个列,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 主键约束相当于唯一约束和非空约束的组合,主键约束列不允许重复,也不允许出现空值。 ......

mysql学习——约束

摘要:本文主要学习了数据库的约束。

primary key(主键)

定义

主键约束是一个列或者多个列,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。

主键约束相当于唯一约束和非空约束的组合,主键约束列不允许重复,也不允许出现空值。

每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。

当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

实例

在创建表时添加单列主键约束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50)
5     -> );
6 query ok, 0 rows affected (0.01 sec)
7 
8 mysql> 

在创建表时添加复合主键约束:

1 mysql> create table test (
2     ->   id int(11),
3     ->   phone int(11),
4     ->   name varchar(50),
5     ->   primary key(id, phone)
6     -> );
7 query ok, 0 rows affected (0.00 sec)
8 
9 mysql> 

在修改表时添加主键约束:

1 mysql> alter table test add primary key(id, phone);
2 query ok, 0 rows affected (0.01 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql> 

在修改表时删除主键约束:

1 mysql> alter table test drop primary key;
2 query ok, 0 rows affected (0.01 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql> 

foreign key(外键)

定义

外键约束用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。

外键的主要作用是保持数据的一致性、完整性。

主表和子表

主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。

从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。

实例

创建父表并定义主键约束:

1 mysql> create table man (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50)
5     -> );
6 query ok, 0 rows affected (0.01 sec)
7 
8 mysql> 

在创建表时添加外键约束:

 1 mysql> create table child (
 2     ->   id int(11) primary key,
 3     ->   manid int(11),
 4     ->   phone int(11),
 5     ->   name varchar(50),
 6     ->   constraint fk_man_id foreign key(manid) references man(id)
 7     -> );
 8 query ok, 0 rows affected (0.00 sec)
 9 
10 mysql> 

在修改表时添加外键约束:

1 mysql> alter table child add constraint fk_man_id foreign key(manid) references man(id);
2 query ok, 0 rows affected (0.01 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql> 

在修改表时删除外键约束:

1 mysql> alter table child drop foreign key fk_man_id;
2 query ok, 0 rows affected (0.00 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql> 

unique key(唯一)

定义

唯一约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。

实例

在创建表时添加单列唯一约束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11) unique,
4     ->   name varchar(50)
5     -> );
6 query ok, 0 rows affected (0.00 sec)
7 
8 mysql> 

在创建表时添加多列唯一约束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50),
5     ->   unique(phone, name)
6     -> );
7 query ok, 0 rows affected (0.00 sec)
8 
9 mysql> 

在修改表时添加唯一约束:

1 mysql> alter table test add constraint uk_test_phone unique(phone);
2 query ok, 0 rows affected (0.00 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql> 

在修改表时删除唯一约束:

1 mysql> alter table test drop index uk_test_phone;
2 query ok, 0 rows affected (0.00 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql> 

default constraint(默认值)

定义

默认值约束用来指定某列的默认值。

实例

在创建表时添加默认值:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50) default 'test'
5     -> );
6 query ok, 0 rows affected (0.01 sec)
7 
8 mysql> 

在修改表时修改默认值:

1 mysql> alter table test change column name name varchar(30) default 'none';
2 query ok, 1 row affected (0.00 sec)
3 records: 1  duplicates: 0  warnings: 0
4 
5 mysql> 

not null constraint(非空)

定义

非空约束可以用来约束该列的取值不能为空,对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。

实例

在创建表时添加非空约束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50) not null
5     -> );
6 query ok, 0 rows affected (0.00 sec)
7 
8 mysql> 

在修改表时修改非空约束:

1 mysql> alter table test change column name name varchar(30) null;
2 query ok, 0 rows affected (0.01 sec)
3 records: 0  duplicates: 0  warnings: 0
4 
5 mysql>