Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tidak dapat menambahkan kunci asing di MySQL 5.7 (Batas yang hilang dalam tabel yang direferensikan)

Sepertinya productorder.oid adalah bagian dari kunci utama multi-kolom, dan itu bukan kolom paling kiri di kunci utama. (Ke depannya, harap sertakan hasil SHOW CREATE TABLE <tablename> karena lebih jelas daripada DESCRIBE tentang hal-hal seperti kunci multi-kolom.)

Saat mendeklarasikan kunci asing, Anda harus mereferensikan kolom paling kiri dari kunci utama.

Saat Anda mereferensikan kunci utama multi-kolom, kunci asing harus memiliki jumlah kolom yang sama dalam urutan yang sama.

Salah (kolom tidak cukup, dan merujuk pada kolom kedua dari kunci utama):

CREATE TABLE parent (x INT, y INT, PRIMARY KEY (x, y));

CREATE TABLE child  (y INT, FOREIGN KEY (y) REFERENCES parent(y));

Salah (kunci asing individual masing-masing merujuk bagian dari kunci utama gabungan):

CREATE TABLE parent (x INT, y INT, PRIMARY KEY (x, y));

CREATE TABLE child  (x INT, y INT, 
  FOREIGN KEY (x) REFERENCES parent(x),
  FOREIGN KEY (y) REFERENCES parent(y)
);

Kanan (kolom yang sama):

CREATE TABLE parent (x INT, y INT, PRIMARY KEY (x, y));

CREATE TABLE child  (x INT, y INT, FOREIGN KEY (x, y) REFERENCES parent(x, y));

Kembali komentar Anda:

Saya sekarang berpikir bahwa masalah Anda yang sebenarnya adalah hubungan Anda terbalik. Anda mencoba mendeklarasikan kunci asing di deliveryaddress referensi productorder , tapi saya berharap referensinya mengarah ke arah lain.

ALTER TABLE productorder ADD FOREIGN KEY (oid) REFERENCES deliveryaddress (oid);

Maka Anda tidak memiliki kesalahan, karena kunci utama deliveryaddress hanya satu kolom.

Saya percaya hubungan ini lebih masuk akal dalam aplikasi e-niaga biasa. Ada banyak pesanan yang mungkin merujuk ke alamat yang sama. Hubungan yang berlawanan mungkin bukan yang Anda inginkan, karena tidak masuk akal jika banyak alamat merujuk pada satu pesanan produk.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Output MYSQL dalam format pohon ATAU Menambahkan level (Induk-Anak)

  2. Bagaimana cara menghasilkan string acak yang unik untuk salah satu kolom tabel MySql saya?

  3. Peringatan:Langkah pasca-instal tidak berhasil diselesaikan, Saat mencoba menginstal mysql menggunakan brew di Mac OS High Sierra

  4. Kesalahan MySQL 1093 - Tidak dapat menentukan tabel target untuk pembaruan dalam klausa FROM

  5. ROW_NUMBER() di MySQL