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

在 MySQL 中,我们可以通过定义外键来建立与其他表之间的关系。建立外键可以使数据库更加规范化和易于维护。在建立外键时,我们需要注意以下几点:

1. 父表和子表的列类型必须一致。

2. 父表和子表的列名必须一致。

3. 父表和子表的列值必须匹配,即子表的列值必须存在于父表中。

下面是一个示例,展示了如何在 MySQL 中创建带有外键的表。

创建父表:

CREATE TABLE `department` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

`location` varchar(50) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建子表:

CREATE TABLE `employee` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

`department_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

CONSTRAINT `fk_department_id` FOREIGN KEY (`department_id`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在子表中,我们定义了一个名为 `fk_department_id` 的外键,它关联了 `department_id` 列和 `department` 表的 `id` 列。

在这个例子中,我们还为外键定义了两个约束条件:`ON DELETE CASCADE` 和 `ON UPDATE CASCADE`。这表示当我们删除父表中的行时,对应的子表行也会被删除,同样,如果我们更新了父表的值,子表的值也会被相应地更新。

需要注意的是,在 MySQL 中,我们可以使用 `ALTER TABLE` 语句来添加、修改或删除外键。另外,我们还需要确保在建立表时,父表必须先于子表创建,否则会出现错误。

总之,在设计 MySQL 数据库时,建立外键可以增加数据的完整性和一致性,避免数据冗余和不一致的问题。当然,在实际应用中,我们还需要灵活运用外键,根据需要进行调整和优化。

在MySQL中,建立外键有两种方式:一种是使用SQL语句手动创建外键,另一种是使用图形化工具在界面上创建外键。下面我将详细介绍如何手动创建外键。

首先,我们需要创建两个表,一个是主表(parent),一个是子表(child)。主表和子表之间的关系可以是一对多或一对一,根据实际情况决定。

创建主表和子表的语句如下:

-- 创建主表

CREATE TABLE parent (

id INT NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

PRIMARY KEY (id)

);

-- 创建子表

CREATE TABLE child (

id INT NOT NULL AUTO_INCREMENT,

name VARCHAR(50) NOT NULL,

parent_id INT NOT NULL,

PRIMARY KEY (id),

INDEX (parent_id),

FOREIGN KEY (parent_id) REFERENCES parent (id)

);

关于上述代码的细节说明如下:

- parent表有一个自增的id字段和一个name字段,id字段是主键。

- child表有一个自增的id字段、一个name字段和一个parent_id字段,id字段是主键,parent_id字段是一个外键,它引用了parent表的id字段。

- parent_id字段上使用了FOREIGN KEY关键字,它表示此字段是一个外键。REFERENCES关键字指定了外键引用的主表和主表中的列,这里是parent表的id字段。

需要注意的是,为了保证外键的正确性,在使用FOREIGN KEY设置外键时,必须先为外键所在的列创建一个索引(在上述代码中使用INDEX (parent_id)创建了parent_id列的索引)。

这样,当我们在child表中插入数据时,如果指定的parent_id在parent表中不存在,将会发生错误。而且,如果我们尝试删除parent表中的一个记录,如果该记录被child表中的一条记录引用了,那么MySQL不允许删除该记录,除非我们使用CASCADE选项指定级联删除。

创建外键需要考虑外键的对应关系、外键所在的表、外键源列和参照列等因素。如果我们的设计中存在多个外键,那么就需要对每个外键进行单独的设置,确保每个关系正确的建立,以便数据的正确性和完整性。