Files
go-common/examples/migrations

数据库迁移示例

这个目录包含了数据库迁移的示例SQL文件。

文件说明

examples/migrations/
├── migrations/              # 迁移文件目录
│   ├── 20240101000001_create_users_table.sql       # 迁移SQL
│   └── 20240101000001_create_users_table.down.sql  # 回滚SQL
└── README.md                # 本文件

快速开始

在你的项目中使用

1. 创建迁移工具

在项目根目录创建 migrate.go

package main

import (
	"log"
	"os"
	"git.toowon.com/jimmy/go-common/migration"
)

func main() {
	command := "up"
	if len(os.Args) > 1 {
		command = os.Args[1]
	}

	err := migration.RunMigrationsFromConfigWithCommand("config.json", "migrations", command)
	if err != nil {
		log.Fatal(err)
	}
}

2. 创建迁移文件

# 创建目录
mkdir -p migrations

# 创建迁移文件(使用时间戳作为版本号)
vim migrations/20240101000001_create_users.sql

3. 编写SQL

-- migrations/20240101000001_create_users.sql
CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

4. 执行迁移

# 执行迁移
go run migrate.go up

# 查看状态
go run migrate.go status

# 回滚
go run migrate.go down

更简单:在应用启动时自动执行

在你的 main.go 中:

import "git.toowon.com/jimmy/go-common/migration"

func main() {
	// 一行代码,启动时自动迁移
	migration.RunMigrationsFromConfig("config.json", "migrations")
	
	// 继续启动应用
	startServer()
}

配置方式

方式1配置文件

config.json:

{
    "database": {
        "type": "mysql",
        "host": "localhost",
        "port": 3306,
        "user": "root",
        "password": "password",
        "database": "mydb"
    }
}

方式2使用配置文件推荐

# 使用默认配置文件 config.json
go run migrate.go up

# 或指定配置文件路径
go run migrate.go up -config /path/to/config.json

Docker 中

# docker-compose.yml
services:
  app:
    volumes:
      # 挂载配置文件
      - ./config.json:/app/config.json:ro
    command: sh -c "go run migrate.go up && ./app"

注意:配置文件中的数据库主机应使用服务名(db),不是 localhost

更多信息