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

Znika ograniczenie klucza obcego MySQL

Dla wyjaśnienia, tak wygląda tabela po wprowadzeniu ograniczeń kluczy obcych:

CREATE TABLE `leerplan_oefenreeks` (
  `leerplan_oefenreeks_id` int(11) NOT NULL AUTO_INCREMENT,
  `leerplan_id` int(11) NOT NULL,
  `oefenreeks_id` int(11) NOT NULL,
  `plaats` int(11) NOT NULL,
  PRIMARY KEY (`leerplan_oefenreeks_id`),
  KEY `fk_leerp_oefenr_leerplan` (`leerplan_id`),
  KEY `fk_leerp_oefenr_oefenreeks` (`oefenreeks_id`),
  CONSTRAINT `fk_leerp_oefenr_oefenreeks` FOREIGN KEY (`oefenreeks_id`) REFERENCES `oefenreeks` (`oefenreeks_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_leerp_oefenr_leerplan` FOREIGN KEY (`leerplan_id`) REFERENCES `leerplan` (`leerplan_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

Zwróć uwagę na indeksy fk_leerp_oefenr_leerplan i fk_leerp_oefenr_oefenreeks, które mysql dodaje automatycznie.

Po dodaniu pierwszego unikalnego ograniczenia klucza:

ALTER TABLE leerplan_oefenreeks ADD CONSTRAINT un_leerp_oefenr UNIQUE(leerplan_id, oefenreeks_id);

Mysql usuwa indeks fk_leerp_oefenr_leerplan, ponieważ nie jest już potrzebny do obsługi sprawdzania kluczy obcych w kolumnie leerplan_id. W tym momencie tabela wygląda tak:

CREATE TABLE `leerplan_oefenreeks` (
  `leerplan_oefenreeks_id` int(11) NOT NULL AUTO_INCREMENT,
  `leerplan_id` int(11) NOT NULL,
  `oefenreeks_id` int(11) NOT NULL,
  `plaats` int(11) NOT NULL,
  PRIMARY KEY (`leerplan_oefenreeks_id`),
  UNIQUE KEY `un_leerp_oefenr` (`leerplan_id`,`oefenreeks_id`),
  KEY `fk_leerp_oefenr_oefenreeks` (`oefenreeks_id`),
  CONSTRAINT `fk_leerp_oefenr_leerplan` FOREIGN KEY (`leerplan_id`) REFERENCES `leerplan` (`leerplan_id`) ON DELETE CASCADE,
  CONSTRAINT `fk_leerp_oefenr_oefenreeks` FOREIGN KEY (`oefenreeks_id`) REFERENCES `oefenreeks` (`oefenreeks_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

Krótko mówiąc, Sqlyog pokazuje tylko indeksy w widoku drzewa po lewej stronie, jeśli chcesz zobaczyć klucze obce, wybierz tabelę w widoku drzewa i naciśnij F10.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyklucz rekordy, jeśli pasuje odpowiednia tabela

  2. Jak mogę użyć executemany, aby wstawić do MySQL listę słowników w Pythonie?

  3. Problem z instalacją RMySQL z Mysql 5.5

  4. Eksportuj proste dane Excela do MySQL za pomocą PHP

  5. SELECT nie działa w node.js