Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Problem beim Hinzufügen von Fremdschlüsseln mit Alter Table mit vorhandener MYSQL-Datenbank - kann nicht hinzugefügt werden! Hilfe!

Sind beide Tabellen InnoDB-Typ?

Hat die Unternehmenstabelle einen Index für company_id ?

Ich vermute, dass Ihre Tabelle MyISAM ist (die Standardeinstellung, wenn Sie die Konfiguration nicht geändert haben) und Sie in MyISAM keine Fremdschlüsseleinschränkungen erstellen können. Siehe die Beschreibung von CREATE TABLE für Ihre beiden Tabellen.

Wenn beide Tabellen leer sind, löschen Sie sie und erstellen Sie sie neu, indem Sie InnoDB als Engine auswählen. Sie könnten auch die FOREIGN KEY-Einschränkungen in den Skripts zur Tabellenerstellung hinzufügen.

Von MySQL Referenzhandbuch :

@egervari:Was passiert, wenn Sie Folgendes ausführen:

CREATE TABLE `test` (
  `company_id` bigint(20) NOT NULL,
  `module_id` bigint(20) NOT NULL,

  KEY  (`module_id`),
  KEY  (`company_id`),

  CONSTRAINT `test_fk_module`
    FOREIGN KEY (`module_id`)
    REFERENCES `module` (`module_id`),

  CONSTRAINT `test_fk_company`
    FOREIGN KEY (`company_id`)
    REFERENCES `company` (`company_id`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT

) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

Und wenn Sie laufen:

ALTER TABLE `company_to_module`
  ADD CONSTRAINT `company_to_module_fk_company` 
    FOREIGN KEY (`company_id`)
    REFERENCES `company` (`company_id`)
    ON DELETE RESTRICT
    ON UPDATE RESTRICT;