关于beego - bee migrate
最近在学go语言,使用beego开发一个考试系统
涉及到数据库迁移部分,使用
bee generate migration users
然后对生成的迁移文件进行编辑后:
func (m *Users_20210403_163418) Up() {
// use m.SQL("CREATE TABLE ...") to make schema update
m.CreateTable("users", "innodb", "utf8mb4")
m.PriCol("id").SetAuto(true).SetDataType("int").SetUnsigned(true)
//####中间部分省略
m.NewCol("deleted_at").SetDataType("timestamp").SetNullable(true)
m.NewCol("created_at").SetDataType("timestamp").SetDefault("NOW()")
m.NewCol("updated_at").SetDataType("timestamp").SetNullable(false).SetDefault("NOW()")
m.SQL(m.GetSQL())
}
// Reverse the migrations
func (m *Users_20210403_163418) Down() {
m.SQL("DROP TABLE IF EXISTS users")
}
执行bee migrate -conn="root:123456@tcp(127.0.0.1:3306)/exam"
然后使用rollback回滚代码后再执行,发现表不再生成了,控制台提示的也是没有更新
2021/04/05 09:04:16 INFO ▶ 0001 Using 'mysql' as 'driver'
2021/04/05 09:04:16 INFO ▶ 0002 Using '/Users/recminy/go/examination/database/migrations' as 'dir'
2021/04/05 09:04:16 INFO ▶ 0003 Running all outstanding migrations
2021/04/05 09:04:18 INFO ▶ 0004 |> 2021/04/05 09:04:16.857 [I] total success upgrade: 0 migration
2021/04/05 09:04:18 SUCCESS ▶ 0005 Migration successful!
,以前在使用Laravel时候,都是:
php artisan make:migration
php artisan migrate
php artisan migrate:rollback
即可。
bee migrate工具这个为什么回滚后再次迁移时候不再次创建表了,是使用上有什么不对的地方么?
还有一点就是bee migrate rollback 每次只能回滚一条migration,这个好想有点恶心,是否能像laravel一样按migrate的时间生成一个batch批次而不是只回滚最后一条记录,如果单次操作多个表的时候得多次执行命令?
bee migration的功能跟laravel比起来少很多,不能定义字段备注,都想回去用laravel的迁移单独搞数据库了 :joy:
还发现一个问题
的时候SetNullable 为true的时候实际不会生效,看了ddl源码
这样实际不会生效,最终生成的表还是not null