sql >> Databáze >  >> RDS >> Mysql

Je možné v mySQL 5 zrušit všechna omezení cizího klíče na tabulku najednou?

Mám řešení podobné Bingově odpovědi, ale je o krok dále, aby bylo automatické a znovu použitelné v proceduře.

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 ;

Vzhledem k tomu, že připravený příkaz může zpracovávat pouze jeden příkaz najednou, procedura prochází cizí klíče pomocí kurzoru a provádí každou kapku po jednom.

Chcete-li použít postup na jedné z vašich tabulek, použijte následující a nahraďte table_schema a table_name svými hodnotami:

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


  1. MySQL získá první nenulovou hodnotu po seskupení podle

  2. SQL LIKE operátor pro začátečníky

  3. Jak spravovat velkou datovou sadu pomocí Spring MySQL a RowCallbackHandler

  4. ajax php rozevírací seznam