本人已参与「新人创作礼」活动,一起开启掘金创作之路。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
目录
今天阿文介绍的内容:
- 如何添加
外键? - 在创建完表后,如何
添加约束? - 在创建完表后,如何
删除约束?
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结构:
关联之后employee表的结构与manager表结构:
在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表的结构:
添加后student表的结构:
在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表的结构:
删除后student表的结构:
在SQL语句成功执行后,student表中主键被删除了,删除了name的非空约束,删除了number字段的唯一约束,删除score字段的默认值0。
小结
细心的小伙伴已经发现,在表中结构显示中默认值与非空约束是跟着字段名后面的,而主键和唯一约束是单独列在表的最后面的,因为主键只有一个所以删除时不需要加INDEX,而删除唯一约束时,不止一个字段有唯一约束,所以删除唯一约束时需加上INDEX指明是哪个字段删除唯一约束。删除非空约束即使用修改数据类型的SQL语句,不需要修改数据类型且不添加参数。删除默认值需指明修改哪个字段的默认值,所以需写上ALTER。
总结
- 添加外键的SQL语句
- 添加四种约束的SQL语句
大同小异,但逻辑清晰 - 删除四种约束的SQL语句
各不相同,但逻辑清晰
OK,今天阿文就介绍到这里,去躺了...