【问题标题】:Add foreign key if exists如果存在,添加外键
【发布时间】:2016-11-10 16:53:18
【问题描述】:

我想从 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(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);

ALTER TABLE `attributes` ADD  CONSTRAINT `Const` FOREIGN KEY IF NOT EXISTS (`toid`) REFERENCES `pes`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT

【问题讨论】:

标签: mysql sql innodb


【解决方案1】:

您的两个表示例具有相同的名称,因此我假设您的第二个表名称是“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 Foreign Key Not Exist Then Add Foreign Key Constraint(Or Drop a Foreign Key Constraint If Exist) without using Name?

【讨论】:

  • 对不起,我使用了第一个表的错误代码。已编辑。
猜你喜欢
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 2021-10-23
相关资源
最近更新 更多