MySQL 如果出现 FOREIGN KEY 约束,在 MySQL 的父表和子表之间有什么关系?
在 MySQL 中,FOREIGN KEY 约束用于确保子表中的数据引用父表中的行。这种关系被称为外键关系,也叫做父子关系。父表中的每一行都必须与子表中的至少一行相关联,否则将无法在子表中添加新的行。
阅读更多:MySQL 教程
什么是 FOREIGN KEY 约束?
FOREIGN KEY 约束是一种数据库约束,用于确保子表中的数据引用父表中的行。它依赖于一种叫做外键的东西,外键是一个由子表中的一列组成的索引,它指向父表的主键。
例如,有一个父表 customers,它有一个主键 customer_id,和一个子表 orders,它有一个列 customer_id 作为外键。这意味着在 orders 表中的每一行都有一个 customer_id,该列中的值必须与 customers 表中的某个行中的 customer_id 相匹配。
下面是一个示例表结构:
CREATE TABLE customers (
customer_id INT(11) NOT NULL AUTO_INCREMENT,
customer_name VARCHAR(50) NOT NULL,
PRIMARY KEY (customer_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE orders (
order_id INT(11) NOT NULL AUTO_INCREMENT,
customer_id INT(11) NOT NULL,
order_date DATE NOT NULL,
PRIMARY KEY (order_id),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
在这个例子中,orders 表中的每个 customer_id 都与 customers 表中的一个 customer_id 相关联。这种关系确保了数据的完整性和一致性。
FOREIGN KEY 约束如何工作?
在 MySQL 中,外键关系是通过 FOREIGN KEY 约束来实现的。当您在创建子表时定义一个外键列时,可以使用 FOREIGN KEY 约束将该列链接到父表的主键列。这就意味着,在添加新行到子表中时,必须指定一个与父表一行相关的值。如果相关行不存在,则外键约束将不允许在子表中添加新行。
下面是一个向 orders 表中添加新行的示例:
INSERT INTO orders (customer_id, order_date) VALUES (1, '2021-01-01');
在这个例子中,我们向子表 orders 插入一条新记录,customer_id 的值为 1,order_date 的值为 “2021-01-01″。
如何在 MySQL 中创建 FOREIGN KEY 约束?
要在 MySQL 中创建 FOREIGN KEY 约束,您需要使用 CREATE TABLE 语句并指定 FOREIGN KEY 子句。下面是一个 CREATE TABLE 语句的示例:
CREATE TABLE orders (
order_id INT(11) NOT NULL AUTO_INCREMENT,
customer_id INT(11) NOT NULL,
order_date DATE NOT NULL,
PRIMARY KEY (order_id),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
在这个例子中,我们在 orders 表中创建了一个 FOREIGN KEY 约束,将 customer_id 列链接到 customers 表的 customer_id 主键列。如果在 orders 表中添加行时,customer_id 列的值不匹配 customers 表中的行,则将抛出错误。
如何使用 FOREIGN KEY 约束?
在 MySQL 中,您可以使用 FOREIGN KEY 约束来确保数据的完整性和一致性。当您在添加行时指定外键时,MySQL 将通过比较外键列的值和父表中的主键列的值来确定它们之间的关系。如果没有匹配行,MySQL 将抛出一个错误并拒绝添加该行,从而保持数据的完整性。如果匹配行存在,则 MySQL 将添加该行并将外键列的值设置为匹配行的主键值,从而保持数据的一致性。
在修改或删除父表中的行时,MySQL 还可以使用 FOREIGN KEY 约束来确保数据的一致性。如果您尝试删除一个具有子表行的父表行,则 MySQL 将拒绝该操作并抛出一个错误,这是因为在子表中仍然存在指向该行的外键。类似地,如果您尝试修改父表中的主键值,则必须同时更新子表中的相应外键列的值,以确保数据的一致性。
如何查找 FOREIGN KEY 约束?
在 MySQL 中,您可以使用 SHOW CREATE TABLE 语句来查找给定表的 FOREIGN KEY 约束。该语句将返回一个 CREATE TABLE 语句,其中包含所有表的定义和约束。这是一个示例:
SHOW CREATE TABLE orders;
输出:
CREATE TABLE `orders` (
`order_id` int(11) NOT NULL AUTO_INCREMENT,
`customer_id` int(11) NOT NULL,
`order_date` date NOT NULL,
PRIMARY KEY (`order_id`),
KEY `customer_id` (`customer_id`),
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
在这个例子中,我们可以看到 KEY 和 CONSTRAINT 子句,它们定义了外键列和 FOREIGN KEY 约束。
结论
在 MySQL 中,FOREIGN KEY 约束用于确保子表中的数据引用父表中的行。它能够保持数据的完整性和一致性,并且在修改和删除父表行时起着重要作用。通过理解 FOREIGN KEY 约束的工作原理,您可以更好地设计和维护 MySQL 数据库,并确保数据的完整性和一致性。
极客笔记