mysql有外键怎么设置
时间 : 2023-03-15 08:13:01声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在 MySQL 中,外键是用来建立两个表之间的关系,它使一个表可以引用另一个表中的行数据。在建立外键时,需要明确指定父表和子表,然后定义在子表中与父表关联的列(也称作“外键列”或“对应列”)。在此基础上,就可以从子表中引用父表中相应行的数据。

在 MySQL 中,外键的设置依赖于表的存储引擎。下面我们将就不同存储引擎下的外键设置方法进行介绍。

1. InnoDB 存储引擎

InnoDB 存储引擎是 MySQL 中支持外键关系的唯一引擎。如果要在InnoDB 表中定义外键,需要使用 FOREIGN KEY 关键字,示例如下:

```sql

CREATE TABLE child_tbl

(

id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

parent_id INT(11),

FOREIGN KEY (parent_id) REFERENCES parent_tbl(id)

)

在这个示例中,我们创建了一个名为 `child_tbl` 的表,其中包含了一个名为 `parent_id` 的列,该列关联着父表`parent_tbl` 的 `id` 列。在外键约束条件之后,可以添加一些关键字来指定外键的行为,如在更新或删除父表中记录时,对应子表中的记录应如何处理。以下的代码演示了如何在建立外键的时候给出约束条件:

```sql

CREATE TABLE child_tbl

(

id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

parent_id INT(11),

FOREIGN KEY (parent_id)

REFERENCES parent_tbl(id)

ON DELETE CASCADE

ON UPDATE CASCADE

)

在这个示例中,我们指定了关键字 `ON DELETE CASCADE` 和 `ON UPDATE CASCADE`。这意味着如果从父表中删除记录,相应的子表中的记录将被自动删除; 同时,如果父表中的记录被更新,那么与该记录相应的子表中的记录也将被更新。

2. MyISAM 存储引擎

在 MySQL 的 MyISAM 存储引擎中,不支持外键约束。因此,如果需要在 MyISAM 表中启用外键功能,需要手动编写 SQL 代码来模拟外键的约束。

下面是一个在 MyISAM 表中模拟外键功能的示例:

```sql

CREATE TABLE child_tbl

(

id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

parent_id INT(11),

INDEX (parent_id),

FOREIGN KEY (parent_id) REFERENCES parent_tbl(id)

)

在这个示例中,我们创建了一个索引,以实现在子表中对父表的引用。注意,这种方法并不能自动在父表更新或删除记录时更新删除子表中的记录。

总之,MySQL 中的外键约束是非常有用的功能,它可确保数据的完整性和一致性。在设置外键之前,必须先确保表的存储引擎支持外键约束。

在 MySQL 中,使用外键可以实现两个表之间的关系。外键用于确保一个表中的某个数据与另一个表中的数据保持一致。要设置外键,必须满足以下条件:

1. 两个表之间必须有关联的字段。

2. 关联的字段必须是主键或唯一键。

3. 关联的字段必须是同一个数据类型。

设置外键的语法如下:

ALTER TABLE 表名

ADD CONSTRAINT 外键名称

FOREIGN KEY(关联的字段)

REFERENCES 关联的表(关联的字段);

例如,我们有两个表,一个是订单表(order),另一个是客户表(customer),要在订单表中设置一个外键关联到客户表的客户 ID 字段。

客户表的结构如下:

CREATE TABLE IF NOT EXISTS customer (

id INT(11) NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

email VARCHAR(50) NOT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

订单表的结构如下:

CREATE TABLE IF NOT EXISTS order (

id INT(11) NOT NULL AUTO_INCREMENT,

customer_id INT(11) NOT NULL,

amount DECIMAL(10,2) NOT NULL,

PRIMARY KEY (id),

FOREIGN KEY (customer_id) REFERENCES customer(id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在订单表中,customer_id 字段与客户表的 id 字段关联,因此,我们在订单表中使用 FOREIGN KEY 语句来创建了一个外键约束,它会确保在订单表中每个客户 ID 都对应客户表中的一个存在的 ID。

当创建外键时,还可以指定 ON DELETE 和 ON UPDATE 规则,以定义当关联的表中的数据被修改或删除时执行的操作。例如:

FOREIGN KEY (customer_id) REFERENCES customer(id) ON DELETE CASCADE ON UPDATE CASCADE

这样,当客户表中的数据被删除时,与之关联的订单表中的数据也会被自动删除。

总之,在处理大型数据库时,外键是一种非常有用的工具,可以确保数据的完整性和一致性。