MySQL InnoDB foreign key between different databases
MySQL数据库是应用广泛的关系型数据库管理系统,常常会出现需要在不同的数据库之间建立外键关系的情况。本文将会介绍如何在MySQL的InnoDB引擎下建立不同数据库之间的外键关系,并附上详细的操作示例。
阅读更多:MySQL 教程
InnoDB引擎下不同数据库之间的外键关系
在MySQL数据库的InnoDB引擎下,外键的建立是通过约束(constraint)实现的。在同一个数据库中建立外键可以通过如下语句实现:
ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (列名称) REFERENCES 关联表名称(关联列名称);
如果需要在不同的数据库之间建立外键,需要在关联表名称前面加上数据库名称和”.”,例如:
ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (列名称) REFERENCES 数据库名称.关联表名称(关联列名称);
需要注意的是,在建立外键关系之前,必须保证两个数据库都存在且都是InnoDB引擎。此外,建立外键关系的表格也必须拥有InnoDB引擎,并且列集必须匹配。
操作示例
假设我们有两个数据库db1和db2,它们都是InnoDB引擎。我们需要在db1的表格t1中建立一个指向db2表格t2的外键关系。操作步骤如下:
- 创建数据库db1和db2
CREATE DATABASE IF NOT EXISTS db1;
CREATE DATABASE IF NOT EXISTS db2;
- 创建表格t1和t2
USE db1;
CREATE TABLE IF NOT EXISTS t1 (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(50),
t2_id INT,
CONSTRAINT fk_t2 FOREIGN KEY (t2_id) REFERENCES db2.t2(id)
);
USE db2;
CREATE TABLE IF NOT EXISTS t2 (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
data VARCHAR(50)
);
- 插入数据
USE db2;
INSERT INTO t2 (data) VALUES ("Hello World!");
USE db1;
INSERT INTO t1 (data, t2_id) VALUES ("This is a test", 1);
- 查询结果
SELECT t1.data, t2.data FROM db1.t1 JOIN db2.t2 ON t1.t2_id = t2.id;
结果应该如下:
+----------------+--------------+
| data | data |
+----------------+--------------+
| This is a test | Hello World! |
+----------------+--------------+
总结
通过本文的操作示例,我们了解到如何在MySQL的InnoDB引擎下建立不同数据库之间的外键关系。确保数据库都采用了InnoDB引擎,并通过约束(constraint)实现关联关系,可以使数据库的设计更为合理化和规范化。