項目中有用到這種類似的分表,如果要添加一個字段的話,該怎麼辦呢?
dba表示弄 一個腳本批量處理就行了,臥槽,這我哪會啊,於是硬著頭皮又繼續問dba,dba給一個腳本,一看是這樣的。
一看是個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,直接寫語句就行。