sql的存储过程实例--循环动态创建表
创建一个存储过程,动态添加100张track表
表名track_0 ~~ track_99
注:sql的拼接只能用 CONCAT()函数
-- 创建一个存储过程 CREATE PROCEDURE create_track_table() begin declare num int; -- 定义一个循环变量 set num=0; -- 循环 100 遍 while num <= 99 do SET @table_name=CONCAT('track_',num); -- 定义表名(变量定义表名) -- 拼接字符串需要用 concat()函数 -- 定义创建 table的 sql语句 SET @sql_begin='CREATE TABLE '; SET @sql_end="( `mac_id` varchar(16) NOT NULL COMMENT '设备IMEI', `mac_type` varchar(12) DEFAULT NULL, `channel` varchar(3) DEFAULT 'UDP', `type` smallint(2) NOT NULL, `x` int(4) NOT NULL, `y` int(4) NOT NULL, `gpstime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `bvalid` varchar(10) DEFAULT '0' COMMENT '0:无效 1:有效 2:基站定位 ', `speed` int(2) DEFAULT NULL, `dir` int(2) DEFAULT NULL, `s1` varchar(32) DEFAULT NULL, `s2` varchar(48) DEFAULT NULL, `s3` varchar(48) DEFAULT NULL, `s4` varchar(128) DEFAULT NULL, `ins_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `imagefile` char(1) DEFAULT '0', `battery` tinyint(4) DEFAULT NULL COMMENT '电量', KEY `mac_id` (`mac_id`,`mac_type`,`gpstime`) USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8"; set @create_sql=CONCAT(@sql_begin,@table_name,@sql_end); -- 拼接一个完整的sql语句 PREPARE create_table from @create_sql; -- 预处理sql语句 (还可以加参数) EXECUTE create_table; -- 执行 set num=num+1; -- 结束循环 end while; commit; end
-- 执行存储过程 CALL create_track_table();