2011-01-02 3 views
2

Quel est le problème avec l'ajout clé étrangère ici:mysql problème clé étrangère

mysql> create table notes ( 
    id int (11) NOT NULL auto_increment PRIMARY KEY, 
    note_type_id smallint(5) NOT NULL, 
    data TEXT NOT NULL, 
    created_date datetime NOT NULL, 
    modified_date timestamp NOT NULL on update now()) 
    Engine=InnoDB; 
Query OK, 0 rows affected (0.08 sec) 

mysql> create table notetypes ( 
     id smallint (5) NOT NULL auto_increment PRIMARY KEY, 
     type varchar(255) NOT NULL UNIQUE) 
     Engine=InnoDB; 
Query OK, 0 rows affected (0.00 sec) 


mysql> alter table `notes` add constraint 
     foreign key(`note_type_id`) references `notetypes`.`id` 
     on update cascade on delete restrict; 
ERROR 1005 (HY000): Can't create table './admin/#sql-43e_b762.frm' (errno: 150) 

Merci

JP

+0

Pouvez-vous désactiver le FK avant la création et la réactiver par la suite? 'set foreign_key_checks = 0;' ... – Konerak

+1

Suppression des deux tables. Avez 'set foreign_key_checks = 0;' puis créé les tables, puis ajouté des clés étrangères. Mais toujours la même erreur. –

+0

Hmm. Qu'est-ce que 'SHOW INNODB STATUS;' montre sous une erreur de clé étrangère? – Konerak

Répondre

0
mysql> create table notes (id int (11) NOT NULL auto_increment PRIMARY KEY, note_type_id smallint(5) NOT NULL, data TEXT NOT NULL, created_date datetime NOT NULL, modified_date timestamp NOT NULL on update now()) Engine=InnoDB; 
Query OK, 0 rows affected (0.38 sec) 

mysql> create table notetypes (id smallint (5) NOT NULL auto_increment PRIMARY KEY, type varchar(255) NOT NULL UNIQUE) Engine=InnoDB; 
Query OK, 0 rows affected (0.74 sec) 

mysql> alter table `notes` add constraint foreign key(`note_type_id`) references notetypes (id) on update cascade on delete restrict; 
Query OK, 0 rows affected (0.64 sec) 
Records: 0 Duplicates: 0 Warnings: 0 
+0

Merci! ça fonctionne ... Donc mysql donne une erreur folle au lieu d'une erreur de syntaxe dans ce cas. –

1

Je pense que le FK doit être nommé.

Essayez

ALTER TABLE `test`.`notes` ADD CONSTRAINT `note_type_id` FOREIGN KEY `note_type_id` (`note_type_id`) 
    REFERENCES `notetypes` (`id`) 
    ON DELETE RESTRICT 
    ON UPDATE CASCADE; 
+0

même erreur. Je pense que mysql nomme en interne les clés anonymes .. J'ai utilisé des clés/contraintes anonymes dans le passé. –

+0

très étrange ... J'ai couru vos trois requêtes et a reçu la même erreur sur la création d'index. Exécution de la requête ci-dessus a bien fonctionné pour moi - très étrange ... – bob

+0

Est-ce? Laissez-moi essayer encore - j'ai peut-être manqué quelque chose dans ce que vous avez écrit ci-dessus. –