2016-11-10 7 views
-1

Я хочу, чтобы создать внешний ключ из 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 
+0

Я не думаю, что есть способ сделайте это в обычном SQL. Вам нужно будет использовать хранимую процедуру, которая запрашивает 'INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS'. См. Http://dev.mysql.com/doc/refman/5.7/en/referential-constraints-table.html – Barmar

+1

Возможный дубликат [MySQL: Добавить ограничение, если оно не существует] (http://stackoverflow.com/questions/ 3919226/mysql-add-constraint-if-not-exists) –

+0

@MatteoTassinari Хорошо, в моей попытке, прежде чем у меня возникла орфографическая ошибка. Благодарю. – 12Hannibal12

ответ

0

Оба ваших примеров таблицы имеют такое же имя, так что я suposed, что ваше второе имя таблицы «ПЭС», как вы говорите в ваших примерах ограничений. Это один должен работать:

Я не использовал «если (не) существует» clausule для этого, но вы можете найти аналогичный вопрос здесь: If Foreign Key Not Exist Then Add Foreign Key Constraint(Or Drop a Foreign Key Constraint If Exist) without using Name?

+0

Извините, я использовал неправильный код первой таблицы. Он редактируется. – 12Hannibal12

+0

NP, это сработало ??? –

+0

Я использовал код в ссылке из комментария к моему вопросу, поэтому я не знаю, работает ли ваша работа – 12Hannibal12