mysql分表批量增删改字段有什么好的解决方案?

发布于 2022-09-11 19:47:09 字数 637 浏览 18 评论 0

项目现在遇到一个多表结构难以维护的问题。具体问题是这样的。 我们的后台会发布项目task, 发布后产生task_id, 例如task_id = 120, 然后,项目会被管理员审核。 审核没问题之后, 就要确认发布项目, 此时, 项目120会分出10张表, 比如task_data_120, task_check_120, ..., 这十张表是用来实现任务的各种功能用的, 都不可或缺。随着task的增加, 分表就越来越多, 比如有10task, 那么就会分出100个表来。如果此时要求task的某张分表比如task_data_xx表要增加一个字段, 那么这task_data相关十张表的字段都要同步增加字段。同理, 如果字段名称要修改, 那么相关表的字段也会同步被修改。如果想实现这样的字段批量维护, 有什么好的建议吗?
我们使用的是PHP Yii2框架, 数据库是mysql5.7

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

攀登最高峰 2022-09-18 19:47:09

每次更新or增加数据库字段,都使用php脚本修改or增加,然后循环每个task表进行修改。
可以参考laravel中的migration 貌似在github中也有yii版本的(具体是否符合你的预期可能需要你亲自看下了)。

怪我入戏太深 2022-09-18 19:47:09

很明显 你这种表的设计就存在问题了。所以建议重新考虑一下

櫻之舞 2022-09-18 19:47:09

我没有在实际情况中遇到这样的问题,不过我有些想法可以一起讨论下。
1、触发器 一张表的字段被修改了,触发器触发修改其他表的字段(触发器调用存储过程,当前看的所有task_XX表都修改)
2、如果不好改业务逻辑,那不能不能这样?加一个拓展字段,里面存的是json数据,每次拓展对象的属性,而不是直接加字段?
3、每次修改执行存储过程,如下面这个,查找出所有表,循环添加字段

DECLARE
 v_sql CLOB;
 v_table user_tables.TABLE_NAME%TYPE;
 CURSOR p_cursor IS SELECT TABLE_NAME FROM USER_TABLES t WHERE t.TABLE_NAME NOT IN('YX_SJCJ_JK','YX_SJCJ_JK_RZ','YX_SJCJ_JK_RZMX'); 
BEGIN
  OPEN p_cursor;
  LOOP 
    FETCH p_cursor INTO v_table;
    EXIT WHEN p_cursor%NOTFOUND;
    v_sql := 'ALTER TABLE '||v_table||' ADD RKRQ DATE';
    EXECUTE IMMEDIATE v_sql;
    v_sql :='comment on column '||v_table||'.RKRQ is ''入库日期''';
     EXECUTE IMMEDIATE v_sql;
  END LOOP;
END;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文