mysql的外键怎么使用
时间 : 2023-03-17 23:14:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

MySQL中,外键是一种用于连接两个或多个表格的约束。它可以确保引用表中的每个行数据都有对应的外键表中的数据,也称为参考完整性约束。

要使用外键,需要满足以下条件:

1. 表必须使用InnoDB存储引擎,因为MyISAM不支持外键。

2. 外键列必须定义为INDEX或PRIMARY KEY。

下面我们将逐步介绍如何使用外键。

一、创建外键

创建外键,需要在创建表时添加FOREIGN KEY关键字,后跟被引用表名称、被引用表中外键的名称和外键的名称。例如:

CREATE TABLE table1 (

id INT PRIMARY KEY,

name VARCHAR(50),

city VARCHAR(50),

zip_code VARCHAR(10),

country VARCHAR(50)

);

CREATE TABLE table2 (

id INT PRIMARY KEY,

order_date DATE,

total_amount DECIMAL(10, 2),

customer_id INT,

FOREIGN KEY (customer_id) REFERENCES table1(id)

);

上面的代码创建了两个表,一个是table1,包含id、name、city、zip_code和country五个列;另一个是table2,包含id、order_date、total_amount和customer_id四个列。在创建table2的过程中,我们使用FOREIGN KEY关键字定义了一个外键,它将customer_id列绑定到了table1中的id列。

二、插入数据

接下来,我们插入一些数据。首先向table1中插入一些记录:

INSERT INTO table1 (id, name, city, zip_code, country)

VALUES (1, 'John Smith', 'New York', '10001', 'USA'),

(2, 'Jane Doe', 'San Francisco', '94102', 'USA');

然后,向table2中插入一些记录:

INSERT INTO table2 (id, order_date, total_amount, customer_id)

VALUES (1, '2020-09-01', 100.00, 1),

(2, '2020-09-02', 200.00, 2);

在插入表2的记录时,我们需要确保customer_id列中的值在table1中的id列中是存在的。

三、更新和删除记录

使用外键的好处之一是,它会防止在引用表中删除或更新记录时发生错误。例如:

1. 禁止删除引用表中的记录,如果删除了引用表中的记录,将会引发错误:

DELETE FROM table1 WHERE id = 1;

报错信息:

Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails

2. 在更新引用表中的记录时,必须确保同步更新外键表:

UPDATE table1 SET id = 3 WHERE id = 2;

这将导致table2中对应的行也被更新:

SELECT * FROM table2;

输出:

+----+------------+--------------+-------------+

| id | order_date | total_amount | customer_id |

+----+------------+--------------+-------------+

| 1 | 2020-09-01 | 100.00 | 3 |

| 2 | 2020-09-02 | 200.00 | 2 |

+----+------------+--------------+-------------+

四、删除外键

要删除外键,必须使用ALTER TABLE语句。例如,要删除上面示例中的外键,可以使用以下命令:

ALTER TABLE table2 DROP FOREIGN KEY table2_customer_id_fk;

这将删除table2中名为table2_customer_id_fk的外键。注意,在某些版本的MySQL中,需要显式指定外键名称才能删除外键。

总之,外键是确保数据完整性的一种重要手段,并有助于避免数据的混乱或错误。使用外键时,需要小心谨慎,以确保数据和业务逻辑的正确性。

在 MySQL 中,外键指的是关系型数据库中用于指向另一张表的一列或一组列。外键可以用来保证数据完整性和一致性。使用外键可以在建表时就指定该表与其他表的关联关系,在数据插入和更新时就会进行检查,从而避免不一致的数据。下面详细介绍如何使用 MySQL 的外键。

## 创建外键

创建外键需要在建表语句中使用 FOREIGN KEY 关键字,语法如下:

CREATE TABLE table_name (

column1 datatype,

column2 datatype,

...,

CONSTRAINT fk_column

FOREIGN KEY (column_name)

REFERENCES parent_table (parent_column)

);

其中,`CONSTRAINT fk_column` 是可选的,用于定义外键的名称。`column_name` 是当前表中要定义为外键的列名,`parent_table` 是外键所引用的父表,`parent_column` 是父表中要引用的列名。

下面是一个例子,创建了一个名为 `orders` 的表和一个名为 `customers` 的表,其中 `orders.customer_id` 列是 `customers` 表的主键,用于实现两个表之间的关系:

CREATE TABLE customers (

id INT PRIMARY KEY,

name VARCHAR(255)

);

CREATE TABLE orders (

id INT PRIMARY KEY,

order_number INT,

customer_id INT,

CONSTRAINT fk_orders_customers

FOREIGN KEY (customer_id)

REFERENCES customers(id)

);

## 修改外键

可以使用 ALTER TABLE 语句来修改已有的外键,语法如下:

ALTER TABLE table_name

DROP FOREIGN KEY fk_name;

ALTER TABLE table_name

ADD CONSTRAINT fk_name

FOREIGN KEY (column_name)

REFERENCES parent_table (parent_column);

其中,`DROP FOREIGN KEY` 用于删除已有的外键,`ADD CONSTRAINT` 用于新增外键。`fk_name` 是外键约束的名称。外键的名称在创建表时可以指定,如果没有指定,则 MySQL 会自动生成一个名称。

下面是一个例子,修改了 `orders` 表的外键约束名称:

ALTER TABLE orders

DROP FOREIGN KEY fk_orders_customers;

ALTER TABLE orders

ADD CONSTRAINT fk_orders_customers

FOREIGN KEY (customer_id)

REFERENCES customers(id);

## 使用外键的注意事项

使用外键时需要注意以下几点:

1. 在 MySQL 中,对于 InnoDB 引擎的表,外键只能与索引一起使用。

2. 要想使用外键,引用表和被引用表都必须使用 InnoDB 引擎。

3. 如果要删除引用表中的记录,必须先删除其子表中所有关联的记录,否则删除操作将会失败。

4. 可以在多个列上定义外键约束,这时这些列的组合必须唯一,同样要在关联表上定义组合键。

5. 外键约束增加了写操作的开销,如果数据量很大,可以考虑是否需要使用外键。

6. 外键的使用需要设计合理的数据模型和数据约束,应根据具体的业务需求进行。

## 总结

使用外键可以有效保证 MySQL 数据库的数据完整性和一致性。在使用外键时需要注意 InnoDB 引擎和索引、删除操作、组合键等问题,需要设计合理的数据模型和数据约束,以实现最佳的效果。