zoukankan      html  css  js  c++  java
  • 针对mysql中分表批量添加字段

      项目中有用到这种类似的分表,如果要添加一个字段的话,该怎么办呢?

      

      dba表示弄 一个脚本批量处理就行了,卧槽,这我哪会啊,于是硬着头皮又继续问dba,dba给一个脚本,一看是这样的。

      

     1 #!/bin/bash
     2 
     3 for db in {rmlog_bs_db_01,rmlog_bs_db_02,rmlog_bs_db_03,rmlog_bs_db_04,rmlog_bs_db_05,rmlog_bs_db_06,rmlog_bs_db_07,rmlog_bs_db_08,rmlog_bs_db_09,rmlog_bs_db_10,rmlog_bs_db_11,rmlog_bs_db_12
     4 ,rmlog_bs_db_13,rmlog_bs_db_14,rmlog_bs_db_15,rmlog_bs_db_16}
     5 do
     6 
     7 all_table=`/mysql/product/bin/mysql -uroot -pxxxxx -e "select table_name from information_schema.tables where table_schema='${db}' and table_name like  'log_imap_mail_2016%'"`
     8 
     9 for i in $all_table
    10 do
    11 
    12 /mysql/product/bin/mysql -uroot -pxxxx -e "alter table $db.$i add xxxx"
    13         done
    14 done
    View Code

      一看是个shell脚本,原来这不是分表,是特么批量建的表。

      我看这是个shell脚本,没法在我本机上测试,于是就想能不能搞个sql脚本。一开始以为像oracle一样,搞个执行体就行了,可是对mysql不是很熟,也没写过这玩意,于是上网查了很久。

      

    drop procedure if exists useCursor;  
    CREATE PROCEDURE useCursor()  
      BEGIN  
        DECLARE oneAddr varchar(8) default '';  
        DECLARE allAddr varchar(40) default '';  
        DECLARE done INT DEFAULT 0;  
        DECLARE curl CURSOR FOR select table_name from information_schema.tables where table_schema='testdb' and table_name like  'user%';  
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  
        OPEN curl;  
        REPEAT  
          FETCH curl INTO oneAddr;  
          IF not done THEN  
             set @sql=concat('alter table ',oneAddr,' add comma varchar(10)');
             PREPARE stmt from @sql; 
             execute stmt;
          END IF;  
        UNTIL done END REPEAT;  
        select allAddr;
        CLOSE curl;     
      END;  
    call useCursor(); 

      搞出来 这么个东西就行了,其中

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 这句表示select如果没有结果就set done为0.参数绑定试了用问号,但是不行,可能是我本机的mysql版本过低。只好拼接sql语句,这样总算可以了。


    关于mysql中游标的循环,也一并写一下,一种是repeat,一种是while,一种是loop。还有执行体不用写begin end,直接写语句就行。


  • 相关阅读:
    json.stringify()和json.parse()
    C# 对json对象嵌套数组
    sql 时间段内没有的数据等于0
    epoint:TreeView
    Asp.Net使用org.in2bits.MyXls.dll操作excel的应用
    VS中的生成事件
    mysql主从复制
    mysql索引优化分析
    MySQL逻辑架构简介
    大数据DMP画像系统(转载 简介-龙果学院)
  • 原文地址:https://www.cnblogs.com/yaoyuan23/p/5603803.html
Copyright © 2011-2022 走看看