首页 > 数据库 >Mysql表结构同步存储过程(适用于模版表)

Mysql表结构同步存储过程(适用于模版表)

时间:2024-07-29 14:53:17浏览次数:14  
标签:存储 alterSQL -- 模版 TABLE Mysql END VARCHAR DECLARE

Mysql表结构同步

流水模版表新增字段需要同步到所有区域年份的流水表

CREATE DEFINER=`root`@`%` PROCEDURE `SyncTableStructure`(IN sourceTable VARCHAR(255), IN targetTable VARCHAR(255))
BEGIN
    DECLARE done INT DEFAULT 0;
    DECLARE columnName VARCHAR(255);
    DECLARE columnType VARCHAR(255);
    DECLARE isNullable VARCHAR(3);
    DECLARE columnDefault TEXT;
    DECLARE extra VARCHAR(255);

    -- 游标查询源表的列结构
    DECLARE columnCursor CURSOR FOR
        SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, EXTRA
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = sourceTable;

    -- 当遍历完所有行时,关闭游标
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    -- 打开游标
    OPEN columnCursor;

    read_loop: LOOP
        -- 读取游标中的一行
        FETCH columnCursor INTO columnName, columnType, isNullable, columnDefault, extra;
        
        IF done THEN
            LEAVE read_loop;
        END IF;

        -- 检查目标表中是否存在该列
        IF NOT EXISTS (
            SELECT * FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = targetTable AND COLUMN_NAME = columnName
        ) THEN
            -- 构建ALTER TABLE语句,添加新列
            SET @alterSQL = CONCAT('ALTER TABLE ', targetTable, ' ADD COLUMN ', columnName, ' ', columnType);
            
            -- 处理可为空字段
            IF isNullable = 'NO' THEN
                SET @alterSQL = CONCAT(@alterSQL, ' NOT NULL');
            END IF;
            
            -- 处理默认值
            IF columnDefault IS NOT NULL THEN
                SET @alterSQL = CONCAT(@alterSQL, ' DEFAULT ', QUOTE(columnDefault));
            END IF;

            -- 处理额外属性(如AUTO_INCREMENT)
            IF extra != '' THEN
                SET @alterSQL = CONCAT(@alterSQL, ' ', extra);
            END IF;

            -- 执行ALTER TABLE语句
            PREPARE stmt FROM @alterSQL;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;
        END IF;
    END LOOP;

    -- 关闭游标
    CLOSE columnCursor;
END

调用

CALL SyncTableStructure('A', 'B');

标签:存储,alterSQL,--,模版,TABLE,Mysql,END,VARCHAR,DECLARE
From: https://www.cnblogs.com/aeolian/p/18330009

相关文章

  • mysql操作线上数据时建议用事务
    事务管理是数据库操作中的一个重要概念,特别是当涉及到需要保证数据完整性和一致性的场景。事务是一系列操作,它们作为一个整体被执行,这意味着事务中的所有操作要么全部成功,要么全部失败。在关系型数据库中,事务通常遵循ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isol......
  • Android 应用、驱动开发(六十九)MaterialButton存储应用
    一、运行效果:二、主函数MainActivity.java:packagecom.example.a087_materialbuttonapp;importandroidx.appcompat.app.AppCompatActivity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;impo......
  • 使用 pgvector 和 Lambda 生成基岩嵌入并存储在 Aurora 中
    我在Aurora中的不同表中有一些数据,我想对其执行RAG。为此,我创建了一个微服务(Lambda),它可以生成不同表的嵌入并将该数据存储在Aurora中。但是矢量更新插入应该基于某些数据库流集合。例如:如果有5个以上的数据库更新,那么我应该重新生成嵌入,并且应该有一个端点,我可以在其中......
  • 从零搭建MySQL主从复制-一主二从
    从零搭建MySQL主从复制-一主二从文章目录从零搭建MySQL主从复制-一主二从1.服务器准备2.Docker安装2.1、安装需要的软件包2.2、设置docker下载镜像2.3、更新yum软件包索引2.4、安装dockerce2.5、启动docker2.6、版本验证2.7、设置开机启动3.MySQL主从部署3.1部署MySQL......
  • CentOS安装MySQL
    参考文章【CentOS安装mysql简单教程】https://blog.csdn.net/qq_50523945/article/details/131069683【运维系列:centos7yum安装使用时提示cannotfindavalidbaseurlforrepo:base/7/x86_64的解决方法(亲测有效☆)】https://blog.csdn.net/weixin_54626591/article/detai......
  • pinia持久化存储(pinia-plugin-persistedstate)
    快速开始|pinia-plugin-persistedstate(prazdevs.github.io)安装pnpmpnpmaddpinia-plugin-persistedstatenpmnpmipinia-plugin-persistedstateyarnyarnaddpinia-plugin-persistedstate将插件添加到pinia实例上import{createPinia}from'pinia'import......
  • MySQL基础篇(一)
    1.事物的四大特性事务是逻辑上的一组操作,要么都执行,要么都不执行原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性(Consistency):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不......
  • chsap连接Mysql
    前置操作打开MySql服务 添加引用MySql.Data.dll 数据库查询数据读取一条数据,直接运行就能看到打印台输出。1usingMysql.Data.MyAqlClient;2staticvoidMain(string[]args)3{4stringconnStr="Database=test007;DataSource=127.0.0.1;port=3306;User......
  • 存储
    一、存储过程介绍1、什么是存储过程?存储过程是实现某个特点功能的sql语句的集合,编译后的存储过程会保存在数据中,通过存储过程的名称反复的调用执行。2、存储过程的优点?t(1)存储过程创建后,就可以反复的调用和使用,不需要重新写复杂的语句(2)创建,修改存储过程不会对数据有任何的影响......
  • 使用 smart_open 从 http 下载 .gz 流并上传到 s3 存储桶
    我想从http流式下载.txt.gz文件并流式上传到s3存储桶,我已经做到了这一点,但它不起作用,我错过了什么?fromsmart_openimportopenassopenchunk_size=(16*1024*1024)http_url='http://someurl'withsopen(http_url,'rb',transport_params={'headers':{�......