MySQL动态创建表及数据分表的存储过程

  • A+
所属分类:数据库



MySQL动态创建表数据分表的存储过程,需要的朋友可以参考下。

  1. BEGIN
  2. DECLARE `@iint(11);
  3. DECLARE `@siteCountint(11);
  4. DECLARE `@sqlstr` VARCHAR(2560);
  5. DECLARE `@sqlinsert` VARCHAR(2560); //以上声明变量 
  6. SELECT COUNT(0) into `@siteCount` FROM tbl_base_site; //计算表tbl_base_site的记录总条数 
  7. set `@i`=1;
  8. WHILE (`@i`-1)*300<`@siteCount` DO //while循环执行 
  9. SET @sqlstr = CONCAT('CREATE TABLE tbl_base_syslog',`@i`,'(syslog_id INT(11) AUTO_INCREMENT PRIMARY KEY,
  10. create_user VARCHAR(32),
  11. description text,
  12. create_time datetime,
  13. site_id INT(11),
  14. ip VARCHAR(64),
  15. version_id SMALLINT(2),
  16. module_identity VARCHAR(64),
  17. right_name VARCHAR(64)
  18. )');
  19. prepare stmt from @sqlstr;
  20. execute stmt;
  21. //以上实现动态创建表 
  22. SET @sqlinsert = CONCAT('INSERT INTO tbl_base_syslog',`@i`,'(
  23. syslog_id,
  24. create_user,
  25. description,
  26. create_time,
  27. site_id,
  28. ip,
  29. version_id,
  30. module_identity,
  31. right_name)
  32. SELECT syslog_id,
  33. create_user,
  34. description,
  35. create_time,
  36. site_id,
  37. ip,
  38. version_id,
  39. module_identity,
  40. right_name
  41. FROM tbl_base_syslog
  42. WHERE site_id IN (select tbs.site_id from (select site_id from tbl_base_site limit ',`@i`*300,',300) as tbs)
  43. ORDER BY syslog_id');
  44. prepare stmt from @sqlinsert;
  45. execute stmt;
  46. //以上实现从一张表查询记录插入到动态创建的新表中 
  47. SET `@i`= `@i`+1;
  48. END WHILE;
  49. END



发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: