Php 镜像mysql表结构
如何维护共享相似结构的不同表:Php 镜像mysql表结构,php,mysql,database,Php,Mysql,Database,如何维护共享相似结构的不同表: 示例:我有600个表,其中有20个字段,我已经使用此结构好几个月了,如果我需要删除1个字段并添加2个新字段,怎么可能仅通过更改包含所有其他克隆表必须使用的结构的主表来实现呢?好,你可能知道你的结构远远不是最优的,最好的解决办法是重新组织它。但是,使用遗留系统并不总是容易的,因此仍然可以仅使用MySQL执行该任务 您将需要“游标”,它只能在存储过程中使用,因此您需要先创建一个存储过程(其示例代码如下),然后执行is asCALL alter_many_tables(
示例:我有600个表,其中有20个字段,我已经使用此结构好几个月了,如果我需要删除1个字段并添加2个新字段,怎么可能仅通过更改包含所有其他克隆表必须使用的结构的主表来实现呢?好,你可能知道你的结构远远不是最优的,最好的解决办法是重新组织它。但是,使用遗留系统并不总是容易的,因此仍然可以仅使用MySQL执行该任务 您将需要“游标”,它只能在存储过程中使用,因此您需要先创建一个存储过程(其示例代码如下),然后执行is as
CALL alter_many_tables()
上面的代码段中可能有一些小的语法错误,因为我现在无法测试,但您知道了。您熟悉哪些脚本语言?为什么不创建一个表,只要它们都具有相同的结构?这个问题无法回答。MySQL中没有“将对一个表所做的更改复制到其他表”功能。您不应该使用同一个表的600个副本,或者编写代码将相同的
ALTER table
查询应用于所有600个表。如果表结构相同,则可以自动执行此任务。我将如何自动执行此任务?另外,我不想使用一个表,因为这些表上可能有几千万条记录,这就是为什么我想要一个主控及其克隆。
CREATE PROCEDURE alter_many_tables()
BEGIN
-- reading names of the table to update in a cursor
DECLARE tables_cursor CURSOR FOR
SELECT DISTINCT
`TABLE_NAME`
FROM
`information_schema`.`columns`
WHERE
`TABLE_NAME` LIKE '%\_modulep'
;
-- condition for the loop over found tables to stop
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- looping
read_loop: LOOP
-- reading table name into a variable
FETCH tables_cursor INTO table_name;
-- check if the loop is over
IF done THEN
LEAVE read_loop;
END IF;
-- forming a table update SQL (modify it as you need)
SET @sql = CONCAT('ALTER TABLE ', @table_name, ' ADD COLUMN `new_column` VARCHAR(45) NULL DEFAULT NULL');
-- executing the SQL we have composed above
PREPARE stmt FROM @sql;
EXECUTE stmt;
END LOOP;
-- closing the cursor
CLOSE table_cursor;
END;