MySQL 表的约束条件

ぃ、小莉子 提交于 2019-12-14 07:03:40

1.主键约束

主键约束要求主键列的数据非空且唯一

1. 在定义列时指定主键,语法规则如下
字段名 数据类型 primary key

create table book
(
bno Varchar(6) primary key,	//主键
bname Varchar(70),
press Varchar(30),
price Decimal(8,2),
author varchar(30)
)

2. 在定义完所有列之后指定主键。
constraint 约束名 primary key (字段名);
如:

create table book
(
bno Varchar(6),
bname Varchar(70),
press Varchar(30),
price Decimal(8,2),
author varchar(30),
//括号里可以输入多个字段,用逗号隔开,约束名随意
 constraint pk primary key(bno)
)

3.在创建表之后添加与删除主键

alter table 表名 modify 字段名 数据类型 primary key; //添加
alter table 表名 drop primary key; //删除

  • 添加主键
alter table book modify bno varchar(6) primary key;
  • 删除主键
alter table book drop primary key;

2.外键约束

外键用来让表与表产生关系,定义外键后,不允许删除另一个表中具有关联的字段。
外键的作用是保证数据引用的完整性。

创建外键的语法规则如下:

[constraint 外键名] foreign key (字段名) reference 主表名 主表列名;

“外键名”定义了外键约束的名称,一个表中不能有相同名称的外键。

(1) 在创建表时创建外键

create table reader
(
    id int(8),
    name varchar(40),
    constraint reader_book_fk foreign key (id) references book (bno)
)

以上语句执行后,即在表reader中添加了名为reader_book_fk的外键约束,将此表中的id字段与book表中的主键bno关联了起来。(子表的外键必须关联父表的主键)

(2) 在创建表之后添加与删除外键

alter table 表名 add constraint 外键名 foreign key (字段名) references 主表名 (主表列名称); //添加

alter table 表名 drop foreign key 外键名; //删除

  • 添加外键约束
alter table reader add constraint reader_book_fk foreign key (id) references book (bno);
alter table reader drop foreign key reader_book_fk;
  • 删除外键约束
alter table reader drop foreign key reader_book_fk;

补充:级联操作(慎用)

当操作主表时,系统会自动的操作从表。

例如employee的 dep_id 字段department表中的 id 字段之间添加了外键约束,这时,要修改或删除department表中的id的值变得很麻烦
在这里插入图片描述phone表中的 品牌 字段 与company表中的 品牌 字段相关联。
添加了级联操作后,
修改department表中的id值,employee表中的dep_id值会自动进行修改。
删除department表中的id为1的记录,employee表中的dep_id值为1的记录会被自动删除。

添加级联操作语法:

alter table 表名 add constraint 外键名 foreign key (字段名) references 主表名
(主表列名称) on update cascade on delete cascade;

  • 级联更新:on update cascade
  • 级联删除:on delete cascade

3.非空约束

非空约束指字段的值不能为空,语法规则如下:

字段名 数据类型 not null

(1) 创建表时添加非空约束

create table book3
(
bno Varchar(6) primary key,	//主键
bname Varchar(70) not null,
press Varchar(30),
price Decimal(8,2),
author varchar(30)
)

执行后,插入数据时bname不能为空。

(2) 创建表后添加与删除非空约束,即修改字段

alter table 表名 modify 字段名 数据类型;
alter table 表名 modify 字段名 数据类型 not null;

  • 删除非空约束
alter table book3 modify bname varchar(6);
  • 添加非空约束
alter table book3 modify bname varchar(6) not null;

4.唯一约束

要求该列唯一,可为空,但只能出现一个空值,语法规则如下:

字段名 数据类型 nuique

(1) 创建表时添加唯一约束

create table book4
(
bno Varchar(6) nuique,
bname Varchar(70),
)

指定bno的唯一性

(2) 创建表后添加与删除唯一约束

alter table 表名 modify 字段名 数据类型 unique;
alter table 表名 drop index 字段名;

  • 添加唯一约束
alter table book4 modify bno varchar(6) unique;
  • 删除唯一约束
alter table book4 drop index bno;

注意:mysql中唯一约束限定的值可以有多个null


5.默认约束

默认约束可以指定某列的默认值,语法规则如下:

字段名 数据类型 default 默认值

例如:

create table book5
(
id int(8) default 01,
bname Varchar(70),
press Varchar(30),
)

执行后id便有了个默认值01。


6.属性自动增加

在MySQL中auto_increment的初始值为1,每增一条记录,字段值自动加 1,该字段必须为主键的一部分。语法规则如下:

字段名 数据类型 auto_incerment

(1) 在创建表时添加自增长约束

create table book6
(
    id int primary key auto_incerment,
    bname varchar(70),
    press varchar(30),
)

(2)在创建表之后添加与删除自增长约束

alter table 表名 modify id int auto_incerment; //添加
alter table 表名 modify id int; //删除

  • 添加自增长约束
alter table book6 modify id int auto_incerment;
  • 删除自增长约束
alter table book6 modify id int;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!