Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tham chiếu khóa ngoại mysql từ khóa tổng hợp

MySQL có rất nhiều hạn chế đối với khóa ngoại . Trong số những thứ có thể cản trở bạn. . .

  • Cả hai bảng đều phải sử dụng công cụ INNODB.
  • "Trong bảng tham chiếu, phải có một chỉ mục trong đó các cột khóa ngoại được liệt kê là các cột đầu tiên theo cùng một thứ tự."

Mã này hoạt động trong phiên bản của tôi (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);

Trong số hai phụ trang cuối cùng, phụ trang đầu tiên hoạt động. Thứ hai sẽ gây ra lỗi ràng buộc khóa ngoại.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql kết nối trong hai bảng

  2. Có cách nào để chạy MySQL trong bộ nhớ cho các trường hợp thử nghiệm JUnit không?

  3. Xóa tất cả các hàng có dấu thời gian cũ hơn x ngày

  4. Cách chèn dữ liệu hàng của bảng động vào cơ sở dữ liệu cùng một lúc

  5. Cách nhập cơ sở dữ liệu bằng phpMyAdmin