好的,我有两张桌子。他们都有钥匙。我有另一个表引用两个键。如果我添加到第三个中,如果前两个表中不存在任何一个键,它将不会将该元组插入第三个表中,那么如何创建约束。我在phpMyAdmin中插入。谢谢。
答案 0 :(得分:1)
修改强>:
很抱歉误读了您的问题。 Mysql仅支持某些引擎的约束。 InnoDB是我所知道并且通常使用的,但其他人可能真的不确定。因此,对于inno DB,您需要以下架构:
CREATE TABLE my_table_a (
`id` INTEGER UNSIGNED NOT NULL auto_increment,
# your other column definitions
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE my_table_b (
`id` INTEGER UNSIGNED NOT NULL auto_increment,
# your other column definitions
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE my_table_a_b (
`id` INTEGER UNSIGNED NOT NULL auto_increment,
`table_a_id` INTEGER UNSIGNED NOT NULL,
`table_b_id` INTEGER UNSIGNED NOT NULL
PRIMARY KEY (`id`),
KEY (`table_a_id`),
KEY (`table_b_id`),
CONSTRAINT `ab_FK_a`
FOREIGN KEY (`table_a_id`)
REFERENCES `my_table_a` (`id`),
CONSTRAINT `ab_FK_b`
FOREIGN KEY (`table_b_id`)
REFERENCES `my_table_b` (`id`)
) ENGINE=InnoDB;
SET FOREIGN_KEY_CHECKS=0;
# Your INSERTS
SET FOREIGN_KEY_CHECKS=1;
这将禁用sql语句反映的FK检查,直到执行插入后。如果我没记错的话,它会在重新打开后检查按键。因此,您可能希望使用事务,以便在出现错误并且密钥最终不匹配时可以回滚。否则你可能有部分数据从来没有乐趣: - )
答案 1 :(得分:0)
我不知道约束,但您可以使用此插入查询:
INSERT INTO TAB3(TAB3_key1,TAB3_key2)SELECT val1,val2 FROM TAB1 JOIN TAB2 ON EXISTS(SELECT * FROM TAB1 JOIN TAB2 ON TAB1_key = val1 AND TAB2_key = val2)LIMIT 1;
其中val1,val2 - 要插入的值。