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

Sql:tidak dapat menjatuhkan kunci asing karena kendala yang dibuat secara otomatis

Masalah Anda adalah bahwa Anda tidak secara eksplisit menyebutkan kendala Anda. Ini meninggalkan setiap database untuk memilih nama untuk Anda. Triknya di sini adalah memberi nama batasan kunci asing Anda secara eksplisit, saat Anda membuat tabel aktual di MySQL dan MariaDB:

CREATE TABLE job_template (
    ...,
    parent_id int NOT NULL,
    CONSTRAINT your_constraint FOREIGN KEY fk_name (parent_id)
        REFERENCES job_template(id) ON DELETE CASCADE
);

Tetapi memperbaiki situasi langsung Anda akan membutuhkan lebih banyak pekerjaan. Salah satu opsi adalah menanyakan tabel skema informasi, untuk tabel yang terlibat, untuk mengetahui nama kendala yang sebenarnya:

USE INFORMATION_SCHEMA;

SELECT
   TABLE_NAME,
   COLUMN_NAME,
   CONSTRAINT_NAME,
   REFERENCED_TABLE_NAME,
   REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE
    TABLE_SCHEMA = 'your_db' AND
    TABLE_NAME = 'job_template' AND
    REFERENCED_COLUMN_NAME IS NOT NULL;

Ini harus mengembalikan satu catatan untuk setiap kolom dan batasan. Dengan informasi ini, Anda seharusnya dapat menjalankan pernyataan perubahan Anda saat ini.

Ini cukup mudah dilakukan dengan menggunakan alat seperti Java, atau yang serupa. Jika Anda ingin melakukannya langsung dari database, maka Anda memerlukan SQL dinamis, yang mungkin berarti menulis prosedur tersimpan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praktik terbaik untuk pencadangan MySQL

  2. Pernyataan SQL untuk memilih catatan duplikat yang muncul lebih dari 2 kali

  3. Permintaan MySQL dengan alias tidak menggunakan indeks

  4. Django:Permintaan mysql tanpa buffer

  5. ...mysql2/mysql2.so:[BUG] Kesalahan segmentasi ruby ​​2.0.0p247