由於業務須要,建立了100個表,可是這些表的結構都是同樣的,做爲程序員,就是要解決這種重複勞動。然而這種事情還要單獨寫個php腳本的話太麻煩了吧,因此就乾脆學了一下直接用Mysql存儲過程怎麼實現:php
首先是建立表的:( LPAD(`@i`, 2, '0')的做用 是將1,2,3這些數字轉化爲'01','02','03')程序員
DROP PROCEDURE IF EXISTS `create_tables`; CREATE PROCEDURE create_tables () BEGIN DECLARE `@i` INT (11); DECLARE `@createSql` VARCHAR (2560);SET `@i` = 0; WHILE `@i` < 100 DO -- 建立表 SET @createSql = CONCAT( "CREATE TABLE IF NOT EXISTS guess_record", LPAD(`@i`, 2, '0'), "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userid` int(12) unsigned NOT NULL COMMENT '用戶ID', `issue` int(10) unsigned NOT NULL COMMENT '期號', `options_id` int(10) unsigned NOT NULL COMMENT '選項ID', `guess_time` int(10) unsigned NOT NULL COMMENT '答題時間', `is_stat` tinyint(4) NOT NULL COMMENT '是否統計過', PRIMARY KEY (`id`), KEY `issue` (`issue`) USING BTREE, KEY `userid` (`userid`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; " ); PREPARE stmt FROM @createSql; EXECUTE stmt; SET `@i` = `@i` + 1; END WHILE; END
而後是批量刪除表的(嘿嘿,搞事情)sql
DROP PROCEDURE IF EXISTS `drop_tables`; CREATE PROCEDURE drop_tables () BEGIN DECLARE `@i` INT (11); DECLARE `@dropSql` VARCHAR (2560); SET `@i` = 0; WHILE `@i` < 100 DO -- 建立表 SET @dropSql = CONCAT("DROP TABLE IF EXISTS guess_record",LPAD(`@i`, 2, '0')); PREPARE stmt FROM @dropSql; EXECUTE stmt; SET `@i` = `@i` + 1; END WHILE; END
我用這個存儲過程其實就是一次性的,因此完整的過程是 一、建立存儲過程 二、執行存儲過程(批量建立表)三、刪除存儲過程spa
#1:建立存儲過程 DROP PROCEDURE IF EXISTS `create_tables`; DELIMITER $$ //定義結束符 CREATE PROCEDURE create_tables () BEGIN DECLARE `@i` INT (11); DECLARE `@createSql` VARCHAR (2560); SET `@i` = 0; WHILE `@i` < 100 DO -- 建立表 SET @createSql = CONCAT( "CREATE TABLE IF NOT EXISTS guess_record", LPAD(`@i`, 2, '0'), "( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userid` int(12) unsigned NOT NULL COMMENT '用戶ID', `issue` int(10) unsigned NOT NULL COMMENT '期號', `options_id` int(10) unsigned NOT NULL COMMENT '選項ID', `guess_time` int(10) unsigned NOT NULL COMMENT '答題時間', `is_stat` tinyint(4) NOT NULL COMMENT '是否統計過', PRIMARY KEY (`id`), KEY `issue` (`issue`) USING BTREE, KEY `userid` (`userid`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; " ); PREPARE stmt FROM @createSql; EXECUTE stmt; SET `@i` = `@i` + 1; END WHILE; END $$ DELIMITER ; //結束符改成; #2:執行存儲過程 CALL `create_tables`(); #3:刪除存儲過程 DROP PROCEDURE IF EXISTS `create_tables`;