2020-08-15-数据库批量修改语句生成查询语句


title: 数据库批量修改语句的生成sql语句
date: 2020-08-15 21:03:44
catalog: true
comments: true
subtitle: sql批量修改语句生成语句
header-img: /img/header_img/Iron-Man-3.jpg
tags:

  • SQL
    categories:
  • SQK

个人博客地址:http://radarsoftware.cn/

背景

在接老师开发商业性质的项目的时候,接受了一个批量修改数据库的任务,花费了自己蛮多心血特此记录一下。

任务要求

任务详情:
数据库的表结构不统一,字段列名缺失以及长度不匹配。
在现有的数据库中,每张表都有 CREATER,CREATER_ID,CREATE_DATE,UPDATER,UPDATER_ID,UPDATE_DATE等字段,编写一个工具,用于:

  1. 确保一致性:每张表内的这些字段名字,类型,长度都相同
  2. 统一被修改:批量修改这些字段的名字,类型,长度
    在这里插入图片描述

解决思路&方案

刚开始时想复杂了,脚本学习较少,时间紧迫,于是选择从sql查询语句入手,一直往IF EXISTS钻牛角尖,但批量多表操作的拼接折磨了我很久,后续将问题简单化为将对应数据库没有字段的表添加字段列,再将所有表对应字段列的属性以及长度更新校验更正为任务要求的。

拼接代码:
注意:除CREATER其它字段sql全部省略,下为核心拼接代码

START TRANSACTION;
SELECT DISTINCT CONCAT('ALTER TABLE ',table_name,' ADD COLUMN CREATER VARCHAR(32);') FROM information_schema.tables WHERE table_schema = DATABASE() AND TABLE_NAME NOT IN (SELECT TABLE_NAME FROM information_schema.columns WHERE table_schema = DATABASE() AND column_name LIKE 'CREATER');

SELECT CONCAT('ALTER TABLE ',table_name,' MODIFY  COLUMN CREATER VARCHAR(32);') from information_schema.`TABLES`WHERE table_schema='agency_test';
COMMIT;

sql注意事项

SQL语句进行列名字段查询时,注意取反编写,不可直接写 column_name not like ‘字段名’,column_name like '字段名’逻辑为会选取发现每个表的列名与like的字段进行对比,只要有和对应字段名相同的列名及选出该表,not like会导致只要表中有与like的字段不匹配的表便会选出该表,只要表含多个列名基本便会选出导致与需求不服。

操作方法

  1. 在要修改的数据库新建查询

  2. 在查询里黏贴sql查询代码生成脚本的内容并运行

  3. 保存该查询结果为.txt文件(或sql文件)

  4. 在该文件内容开头另起一行添加 START TRANSACTION; 内容结尾另一起行添加 COMMIT;

  5. 将该内容黏贴至新的查询(或运行sql文件注意指定运行sql的数据库)

  6. 注意:sql查询代码生成脚本未指定生成查询的关联数据库,请在需要使用的数据库使用该查询,若想指定对应数据库请将中所有table_schema=DATABASE()修改为table_schema=‘指定数据库’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值