【MySQL】创建表后增加各种约束

233 阅读4分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

目录

1C47D19D.jpg 今天阿文介绍的内容:

  • 如何添加外键
  • 在创建完表后,如何添加约束
  • 在创建完表后,如何删除约束

1.添加外键

在我们创建一些表后,有可能在后续操作需求时,需要去关联一些其他表,我们就可以通过MySQL中的添加字段语句去添加外键约束

1.1语法格式如下:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

参数说明

  • 外键名称是用来标识该外键所取的一个名字,在后续需删除外键时,就只需要用该标识来删除外键。
  • 外键字段名称为该表需要关联主表的字段名
  • 主表名称为被关联表的名称
  • 主列表名称为被关联字段的名称

例如将employee表的managerId字段关联manager表的id字段

语法格式如下:

ALTER TABLE employee ADD CONSTRAINT fk_employee_manager FOREIGN KEY (managerId) REFERENCES manager(id);

关联之前employee表的结构与manager结构:

image.png

image.png

关联之后employee表的结构与manager表结构:

image.png

image.png

在SQL语句成功执行后,可以看到在employee表(从表)结构中多出一行关于外键的信息,而manager(主表)的结构并没有变化。

2.添加约束

有时我们需要在已创建的表中字段添加各种约束,例如:主键唯一约束非空约束默认约束,接下来我们就来介绍如何添加这几种约束。

语法格式如下:

-- 建完表后为字段添加唯一约束
ALTER TABLE <表名> MODIFY 字段名 数据类型 UNIQUE;
-- 建完表后为字段添加非空约束
ALTER TABLE <表名> MODIFY 字段名 数据类型 NOT NULL;
-- 建完表后为字段添加主键
ALTER TABLE <表名> ADD PRIMARY KEY(字段名);
-- 建完表后为字段设置默认值
ALTER TABLE <表名> ALTER 字段名 SET DEFAULT 默认值;

现在阿文举一个例子来讲解一下如何设置默认值、添加唯一约束、添加主键和添加唯一约束。

例如在student表中,为id字段添加主键,为score字段设置默认值,为number字段添加唯一约束,为name字段添加非空约束

语法格式如下:

-- 添加主键
ALTER TABLE student ADD PRIMARY KEY(id);
-- 设置默认值
ALTER TABLE student ALTER score SET DEFAULT 0;
-- 添加唯一约束
ALTER TABLE student MODIFY number INT(11) UNIQUE;
-- 添加非空约束
ALTER TABLE student MODIFY name VARCHAR(20) NOT NULL;

添加前student表的结构:

image.png

添加后student表的结构:

image.png

在SQL语句成功执行后,student表的结构显示,成功为id字段设置为主键、为score字段设置了默认值0、为number字段添加了唯一约束、为name字段添加了非空约束

小结

唯一约束与非空约束都是作用在该字段所存储的值的约束,所以使用MODIFY去添加且数据类型不变,而添加默认值是设置SET一个数,所以不使用MODIFY。

3.删除约束

有时候在我们创建表时不小心将字段的约束设置错了,这时我们需要删除错误的约束。

3.1 语法格式如下:

-- 删除主键
ALTER TABLE <表名> DROP PRIMARY KEY;
-- 删除默认值
ALTER TABLE <表名> ALTER 字段名 DROP DEFAULT;
-- 删除唯一约束
ALTER TABLE <表名> DROP INDEX 字段名;
-- 删除非空约束
ALTER TABLE <表名> MODIFY 字段名 数据类型;

例如在student表中,将id字段的主键删除,删除name字段的非空约束,删除number字段的唯一约束,删除score字段默认值。

语法格式如下:

-- 删除id字段主键
ALTER TABLE student DROP PRIMARY KEY;
-- 删除name字段的非空约束
ALTER TABLE student MODIFY name VARCHAR(20);
-- 删除number字段的唯一约束
ALTER TABLE student DROP INDEX number;
-- 删除score字段默认值
ALTER TABLE student ALTER score DROP DEFAULT;

删除前student表的结构:

image.png

删除后student表的结构:

image.png

在SQL语句成功执行后,student表中主键被删除了,删除了name的非空约束,删除了number字段的唯一约束,删除score字段的默认值0。

小结

细心的小伙伴已经发现,在表中结构显示中默认值与非空约束是跟着字段名后面的,而主键和唯一约束是单独列在表的最后面的,因为主键只有一个所以删除时不需要加INDEX,而删除唯一约束时,不止一个字段有唯一约束,所以删除唯一约束时需加上INDEX指明是哪个字段删除唯一约束。删除非空约束即使用修改数据类型的SQL语句,不需要修改数据类型且不添加参数。删除默认值需指明修改哪个字段的默认值,所以需写上ALTER。


总结

  • 添加外键的SQL语句
  • 添加四种约束的SQL语句大同小异,但逻辑清晰
  • 删除四种约束的SQL语句各不相同,但逻辑清晰

OK,今天阿文就介绍到这里,去躺了...

1C46CE18.jpg