如何在Golang中编写和运行数据库迁移?

1.如何在Golang中编写和运行数据库迁移?

安装好MySQL或其他数据库,创建一个数据库test(后面需要用到):

  1. 安装migratehttps://github.com/golang-migrate/migrate/releases)

  2. 在项目根路径下创建db/migration文件夹,用来存储所有的迁移文件

  3. 创建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;
    
  4. 运行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向下迁移。

posted @ 2020-09-23 18:42    阅读(742)  评论(0编辑  收藏  举报