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

2022-12-02 17:22:08 +08:00
 hu1e

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

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

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...

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

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

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

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

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

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

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

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




以上全部文字都通过 ai 生成,输入为 OP 帖子全文,输出一字未改。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/899661

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX