mysql建表怎么写外键
时间 : 2023-03-21 21:35:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在MySQL中,外键约束用于维护表与表之间的关系。通常情况下,外键要求父表中的行必须与子表中的行对应,否则操作将无法执行。本文将介绍如何在MySQL中建表时定义外键。

在MySQL中,我们可以使用以下语法来为一个列添加外键约束:

CONSTRAINT foreign_key_name

FOREIGN KEY (column_name) REFERENCES parent_table (parent_column_name)

其中,`foreign_key_name`是外键的名称,`column_name`是当前表中的列名,`parent_table`是父表名,`parent_column_name`是父表中的列名。

下面是一个示例,展示如何在MySQL中创建一个包含外键约束的表:

CREATE TABLE orders (

id INT PRIMARY KEY,

customer_id INT,

order_date DATE,

CONSTRAINT fk_customer_id

FOREIGN KEY (customer_id) REFERENCES customers (id)

);

这个表包含三个列:`id`、`customer_id`和`order_date`。其中,`id`是主键,`customer_id`和`order_date`是普通的列。我们使用`CONSTRAINT`关键字定义了名为`fk_customer_id`的外键约束,将`customer_id`列与`customers`表中的`id`列相连。

值得一提的是,要成功创建外键,我们需要保证父表中的列都有相应的索引。在上面的例子中,`customers`表中的`id`列应该建立索引。

在实际应用中,我们可以使用多个外键约束来创建复杂的数据结构。例如,下面的示例演示了如何在订单表和订单明细表之间建立双向的外键约束:

CREATE TABLE orders (

id INT PRIMARY KEY,

customer_id INT,

order_date DATE,

CONSTRAINT fk_customer_id

FOREIGN KEY (customer_id) REFERENCES customers (id)

);

CREATE TABLE order_items (

id INT PRIMARY KEY,

order_id INT,

product_id INT,

quantity INT,

CONSTRAINT fk_order_id

FOREIGN KEY (order_id) REFERENCES orders (id),

CONSTRAINT fk_product_id

FOREIGN KEY (product_id) REFERENCES products (id)

);

在这个例子中,`orders`表和`order_items`表之间互相引用了对方的主键,建立了双向的外键约束。

总之,为了在MySQL中创建外键约束,我们需要使用`CONSTRAINT`关键字,并使用`FOREIGN KEY`声明外键的列和引用表的列。如何正确地使用外键约束将使数据库更加稳定和可靠。

在 MySQL 数据库中,可以通过在表格之间建立外键关系来实现数据的关联和参照完整性。外键是一种约束,它将一个表中的某个字段与另一个表中的主键进行关联,以确保数据的完整性和有效性。下面介绍如何在 MySQL 数据库中创建外键。

1. 创建父表和子表

外键通常是在两个表之间建立的。我们首先需要创建一个父表和一个子表,并在其中定义其字段和数据类型。例如,我们要创建一个学生表和一个班级表,其中学生表是子表、班级表是父表,在学生表中建立外键参照班级表的主键。

CREATE TABLE class (

class_id INT PRIMARY KEY,

class_name VARCHAR(20)

);

CREATE TABLE student (

student_id INT PRIMARY KEY,

student_name VARCHAR(20),

class_id INT,

CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class(class_id)

);

2. 添加外键

在创建子表时,可以使用 FOREIGN KEY 语句指定外键。在上面的例子中,我们使用了以下语句来创建外键:

CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES class(class_id)

其中,“fk_class”为外键的名称,用于标识外键约束;“class_id”为子表中的外键字段,它将参照父表中的相应主键;“REFERENCES class(class_id)”表示外键参照约束,它指定了父表和父表中的主键。

3. 测试外键

在建立外键约束之前,我们需要确保父表中的主键值已经存在。否则,如果我们尝试将子表中的外键字段设置为父表中不存在的值,则会报错。例如,如果我们尝试在学生表中插入一条记录,将 class_id 值设置为“2”,但在 class 表中没有 id 为“2”的记录,则会出现以下错误:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

在测试外键时,我们还需要了解外键的删除规则和更新规则。默认情况下,MySQL 会将外键设置为 ON DELETE NO ACTION 和 ON UPDATE NO ACTION。也就是说,如果父表中的主键被删除或更改,则子表中的外键字段将被设置为 NULL,而不是引发错误。但是,我们也可以通过设置外键的删除和更新规则来更改此行为。

CREATE TABLE student (

student_id INT PRIMARY KEY,

student_name VARCHAR(20),

class_id INT,

CONSTRAINT fk_class FOREIGN KEY (class_id)

REFERENCES class(class_id)

ON UPDATE CASCADE

ON DELETE SET NULL

);

在上面的示例中,我们将外键的 ON UPDATE 规则设置为 CASCADE,当父表中的主键被更新时,子表中的外键值也将被更新。我们还将 ON DELETE 规则设置为 SET NULL,这意味着如果父表中的相关记录被删除,则子表中的外键字段将被设置为 NULL。