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

SQL Không thể tạo bảng (errno:150)

Bạn nên tạo một ràng buộc khóa ngoại tham chiếu đến đầy đủ khóa chính hoặc khóa duy nhất của mỗi bảng được tham chiếu. Bạn không thể tạo khóa ngoại riêng biệt cho các cột riêng lẻ ở giữa khóa chính của bảng tham chiếu.

CREATE TABLE prospect
(Custname      VARCHAR(25) NOT NULL,
 Carmake       VARCHAR(25) NOT NULL,
 Carmodel      VARCHAR(20) NOT NULL,
 Caryear       VARCHAR(4) NOT NULL,
 Carextcolour  VARCHAR(10) NOT NULL,
 Cartrim       VARCHAR(10) NOT NULL,
 Optioncode    CHAR(4),
 CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour,           Cartrim, Optioncode),
 CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
 CONSTRAINT fk2prospect FOREIGN KEY (Carmake, Carmodel, Caryear, Carextcolour, Cartrim)
   REFERENCES car(Carmake, Carmodel, Caryear, Carextcolour, Cartrim),
 CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);

Tôi đã sử dụng từ nên ở trên vì InnoDB thực sự khoan dung hơn một chút so với tiêu chuẩn ANSI / ISO SQL khi nói đến khóa ngoại. SQL chuẩn cho biết các cột của khóa ngoại phải là danh sách đầy đủ các cột của khóa chính hoặc khóa duy nhất được tham chiếu.

InnoDB cho phép bạn sử dụng một tập hợp con của các cột, miễn là chúng là tiền tố bên trái của các cột đó. Nhưng bạn không nên làm như vậy, vì bạn sẽ nhận được kết quả thực sự khó hiểu khi một hàng con có thể tham chiếu đến nhiều các hàng trong bảng mẹ của nó.



  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 hiển thị số 0 cho các ngày không có bản ghi

  2. Xuất dữ liệu MYSQL sang Excel / CSV qua php

  3. Kiểm tra sức khỏe quan trọng cho máy chủ bản sao nguồn MySQL của bạn

  4. python:làm thế nào để nhận thông báo cho các thay đổi cơ sở dữ liệu mysql?

  5. Loại MySQL nào phù hợp nhất cho cột giá?