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

Sql:không thể bỏ khóa ngoại do ràng buộc được tạo tự động

Vấn đề của bạn là bạn không đặt tên rõ ràng cho các ràng buộc của mình. Điều này để lại mỗi cơ sở dữ liệu để chọn một tên cho bạn. Mẹo ở đây là đặt tên cho các ràng buộc khóa ngoại của bạn một cách rõ ràng, khi bạn tạo các bảng thực tế trên cả MySQL và 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
);

Nhưng việc khắc phục tình trạng trước mắt của bạn sẽ đòi hỏi nhiều công việc hơn. Một tùy chọn sẽ là truy vấn bảng giản đồ thông tin, đối với bảng có liên quan, để tìm ra các tên ràng buộc thực tế:

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;

Điều này sẽ trả về một bản ghi cho mọi cột và ràng buộc. Với thông tin này, bạn sẽ có thể chạy các câu lệnh thay thế hiện tại của mình.

Điều này đủ dễ dàng để thực hiện bằng cách sử dụng một công cụ như Java hoặc một cái gì đó tương tự. Nếu bạn muốn thực hiện việc này trực tiếp từ cơ sở dữ liệu, thì bạn sẽ cần SQL động, có thể có nghĩa là viết một thủ tục được lưu trữ.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách bỏ auto_increment khỏi bảng mysql

  2. hiển thị biến hình ảnh

  3. Đối sánh toàn văn bản () với () trả về tập hợp trống

  4. Làm cách nào để thay đổi kiểu VARCHAR thành DATETIME bằng ALTER trong MySQL?

  5. Truy vấn LEFT OUTER JOIN không trả về các hàng mong đợi