如何在Golang中编写和运行数据库迁移?
1.如何在Golang中编写和运行数据库迁移?
安装好MySQL或其他数据库,创建一个数据库test(后面需要用到):
-
安装
migrate(https://github.com/golang-migrate/migrate/releases) -
在项目根路径下创建
db/migration文件夹,用来存储所有的迁移文件 -
创建migrations
migrate create -ext sql -dir db/migration -seq init_schema # -ext 文件扩展名为sql # -seq 标志生成的迁移文件的顺序版本号(init_schema任意写,比如:create_accounts)可以看到
db/migration下生成了两个文件:000001_init_schema.up.sql 000001_init_schema.down.sql打开要转移的包含sql语句的文件
*.sql,将所有sql语句复制到000001_init_schema.up.sql里面,比如我这里的sql语句就是创建了三个表(为了方便展示删除了多余内容):CREATE TABLE accounts ( name varchar(16) ); CREATE TABLE transfers ( name varchar(16) );对于
000001_init_schema.down.sql文件,我们应还原其对应000001_init_schema.up.sql中sql语句所做的更改,因为up中是创建三个表,所以对应的down就是删除这三个表(如果有外键关联,注意执行顺序):DROP TABLE IF EXISTS accounts; DROP TABLE IF EXISTS transfers; -
运行migrations
migrate -path db/migration -database "mysql://root:123456@tcp(127.0.0.1:3306)/test" -verbose up # -path 指定迁移文件的文件夹 # -database 指定DSN # -verbose 用来在迁移时打印详细日志记录
2.Makefile
migrateup:
migrate -path db/migration -database "mysql://root:123456@tcp(127.0.0.1:3306)/test" -verbose up
migratedown:
migrate -path db/migration -database "mysql://root:123456@tcp(127.0.0.1:3306)/test" -verbose down
.PHONY: migrateup migratedown
make migrateup向上迁移,make migratedown向下迁移。

浙公网安备 33010602011771号