Mysql
 sql >> база данни >  >> RDS >> Mysql

Възможно ли е да премахнете всички ограничения на външния ключ върху таблица наведнъж в mySQL 5?

Имам решение, подобно на отговора на Bing, но отнема още една стъпка, за да бъде автоматично и повторно използваемо в процедура.

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 ;

Тъй като подготвеният оператор може да обработва само един израз в даден момент, процедурата преминава през външните ключове с помощта на курсор и изпълнява всяко изпускане едно по едно.

За да използвате процедурата в една от вашите таблици, просто използвайте следното, като замените table_schema и table_name с вашите стойности:

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. MySQL:Как да разбера кои таблици препращат към конкретна таблица?

  2. Относно Neo4j

  3. MySQL :Когато името на параметъра на съхранената процедура е същото като името на колоната на таблицата

  4. Проектиране на база данни с рецепти, която трябва да включва съставки, както и подрецепти

  5. Как мога да направя ПЪЛНО ВЪНШНО ПРИСЪЕДИНЕНИЕ в MySQL?