Domanda

ciò che è sbagliato con questo comando alter table:

ALTER TABLE `lp` 
ADD COLUMN `RuleId` INT(10) NOT NULL DEFAULT -111 AFTER `Weight` , , 
ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD INDEX `fk_1` (`RuleId` ASC) ;

se mi cade la linea

  ADD CONSTRAINT `fk_1` FOREIGN KEY (`RuleId` ) REFERENCES `Rules` (`RuleId` ) ON DELETE NO ...

il suo lavoro,

L'errore che ottengo è:

Error Code : 1005
Can't create table '..' (errno: 121)

Come posso aggiungere una chiave esterna e INDEX sullo stesso campo ?

Aggiornamento:

cerco di separare a 2 domande, primo indice aggiuntivo e dopo che aggiungono FOREIGN KEY, l'indice ha aggiunto, ma la seconda query non funzionano!

quando cambio il nome di chiave esterna (come: 'fk_2') e provare eseguirlo ottengo un errore: Codice errore: 1452 non possono aggiungere o aggiornare la riga: un vincolo di chiave esterna non riesce

È stato utile?

Soluzione

In primo luogo creare l'indice e il secondo il vincolo di chiave esterna. MySQL ha bisogno di un indice per creare la chiave esterna, è per questo che è necessario creare l'indice prima. Utilizzare le istruzioni separati pure.

Altri suggerimenti

Ho avuto esattamente lo stesso problema.

Quello che ho trovato è che non è possibile aggiungere una chiave esterna se esiste già un'altra chiave esterna nel database che ha lo stesso nome esatto. Anche se l'altra chiave esterna è su un tavolo diverso.

  

ERRORE 1005 (HY000): Impossibile creare la tabella './MyDB/#sql-e4a_c715.frm' (errno: 121)   Come accennato in precedenza, si ottiene questo messaggio se si sta cercando di aggiungere un vincolo con un nome che è già utilizzato da qualche altra parte.

(Tratto da qui )

Quindi, solo rinominarlo in qualcosa di casuale per verificare se sono corrette ..

ho ottenuto questo errore dopo la combinazione DDL schema da N Django app utilizzando il comando "manage.py sqlall".

Ho trovato che DDL di MySQL richiede le normative essere raggruppati per tipo in questo ordine. In particolare, tutte ALTER TABLE ... ADD ... FOREIGN KEY ... deve verificarsi scorso, o MySQL solleverà tale errore.

  1. CREATE TABLE ...
  2. CREATE INDEX ...
  3. ALTER TABLE table_name nome ADD vincolo di chiave esterna ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top