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

Odwołanie do klucza obcego mysql z klucza złożonego

MySQL ma wiele ograniczeń kluczy obcych . Wśród tych, które mogą Ci przeszkadzać. . .

  • Obie tabele muszą używać silnika INNODB.
  • "W tabeli referencyjnej musi znajdować się indeks, w którym kolumny kluczy obcych są wymienione jako pierwsze kolumny w tej samej kolejności."

Ten kod działa w mojej wersji (5.1.62).

create table DEP_FACULTY(
  LNAME varchar(50),
  FNAME varchar(50),
  EMAIL varchar(70) primary key
) ENGINE = INNODB;

insert into DEP_FACULTY values ('Gregor', 'Brandich', '[email protected]');

create table STUDENT(
  LNAME varchar(50),
  FNAME varchar(50),
  ID char(9) primary key,
  ASSIGNED_ADVISOR_EMAIL varchar(70),
  foreign key (ASSIGNED_ADVISOR_EMAIL) references DEP_FACULTY(EMAIL) ON DELETE SET NULL,
  IS_ADVISED tinyint(1)
) ENGINE = INNODB;

insert into STUDENT values ('Charmaine', 'DePeletier', 'cmd', '[email protected]', 1);

create table ADVISE_HIST(
  STUDENT_ID char(9),
  foreign key (STUDENT_ID) references STUDENT(ID),
  ACTUAL_ADVISOR_EMAIL char(70) NOT NULL,
  foreign key (ACTUAL_ADVISOR_EMAIL) references DEP_FACULTY(EMAIL),
  DATE_ADVISED date,
  primary key REF_ADVISE_HIST (STUDENT_ID, DATE_ADVISED)
) ENGINE = INNODB;

insert into ADVISE_HIST values ('cmd', '[email protected]', CURRENT_DATE);
insert into ADVISE_HIST values ('ctd', '[email protected]', CURRENT_DATE);

Z tych dwóch ostatnich wstawek, pierwsza działa. Drugi powinien zgłosić błąd ograniczenia klucza obcego.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INSERT z warunkiem

  2. Mysql_real_escape_string() Ostrzeżenie zamieszanie

  3. Mysql:latin1-> utf8. Konwertuj znaki na ich wielobajtowe odpowiedniki

  4. Jak przechowywać powtarzające się daty, pamiętając o czasie letnim?

  5. Jak zresetować numer/kolumnę automatycznego przyrostu w tabeli MySql?