Mysql 添加外键(如果存在)
我想从表1中创建一个外键Mysql 添加外键(如果存在),mysql,sql,innodb,Mysql,Sql,Innodb,我想从表1中创建一个外键 CREATE TABLE IF NOT EXISTS PEs (id INT(20) AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Message varchar(30), CoordsX double(9,6) SIGNED, CoordsY double(9,6) SIGNED, CoordsZ double(9,6) SIGNED, Status smallint(1) DEFAULT 1, world varchar
CREATE TABLE IF NOT EXISTS PEs (id INT(20) AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Message varchar(30), CoordsX double(9,6) SIGNED, CoordsY double(9,6) SIGNED, CoordsZ double(9,6) SIGNED, Status smallint(1) DEFAULT 1, world varchar(20))
第二桌
CREATE TABLE IF NOT EXISTS`rh_pe`.`attributes` ( `toid` INT(20) NOT NULL , `Kommentar` VARCHAR(60) NOT NULL , `Aktion` varchar(10) NOT NULL , `Person1` INT NOT NULL , `Person2` INT ) ENGINE = InnoDB;
外键应如下所示:
ALTER TABLE `attributes` ADD CONSTRAINT `Const` FOREIGN KEY (`toid`) REFERENCES `pes`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
我试过了
IF NOT EXISTS(ALTER TABLE `attributes` ADD CONSTRAINT `Const` FOREIGN KEY (`toid`) REFERENCES `pes`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT);
及
您的两个表示例都有相同的名称,因此我建议您的第二个表名称是“pes”,正如您在约束示例中提到的。这一条应该有效:
IF NOT EXISTS (SELECT * FROM sys.objects o WHERE o.object_id = object_id(N'`rh_pe`.`Const`') AND OBJECTPROPERTY(o.object_id, N'IsForeignKey') = 1)
BEGIN
ALTER TABLE `rh_pe`.`attributes` ADD CONSTRAINT `Const` FOREIGN KEY (`toid`) REFERENCES `rh_pe`.`pes`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
END
我没有使用“if(not)exists”子句,但是您可以在这里找到一个类似的问题:我认为在普通SQL中没有这样做的方法。您需要使用一个存储过程来查询
信息\u模式。引用\u约束
。在我遇到拼写错误之前,请查看@MatteoTassinari的可能重复项。谢谢。对不起,我用错了第一张桌子的代码。它是经过编辑的。我使用了从评论到我的问题的链接中的代码,所以我不知道你的代码是否有效
IF NOT EXISTS (SELECT * FROM sys.objects o WHERE o.object_id = object_id(N'`rh_pe`.`Const`') AND OBJECTPROPERTY(o.object_id, N'IsForeignKey') = 1)
BEGIN
ALTER TABLE `rh_pe`.`attributes` ADD CONSTRAINT `Const` FOREIGN KEY (`toid`) REFERENCES `rh_pe`.`pes`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
END