我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中设置外键约束的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中设置外键约束的方法

这篇文章将为大家详细讲解有关mysql中设置外键约束的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

mysql中设置外键约束的方法:可以通过FOREIGN KEY关键字来指定外键,语法“ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。

(1) 外键的使用:

外键的作用,主要有两个:
   一个是让数据库自己通过外键来保证数据的完整性和一致性
   一个就是能够增加ER图的可读性
   有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦
其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.
   例如:
   有一个基础数据表,用来记录商品的所有信息。其他表都保存商品ID。查询时需要连表来查询商品的名称。单据1的商品表中有商品ID字段,单据2的商品表中也有商品ID字段。如果不使用外键的话,当单据1,2都使用了商品ID=3的商品时,如果删除商品表中ID=3的对应记录后,再查看单据1,2的时候就会查不到商品的名称。
  当表很少的时候,有人认为可以在程序实现的时候来通过写脚本来保证数据的完整性和一致性。也就是在删除商品的操作的时候去检测单据1,2中是否已经使用了商品ID为3的商品。但是当你写完脚本之后系统有增加了一个单据3 ,他也保存商品ID找个字段。如果不用外键,你还是会出现查不到商品名称的情况。你总不能每增加一个使用商品ID的字段的单据时就回去修改你检测商品是否被使用的脚本吧,同时,引入外键会使速度和性能下降。

(2) 添加外键的格式:
ALTER TABLE yourtablename
   ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)
   REFERENCES tbl_name (index_col_name, ...)
   [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
   [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
说明:
on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:
CASCADE:
外键表中外键字段值会被更新,或所在的列会被删除.
RESTRICT:
RESTRICT也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.
set null:
被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.
而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

外键定义服从下列情况:(前提条件)
1)
所有tables必须是InnoDB型,它们不能是临时表.因为在MySQL中只有InnoDB类型的表才支持外键.
2)
所有要建立外键的字段必须建立索引.
3)
对于非InnoDB表,FOREIGN KEY子句会被忽略掉。
注意:
创建外键时,定义外键名时,不能加引号.
如: constraint 'fk_1' 或 constraint "fk_1"是错误的
(3) 查看外键:
SHOW CREATE TABLE ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.
删除外键:
alter table drop foreign key '外键名'.
注意:
只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除.
若不定义,则可以:
先输入:alter table drop foreign key -->会提示出错.此时出错信息中,会显示foreign key的系统默认外键名.--->
用它去删除外键.

(4) 举例

实例一:
4.1
CREATE TABLE parent(id INT NOT NULL,
                   PRIMARY KEY (id)
) TYPE=INNODB;                      -- type=innodb 相当于 engine=innodb
CREATE TABLE child(id INT, parent_id INT,
                  INDEX par_ind (parent_id),
                  FOREIGN KEY (parent_id) REFERENCES parent(id)
                    ON DELETE CASCADE
) TYPE=INNODB;
向parent插入数据后,向child插入数据,插入时,child中的parent_id的值只能是parent中有的数据,否则插入不成功;
删除parent记录时,child中的相应记录也会被删除;-->因为: on delete cascade
更新parent记录时,不给更新;-->因为没定义,默认采用restrict.
4.2
若child如下:
mysql>
create table child(id int not null primary key auto_increment,parent_id int,
index par_ind (parent_id),
constraint fk_1 foreign key (parent_id) references
parent(id) on update cascade on delete restrict)
type=innodb;
用上面的:
1).
则可以更新parent记录时,child中的相应记录也会被更新;-->因为: on update cascade
2).
不能是子表操作,影响父表.只能是父表影响子表.
3).
删除外键:
alter table child drop foreign key fk_1;
添加外键:
alter table child add constraint fk_1 foreign key (parent_id) references
parent(id) on update restrict on delete set null;

(5) 多个外键存在:

product_order表对其它两个表有外键。
一个外键引用一个product表中的双列索引。另一个引用在customer表中的单行索引:
CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
                     price DECIMAL,
                     PRIMARY KEY(category, id)) TYPE=INNODB;
CREATE TABLE customer (id INT NOT NULL,
                     PRIMARY KEY (id)) TYPE=INNODB;

CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
                     product_category INT NOT NULL,
                     product_id INT NOT NULL,
                     customer_id INT NOT NULL,
                     PRIMARY KEY(no),
                     -- 双外键
                     INDEX (product_category, product_id),
                     FOREIGN KEY (product_category, product_id)
                       REFERENCES product(category, id)
                       ON UPDATE CASCADE ON DELETE RESTRICT,
                     -- 单外键
                     INDEX (customer_id),
                     FOREIGN KEY (customer_id)

                      REFERENCES customer(id)) TYPE=INNODB;

(6) 说明:

1.若不声明on update/delete,则默认是采用restrict方式.
2.对于外键约束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.

关于mysql中设置外键约束的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql中设置外键约束的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL主键约束和外键约束怎么设置

这篇“MySQL主键约束和外键约束怎么设置”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL主键约束和外键约束怎么设置
2023-03-13

mysql主键约束的设置方法

这篇文章主要介绍了mysql主键约束的设置方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、说明在定义完列之后直接使用 UNIQUE关键字指定唯一约束。UNIQUE 和
2023-06-15

mysql外键约束怎么设置

要设置MySQL中的外键约束,您需要按照以下步骤进行操作:1. 在创建表时,使用FOREIGN KEY关键字来定义外键约束。语法如下:CREATE TABLE 表名 ( 列1 数据类型, 列2 数据类型, ... F
2023-10-21

sqlserver设置外键约束的方法是什么

在SQL Server中设置外键约束的方法是在创建表时使用FOREIGN KEY关键字指定外键列。例如:CREATE TABLE 表名 (列名 数据类型,外键列名 数据类型,FOREIGN KEY (外键列名) REFERENCES 另一
sqlserver设置外键约束的方法是什么
2024-04-20

sql怎么设置外键约束

在 SQL 中设置外键约束可以通过以下步骤:1、创建表时指定外键约束:在创建表的时候,可以使用 FOREIGN KEY 关键字来指定外键约束。例如:CREATE TABLE Orders (OrderID int PRIMARY KEY
sql怎么设置外键约束
2024-03-13

sqlserver外键约束如何设置

在 SQL Server 中,可以通过以下方式设置外键约束:在创建表时,使用 FOREIGN KEY 关键字指定外键约束。例如:CREATE TABLE Orders (OrderID int PRIMARY KEY,CustomerID
sqlserver外键约束如何设置
2024-04-20

navicat怎么设置外键约束

要在Navicat中设置外键约束,可以按照以下步骤进行操作:1. 打开Navicat并连接到数据库。2. 在数据库树中选择表,然后右键单击并选择“设计表”选项。3. 在“设计表”对话框中,选择要添加外键约束的列。4. 在右侧属性面板中,找到
2023-08-30

MySQL外键约束设置失败如何解决

在MySQL中,如果外键约束设置失败,可能有以下几种原因和解决方法:数据类型不匹配:请确保外键字段和参考字段的数据类型一致。参考表不存在:请确保参考表存在并且已经创建。参考字段不存在:请确保参考字段存在于参考表中,并且命名正确。外键字段值与
2023-10-24

mysql禁用外键约束的方法是什么

在MySQL中,可以通过以下方法禁用外键约束:使用ALTER TABLE语句禁用外键约束:ALTER TABLE table_name DISABLE KEYS;这将禁用指定表的所有外键约束。使用SET FOREIGN_KEY_CHEC
2023-10-26

mysql删除外键约束的方法是什么

要删除MySQL中的外键约束,可以使用ALTER TABLE语句,并使用DROP FOREIGN KEY子句,具体步骤如下:首先,使用DESC命令查询表结构,找到外键约束的名称。DESC table_name;然后,使用ALTER TABL
mysql删除外键约束的方法是什么
2024-04-09

获取MySQL中的外键约束列表

假设我们有一个包含多个表的数据库“business”。如果您只想显示外键约束,请使用以下查询 -mysql> select *−> from information_schema.referential_constraints&
2023-10-22

mysql中外键约束怎么创建

在 mysql 中创建外键约束可强制子表记录关联主表记录,保障数据完整性。具体步骤包括:1. 指定子表的外键列;2. 引用主表的唯一索引列;3. 可设置级联删除或更新操作(可选)。MySQL 中创建外键约束外键约束是一种数据库约束,用于确
mysql中外键约束怎么创建
2024-05-01

编程热搜

目录