una type renombrar para name modificar foreign ejemplo datos data comando columna column change mysql stored-procedures constraints alter-table

type - Variables de MySQL en la secuencia de comandos ALTER TABLE



comando para modificar una base de datos en mysql (1)

Con el uso de variables como nombres de columna y tablas, sería mejor DECLARE una consulta como una "cadena" y luego ejecutarla a través de una Prepared Statement .

Esto se puede hacer de dos maneras, ya sea mediante CONCAT() para construir la cadena completa o mediante PREPARE con argumentos:

SET @query = CONCAT(''ALTER TABLE '', var_referenced_table_name, '' DROP FOREIGN KEY '', var_constraint_name, '';''); PREPARE stmt FROM @query; EXECUTE stmt; DEALLOCATE PREPARE stmt;

Hola El siguiente procedimiento tendrá que mover todas las restricciones de una tabla a la otra, sin embargo, tengo algunas dificultades en el punto donde la restricción debe ser eliminada.

El problema: cómo uso las variables en la siguiente línea

ALTER TABLE var_referenced_table_name DROP FOREIGN KEY var_constraint_name;

cuando uso como es, recibo el siguiente error

Error Code: 1146. Table ''oaf_businesslink_dev.var_referenced_table_name'' doesn''t exist

MySQL no reconoce var_referenced_table_name y var_constraint_name como variables.

DELIMITER // DROP PROCEDURE IF EXISTS AlterConstraints// CREATE PROCEDURE AlterConstraints() BEGIN DECLARE schema_name VARCHAR(60) DEFAULT ''oaf_businesslink_dev''; DECLARE table_name VARCHAR(60) DEFAULT ''wp_systemuser''; DECLARE finished INTEGER DEFAULT 0; DECLARE total INTEGER DEFAULT 0; DECLARE var_constraint_name VARCHAR(60) DEFAULT ''''; DECLARE var_table_name VARCHAR(60) DEFAULT ''''; DECLARE var_column_name VARCHAR(60) DEFAULT ''''; DECLARE var_referenced_table_name VARCHAR(60) DEFAULT ''''; DECLARE var_referenced_column_name VARCHAR(60) DEFAULT ''''; DECLARE cur_constraints CURSOR FOR SELECT constraint_Name, table_name,column_name,referenced_table_name,referenced_column_name FROM information_schema.key_column_usage WHERE constraint_schema = schema_name AND referenced_table_name = table_name AND table_name IS NOT NULL; DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; OPEN cur_constraints; get_constraint: LOOP FETCH cur_constraints INTO var_constraint_name ,var_table_name ,var_column_name ,var_referenced_table_name ,var_referenced_column_name; IF finished THEN LEAVE get_constraint; END IF; /* Get Constraint Count */ SET total = total + 1; /* Remove Constraint */ IF EXISTS(SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_NAME = var_constraint_name AND TABLE_NAME = var_referenced_table_name AND TABLE_SCHEMA = schema_name) THEN /* * Error Code: 1146. Table ''oaf_businesslink_dev.var_referenced_table_name'' doesn''t exist */ ALTER TABLE var_referenced_table_name DROP FOREIGN KEY var_constraint_name; END IF; /* Change Datatype to BIGINT */ /* Recreate Constraint to new table */ END LOOP get_constraint; CLOSE cur_constraints; SELECT total; END // DELIMITER ; CALL AlterConstraints();

Gracias por adelantado.