又爱又恨的Migration

讨论了两人合作开发中数据迁移文件合并及重复表处理的方法。介绍了hobo插件与DrySQL gem来自动化生成迁移文件,确保数据库结构与应用源代码一致。
[quote="cyyan"]1、两人分模块开发,两人生成的数据迁移文件各自从001开始编号,合在一起的时候如何处理?
2、如果碰到需要使用相同的数据表怎么办?是避免出现这种情况还是出现了有好的处理方式?[/quote]

前两天[url=http://www.iteye.com/topic/125789]一个关于hobo插件的帖子[/url]可以解决,他的思想是不要migration,把fields定义在model里,然后每次build的时候,根据model里fields的变化自动生成migration文件。这个功能还没有release,不太稳定。

它的英文原帖中有人回复提及[url=http://drysql.rubyforge.org/]DrySQL[/url]也是针对类似的问题。这是一个gem,扩展了ActiveRecord::Base,也是为了不要维护migration,更适合legacy system。

hobo的作者这样描述两者的区别:DRYSQL says “make my app behave exactly as the database schema says it should”, while this migration generator says “make the database structure be exactly what my application source-code says it should be”。个人更喜欢hobo的思想,希望它尽快release。
<think>我们参考了用户提供的引用内容,特别是引用[1]中关于Flyway迁移脚本的目录结构:`src/main/resources/db/migration`。用户的问题是在IntelliJ IDEA 2020.5中创建db/migration数据库脚本。 步骤分解: 1. 确认目录结构:根据引用[1],迁移脚本应该放在`src/main/resources/db/migration`目录下。 2. 创建目录(如果不存在):在IDEA中,我们需要先创建这个目录结构。 3. 创建迁移脚本文件:在`db/migration`目录下创建符合Flyway命名规范的SQL文件,例如`V1__init.sql`。 详细步骤: ### 1. 打开项目并定位到resources目录 - 在IDEA左侧的Project工具窗口中,展开项目目录,找到`src/main/resources`目录。 ### 2. 创建db/migration目录 - 如果`db/migration`目录不存在,需要创建: - 右键点击`resources`目录 -> New -> Directory - 输入`db`,回车(此时会创建一个db目录) - 然后右键点击`db`目录 -> New -> Directory,输入`migration`,回车 ### 3. 创建迁移脚本文件 - 右键点击`migration`目录 -> New -> File - 输入文件名,文件名必须符合Flyway的命名规则,例如:`V1__init.sql`(注意:两个下划线) - 版本号:以大写字母V开头,后面跟着版本号(数字或带点号的数字,如1.1),然后是两个下划线,接着是描述(描述使用下划线分隔单词),最后是`.sql`后缀。 ### 4. 编写SQL脚本 - 在新建的SQL文件中,编写数据库迁移脚本,例如创建表、插入初始数据等。 ### 示例脚本内容(V1__init.sql) ```sql CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE ); ``` ### 注意事项 1. **命名规范**:Flyway对文件名有严格要求,必须使用大写字母V开头,版本号与描述之间用两个下划线分隔,描述部分使用下划线代替空格,例如:`V1_1__add_user_table.sql`。 2. **执行顺序**:Flyway会按照版本号顺序执行脚本,版本号可以按数字顺序递增,也可以使用日期时间戳(如`V20240505__init.sql`)。 3. **文件编码**:确保SQL文件使用UTF-8编码,避免中文乱码。可以在IDEA中设置:File -> Settings -> Editor -> File Encodings,将全局编码设置为UTF-8。 ### 验证 - 启动应用时,Flyway会自动执行这些脚本(前提是已经正确配置了Flyway依赖和数据库连接)。 - 可以在控制台查看Flyway的日志,确认脚本是否被执行。 ### 引用说明 根据用户提供的引用[1],我们创建了`db/migration`目录并放置迁移脚本,这是Flyway的标准做法[^1]。 ### 相关问题 1. 如何在Spring Boot项目中配置Flyway? 2. Flyway迁移脚本的命名规则有哪些注意事项? 3. 如何解决Flyway在迁移过程中出现的校验错误?</think>在 IntelliJ IDEA 2020.5 中为 Flyway 创建数据库迁移脚本的步骤如下(基于引用[1]的目录结构): ### 创建步骤 1. **定位资源目录** - 在 Project 面板中展开:`src/main/resources` - 若目录不存在,需手动创建: ```markdown 右键 src/main → New → Directory → 输入 "resources" ``` 2. **创建迁移目录** ```markdown 右键 resources → New → Directory → 输入 "db" → 回车 右键 db → New → Directory → 输入 "migration" → 回车 ``` 3. **创建迁移脚本** ```markdown 右键 migration → New → File → 输入文件名(如 V1__init.sql)→ 回车 ``` - **命名规范**(Flyway 要求): - 前缀 `V` + 版本号(如 `V1`, `V2_1`) - 双下划线 `__` 分隔 - 描述性名称(如 `init.sql`, `create_user_table.sql`) - `.sql` 后缀 4. **编写 SQL 脚本**(示例) ```sql -- V1__init.sql CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- V2__create_product_table.sql [^1] CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, price DECIMAL(10,2) CHECK (price > 0) ); ``` ### 目录结构验证 ```markdown src/ └── main/ └── resources/ ├── application.yml └── db/ └── migration/ ├── V1__init.sql └── V2__create_product_table.sql [^1] ``` ### 关键配置 1. **确保 Flyway 依赖**(pom.xml) ```xml <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>8.5.13</version> </dependency> ``` 2. **application.yml 配置** ```yaml spring: flyway: enabled: true locations: classpath:db/migration baseline-on-migrate: true # 首次运行时创建基线 ``` ### 常见问题解决 | 问题 | 解决方案 | |------|----------| | 脚本未执行 | 检查文件名格式(必须包含双下划线 `__`) | | 执行顺序错乱 | 版本号必须递增(`V1` → `V2` → `V2_1`) | | 表已存在错误 | 首次运行添加 `baseline-on-migrate: true` [^1] | > **提示**:每次修改后重启应用,Flyway 会自动检查新脚本并执行迁移。可通过启动日志验证: > ``` > INFO o.f.core.internal.command.DbMigrate - Successfully applied 2 migrations... > ``` --- ### 相关问题 1. 如何在 Flyway 中编写回滚脚本(Undo Migration)? 2. Spring Boot 多环境如何配置不同的 Flyway 迁移策略? 3. Flyway 迁移失败时如何修复校验和(Checksum)错误? [^1]: 引用自 Flyway 迁移脚本规范
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值