程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 針對mysql中分表批量添加字段,mysql中分字段

針對mysql中分表批量添加字段,mysql中分字段

編輯:MySQL綜合教程

針對mysql中分表批量添加字段,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,直接寫語句就行。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved