Fizz

Fizz 是一种比较常用的数据库迁移描述语言。为不同数据库迁移语法提供了通用性。是pop的默认用法。

建表

create_table("users") {
  t.Column("email", "string", {})
  t.Column("twitter_handle", "string", {"size": 50})
  t.Column("age", "integer", {"default": 0})
  t.Column("admin", "bool", {"default": false})
  t.Column("company_id", "uuid", {"default_raw": "uuid_generate_v1()"})
  t.Column("bio", "text", {"null": true})
  t.Column("joined_at", "timestamp", {})
}

create_table("todos") {
  t.Column("user_id", "integer", {})
  t.Column("title", "string", {"size": 100})
  t.Column("details", "text", {"null": true})
  t.ForeignKey("user_id", {"users": ["id"]}, {"on_delete": "cascade"})
}

ID列不必是整数,也可以是UUID来代替:

create_table("users") {
  t.Column("id", "uuid", {primary: true})
  // ...
}

默认情况下会生成created_at 和 updated_at两个timestamp类型的列。

t.Column方法接受这么几个参数:第一个是列的名称,第二个是列的类型,最后一个是列的一些特殊配置。

通用的列类型

  • string
  • text
  • timestamptimedatetime
  • integer
  • bool
  • uuid

还有一些其他的类型不是通用的,比如 PostgreSQL支持jsonb,然而SQLite 就不支持。

支持的配置选项

  • size - 列的大小. 例如在数据库中 varchar(50) ,对应的: t.Column("column_name", "string", {"size": 50})
  • scaleprecision - scale 和 precision 对应的float列. example: {"scale": 4, "precision": 2}
  • null - 默认的列是不允许为 null.
  • default - 列的默认值,默认情况下是 null.
  • default_raw - 数据库函数的默认值.
  • after - (MySQL Only) 加列在某个列之后. example: {"after":"created_at"}
  • first - (MySQL Only) 加列到表的最前面. example: {"first": true}

禁用自动时间戳列

create_table("users") {
  t.Column("id", "uuid", {primary: true})
  // ...
  // Disable auto-creation of created_at and updated_at columns
  t.DisableTimestamps()
}

或者

create_table("users", {timestamps: false}) {
  t.Column("id", "uuid", {primary: true})
  // ...
}

删除数据表

drop_table("table_name")

表改名

rename_table("old_table_name", "new_table_name")

加一列

add_column("table_name", "column_name", "string", {})

列改变

change_column("table_name", "column_name", "string", {})

列改名

rename_column("table_name", "old_column_name", "new_column_name")

删除列

drop_column("table_name", "column_name")

添加索引

支持的选项

  • name: 索引的名称,默认是table_name_column_name_idx
  • unique

简单索引

add_index("table_name", "column_name", {})

复合索引

add_index("table_name", ["column_1", "column_2"], {})

唯一索引

add_index("table_name", "column_name", {"unique": true})

索引命名

add_index("table_name", "column_name", {}) # name => table_name_column_name_idx
add_index("table_name", "column_name", {"name": "custom_index_name"})

重命名索引

rename_index("table_name", "old_index_name", "new_index_name")

删除索引

drop_index("table_name", "index_name")

加外键

add_foreign_key("table_name", "field", {"ref_table_name": ["ref_column"]}, {
    "name": "optional_fk_name",
    "on_delete": "action",
    "on_update": "action",
})

支持的选项:

  • name - This defaults to table_name_ref_table_name_ref_column_name_fk
  • on_delete - CASCADESET NULL, ...
  • on_update

Note: on_update 和 on_delete 不被支持在CockroachDB上还.

删除外键

drop_foreign_key("table_name", "fk_name", {"if_exists": true})

支持的选项:

  • if_exists - 加上 IF EXISTS 条件

原生SQL语句

sql("select * from users;")

执行外部命令

exec("echo hello")

本文章首发在 LearnKu.com 网站上。
上一篇 下一篇
superwen
讨论数量: 0
发起讨论 只看当前版本


暂无话题~