sql >> Database teknologi >  >> RDS >> Mysql

Er det muligt at slippe alle fremmednøglebegrænsninger på en tabel på én gang i mySQL 5?

Jeg har en løsning, der ligner Bings svar, men det tager det et skridt videre at være automatisk og genbrugelig i en procedure.

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 ;

Da en forberedt sætning kun kan håndtere én sætning ad gangen, går proceduren gennem fremmednøglerne ved hjælp af en markør og udfører hvert drop én ad gangen.

For at bruge proceduren på en af ​​dine tabeller skal du blot bruge følgende, og erstatte tabelskema og tabelnavn med dine værdier:

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


  1. Skift et logins standardsprog i SQL Server

  2. mysql join forespørgselsrækkefølge med to kolonner

  3. Sådan deaktiveres streng SQL-tilstand i MySQL 5.7

  4. Oracle 11g Express Edition til Windows 64bit?