是的,可以使用事务来创建相互引用的两个表,而不需要使用ALTER。以下是一个示例解决方案:
-- 创建表A
CREATE TABLE tableA (
id INT PRIMARY KEY,
name VARCHAR(50),
tableB_id INT
);
-- 创建表B
CREATE TABLE tableB (
id INT PRIMARY KEY,
name VARCHAR(50),
tableA_id INT
);
-- 使用事务来创建表并添加外键约束
BEGIN TRANSACTION;
-- 创建表A
CREATE TABLE tableA_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
tableB_id INT,
FOREIGN KEY (tableB_id) REFERENCES tableB(id)
);
-- 创建表B
CREATE TABLE tableB_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
tableA_id INT,
FOREIGN KEY (tableA_id) REFERENCES tableA_temp(id)
);
-- 将数据从临时表移动到原始表
INSERT INTO tableA SELECT * FROM tableA_temp;
INSERT INTO tableB SELECT * FROM tableB_temp;
-- 删除临时表
DROP TABLE tableA_temp;
DROP TABLE tableB_temp;
COMMIT;
这个解决方案使用事务来创建临时表,然后将数据从临时表移动到原始表,最后删除临时表。这样可以绕过ALTER命令,同时创建具有相互引用的两个表。