
最近在做数据库设计工具,请教一个问题
比如这是数据库的第一版设计
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... 有这种通过对比不同表字段直接生成结果的库吗
1 silov 2022-12-02 17:50:32 +08:00 歪个楼先,性别这个字段一般用 gender 而不是 sex [溜了 |
3 WhiteDragon96 2022-12-02 18:14:38 +08:00 ALTER TABLE `users` DROP COLUMN `email`; 这个意思? |
4 rozbo 2022-12-02 18:47:44 +08:00 搜 code first ,根据不同语言不同框架有不同的方案 |
5 rekulas 2022-12-02 18:53:22 +08:00 主要变化也就字段、索引 如果不考虑触发器外键之类的自己解析感觉也很简单 |
6 Belmode 2022-12-02 19:04:19 +08:00 via Android flyway |
8 optional 2022-12-03 09:27:38 +08:00 老老实实用 migration 工具 |
9 brader 2022-12-03 09:48:33 +08:00 不怕你见笑,我平时变动表结构,都是在 navicat 连测试库,表设计页面改动表结构后,把 sql 预览下的 alter 语句复制起来,需求上线了,就把这语句放到生产库执行。 |
10 notnul 2022-12-03 10:24:52 +08:00 flayway |
11 aitaii 2022-12-03 10:57:48 +08:00 自己写基于 binlog |
12 victorc 2022-12-03 11:20:23 +08:00 这都是不接地气的做法 ALTER TABLE 这种暴力操作,在线上实施非常危险,实际干的时候都是单独拎出来 ,战战兢兢,三思而后行 另外从兼容和交付角度,db 字段一般只加不删 |
13 jptx 2022-12-03 12:03:42 +08:00 楼上说的对,生产环境的数据库,字段最好只增不删,新表可以弃用旧字段,但旧字段最好不要物理删除,否则将来回滚、历史数据追溯等操作很麻烦。 另外针对你的需求,不建议使用一些库去实时生成 DDL 语句直接执行,不可控因素太多。建议在上线之前借助工具提取出 DDL 语句,比如 Navicat 的“工具”“结构同步”,可以帮你对比两个库,并且帮你生成 DDL 语句。拿着这些 DDL 语句人工一条条审核,必要时做一些修改,等上线期间执行 DDL 语句即可。 |
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 帖子全文,输出一字未改。 |