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

很文博客hinven.com 2021年12月13日08:12:29数据库评论1411056字阅读模式

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

  1. BEGIN
  2. DECLARE `@i` int(11);
  3. DECLARE `@siteCount` int(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

历史上的今天
12月
13
weinxin
扫一扫更精彩
大家的支持是我更新的动力!!!
MySQL,大小写 数据库

MySQL,大小写

修改MySql Server安装目录下的 my.ini 文件,在mysqld节下加入下面一行 set-variable=lower_case_table_names=0 (0:大小写敏感;1:大小写不...
广告也精彩
匿名

发表评论

匿名网友

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

确定