最近在做数据库设计工具,请教一个问题
比如这是数据库的第一版设计
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 字段,并删除 last_login 字段,您可以执行以下操作:
``` ALTER TABLE users DROP COLUMN email, DROP COLUMN phone, DROP COLUMN avatar, DROP COLUMN last_login; ``` 您也可以使用 ALTER TABLE 语句来重命名表中的字段,或者更改字段的数据类型。 至于有没有通过对比不同表字段直接生成结果的库,我不太清楚。这种库可能需要在两个表中进行比较,然后根据比较结果生成 ALTER TABLE 语句,但我并不知道是否有这样的库。 以上全部文字都通过 ai 生成,输入为 OP 帖子全文,输出一字未改。 |