Nel mio script creare per la mia banca dati creare uno script cercando qualcosa di simile:MySQL: Aggiungi vincolo se non esiste
CREATE TABLE IF NOT EXISTS `rabbits`
(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL,
`main_page_id` INT UNSIGNED COMMENT 'What page is the main one',
PRIMARY KEY (`id`),
KEY `main_page_id` (`main_page_id`)
)
ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `rabbit_pages`
(
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`rabbit_id` INT UNSIGNED NOT NULL,
`title` VARCHAR(255) NOT NULL,
`content` TEXT NOT NULL,
PRIMARY KEY (`id`),
KEY `rabbit_id` (`rabbit_id`),
CONSTRAINT `fk_rabbits_pages` FOREIGN KEY (`rabbit_id`) REFERENCES `rabbits` (`id`)
)
ENGINE=InnoDB;
ALTER TABLE `rabbits`
ADD CONSTRAINT `fk_rabbits_main_page` FOREIGN KEY (`main_page_id`) REFERENCES `rabbit_pages` (`id`);
Questo funziona bene la prima volta, ma se lo faccio funzionare di nuovo fallisce sull'ultima riga lì con "Duplica chiave su scrittura o aggiornamento".
C'è un modo per fare una specie di ADD CONSTRAINT IF NOT EXISTS
o qualcosa del genere? Come posso fare con la query CREATE TABLE
?
Hm, ho pensato che dovevo creare tabella A, create table B con B-> A e quindi aggiungere A-> B perché il vincolo fallirebbe se una tabella non esiste ancora ... strano ... lo proveremo al più presto: p – Svish
@Svish: Lo farebbe, a meno che tu non abbia "SET FOREIGN_KEY_CHECKS = 0;" in alto. Questo è il trucco. Stiamo quindi riportando a '1' alla fine. –
Fantastico. Funziona completamente: D – Svish