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
图片引用自网络