Mysql存储过程 为指定库所有表加统一字段

发布时间:2023年12月26日
DELIMITER //

CREATE PROCEDURE add_brand_column()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE table_name VARCHAR(255);
    DECLARE alter_query VARCHAR(1000);

    DECLARE cur CURSOR FOR 
        SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = 'test_db';

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN cur;
    read_loop: LOOP
        FETCH cur INTO table_name;
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- Check if column already exists in the table
        IF NOT EXISTS (
            SELECT column_name
            FROM information_schema.columns
            WHERE table_schema = 'test_db'
            AND table_name = table_name
            AND column_name = 'brand'
        ) THEN
            -- Add the column to the table
            SET alter_query = CONCAT('ALTER TABLE ', table_name, ' ADD COLUMN brand VARCHAR(100)');
            
            -- Using PREPARE and EXECUTE for dynamic SQL
            PREPARE stmt FROM alter_query;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;
    END LOOP;

    CLOSE cur;
END //

DELIMITER ;

此存储过程执行以下步骤:

使用游标遍历数据库中的所有表。
对于每个表,检查是否存在名为 brand 的列。
如果不存在,使用动态 SQL 添加 brand 列,类型为 VARCHAR(100)。

CALL add_brand_column();
文章来源:https://blog.csdn.net/weixin_43709538/article/details/135213031
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。