sql >> Databáze >  >> RDS >> Mysql

Problém s přidáváním cizího klíče pomocí Alter Table se stávající databází MYSQL – nelze jej přidat! Pomoc!

Jsou obě tabulky typu InnoDB?

Má tabulka společnosti index na company_id ?

Předpokládám, že vaše tabulka je MyISAM (výchozí, pokud jste nezměnili konfiguraci) a v MyISAM nemůžete vytvářet omezení cizích klíčů. Viz popis CREATE TABLE pro vaše dva stoly.

Pokud jsou obě tabulky prázdné, zahoďte je a znovu je vytvořte, přičemž jako engine vyberte InnoDB. Můžete také přidat omezení FOREIGN KEY do skriptů vytváření tabulek.

Z MySQL Referenční příručka :

@egervari:Co se stane, když spustíte toto:

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 ;

A pokud spustíte:

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;


  1. Nejnovější datum a čas z jedinečného indexu mysql

  2. Symfony:V ovladači došlo k výjimce:nelze najít ovladač s mysql

  3. Jak používat zaškrtávací políčka k načtení konkrétních dat v databázi

  4. Podmíněné SQL ORDER BY ASC/DESC pro alfa sloupce