Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem z dodaniem klucza obcego za pomocą Alter Table z istniejącą bazą danych MYSQL - nie można go dodać! Pomoc!

Czy obie tabele są typu InnoDB?

Czy tabela firm ma indeks o identyfikatorze firmy?

Domyślam się, że twoja tabela to MyISAM (domyślna, jeśli nie zmieniłeś konfiguracji) i nie możesz tworzyć ograniczeń kluczy obcych w MyISAM. Zobacz opis CREATE TABLE dla dwóch stołów.

Jeśli obie tabele są puste, usuń je i utwórz ponownie, wybierając jako silnik InnoDB. Możesz również dodać ograniczenia klucza obcego w skrypcie(ach) tworzenia tabel.

Z MySQL Podręcznik :

@egervari:Co się stanie, jeśli uruchomisz to:

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 jeśli biegasz:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego AES_DECRYPT zwraca wartość null?

  2. SQL:Pobierz produkty z kategorii, ale muszą również znajdować się w innym zestawie kategorii

  3. Django + MySQL - Strona administracyjna - Dodaj użytkownika - OperationalError - SAVEPOINT nie istnieje

  4. Korzystanie z Order By w kodzie zapalającym

  5. Użyj dyrektywy IN, aby wyszukiwać za pomocą przygotowanej instrukcji