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

Có thể loại bỏ tất cả các ràng buộc khóa ngoại trên một bảng cùng một lúc trong mySQL 5 không?

Tôi có một giải pháp tương tự như câu trả lời của Bing, nhưng cần thêm một bước nữa để có thể tự động và có thể sử dụng lại trong một quy trình.

DROP PROCEDURE IF EXISTS dropForeignKeysFromTable;

delimiter ///
create procedure dropForeignKeysFromTable(IN param_table_schema varchar(255), IN param_table_name varchar(255))
begin
    declare done int default FALSE;
    declare dropCommand varchar(255);
    declare dropCur cursor for 
        select concat('alter table ',table_schema,'.',table_name,' DROP FOREIGN KEY ',constraint_name, ';') 
        from information_schema.table_constraints
        where constraint_type='FOREIGN KEY' 
            and table_name = param_table_name
            and table_schema = param_table_schema;

    declare continue handler for not found set done = true;

    open dropCur;

    read_loop: loop
        fetch dropCur into dropCommand;
        if done then
            leave read_loop;
        end if;

        set @sdropCommand = dropCommand;

        prepare dropClientUpdateKeyStmt from @sdropCommand;

        execute dropClientUpdateKeyStmt;

        deallocate prepare dropClientUpdateKeyStmt;
    end loop;

    close dropCur;
end///

delimiter ;

Vì một câu lệnh đã chuẩn bị chỉ có thể xử lý một câu lệnh tại một thời điểm, thủ tục sẽ lặp lại các khóa ngoại bằng con trỏ và thực hiện từng lần thả một.

Để sử dụng quy trình trên một trong các bảng của bạn, chỉ cần sử dụng như sau, thay thế table_schema và table_name bằng các giá trị của bạn:

call dropForeignKeysFromTable('table_schema', 'table_name');


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng thay thế SQL - cho phép giá trị cột NULL

  2. Phương ngữ ngủ đông cho MySQL 8?

  3. bao gồm các hàng bị thiếu (không đếm được) khi sử dụng GROUP BY

  4. MySQL MariaDB - Truy vấn sử dụng bảng tạm thời

  5. Truy xuất id của mỗi câu lệnh INSERT trong nhiều truy vấn