求指导 -- 数据库增量脚本方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hu1e
V2EX    程序员

求指导 -- 数据库增量脚本方案

  •  
  •   hu1e 2022-12-02 17:22:08 +08:00 3036 次点击
    这是一个创建于 1111 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做数据库设计工具,请教一个问题

    比如这是数据库的第一版设计

    CREATE TABLE `users` ( `id` integer, `name` varchar(255), `password` varchar(255), `sex` varchar(255), `email` varchar(255), `phone` varchar(255), `avatar` varchar(255), `last_login` timestamp ); 

    这是第二版

    CREATE TABLE `users` ( `id` integer, `name` varchar(255), `password` varchar(255), `sex` varchar(255), ); 

    如何通过基于第一版,通过增量命令来实现第二版的结果

    ALTER TABLE... 

    有这种通过对比不同表字段直接生成结果的库吗

    14 条回复    2022-12-03 20:06:03 +08:00
    silov
        1
    silov  
       2022-12-02 17:50:32 +08:00
    歪个楼先,性别这个字段一般用 gender 而不是 sex [溜了
    v2wtf
        2
    v2wtf  
       2022-12-02 17:53:36 +08:00
    @silov sex 并无不妥,老外的开源项目里用 sex 的感觉更多。
    WhiteDragon96
        3
    WhiteDragon96  
       2022-12-02 18:14:38 +08:00
    ALTER TABLE `users` DROP COLUMN `email`; 这个意思?
    rozbo
        4
    rozbo  
       2022-12-02 18:47:44 +08:00
    搜 code first ,根据不同语言不同框架有不同的方案
    rekulas
        5
    rekulas  
       2022-12-02 18:53:22 +08:00
    主要变化也就字段、索引
    如果不考虑触发器外键之类的自己解析感觉也很简单
    Belmode
        6
    Belmode  
       2022-12-02 19:04:19 +08:00 via Android
    flyway
    tiaod
        7
    tiaod  
       2022-12-02 22:32:01 +08:00
    @v2wtf 讲道理没有用 xingbie 或者 XB 已经很给面子了
    optional
        8
    optional  
       2022-12-03 09:27:38 +08:00
    老老实实用 migration 工具
    brader
        9
    brader  
       2022-12-03 09:48:33 +08:00
    不怕你见笑,我平时变动表结构,都是在 navicat 连测试库,表设计页面改动表结构后,把 sql 预览下的 alter 语句复制起来,需求上线了,就把这语句放到生产库执行。
    notnul
        10
    notnul  
       2022-12-03 10:24:52 +08:00
    flayway
    aitaii
        11
    aitaii  
       2022-12-03 10:57:48 +08:00
    自己写基于 binlog
    victorc
        12
    victorc  
       2022-12-03 11:20:23 +08:00
    这都是不接地气的做法

    ALTER TABLE 这种暴力操作,在线上实施非常危险,实际干的时候都是单独拎出来 ,战战兢兢,三思而后行

    另外从兼容和交付角度,db 字段一般只加不删
    jptx
        13
    jptx  
       2022-12-03 12:03:42 +08:00
    楼上说的对,生产环境的数据库,字段最好只增不删,新表可以弃用旧字段,但旧字段最好不要物理删除,否则将来回滚、历史数据追溯等操作很麻烦。

    另外针对你的需求,不建议使用一些库去实时生成 DDL 语句直接执行,不可控因素太多。建议在上线之前借助工具提取出 DDL 语句,比如 Navicat 的“工具”“结构同步”,可以帮你对比两个库,并且帮你生成 DDL 语句。拿着这些 DDL 语句人工一条条审核,必要时做一些修改,等上线期间执行 DDL 语句即可。
    hamsterbase
        14
    hamsterbase  
       2022-12-03 20:06:03 +08:00
    您可以使用 ALTER TABLE 语句来更新表的结构。要在第一版的表中删除 email 、phone 和 avatar 字段,并删除 lastlogin 字段,您可以执行以下操作:

    ```
    ALTER TABLE users
    DROP COLUMN email,
    DROP COLUMN phone,
    DROP COLUMN avatar,
    DROP COLUMN last_login;

    ```
    您也可以使用 ALTER TABLE 语句来重命名表中的字段,或者更改字段的数据类型。

    至于有没有通过对比不同表字段直接生成结果的库,我不太清楚。这种库可能需要在两个表中进行比较,然后根据比较结果生成 ALTER TABLE 语句,但我并不知道是否有这样的库。




    以上全部文字都通过 ai 生成,输入为 OP 帖子全文,输出一字未改。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     970 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 19:24 PVG 03:24 LAX 11:24 JFK 14:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86