expressive-analytics / deep-thought-migration
此包已被废弃且不再维护。未建议替代包。
使用 Deep Thought 实现数据库无关迁移的支持。
v1.5.6
2018-02-12 23:11 UTC
Requires
Requires (Dev)
- phpunit/phpunit: >=4.0.0
- symfony/yaml: ~3.4
README
创建新的迁移
使用当前时间戳命名文件来创建新的迁移文件。
> vendor/bin/dtql mark
ADD COL table.col type;
Migration written to '18284744.dtql`.
添加到现有迁移
> vendor/bin/dtql mark -f 18284744.dtql
ADD COL table.col type;
ADD COL table2.col2 type2;
Migration written to '18284744.dtql'
更新到最新模式
> vendor/bin/dtql migrate --dsn "sqlite://my_sqlite.db"
Updated to version 18284744.
迁移到特定版本
> vendor/bin/dtql migrate --dsn "sqlite://my_sqlite.db" 18374591.dtql
Reverted to version 18374591.
转储当前模式
对于创建单元测试的模式尤其重要。
> vendor/bin/dtql dump --schema --dsn="sqlite://dt.db" --sql="mysql"
转储当前数据
> vendor/bin/dtql dump --data --dsn="sqlite://dt.db" --sql="mysql"
DTQL 定义
添加注释
-- this is a comment
创建表
ADD TAB schema.my_table (
id primary,
name text,
created_at timestamp,
"count" int DEFAULT 1,
price_usd double
);
数据类型
为了保持所有存储格式的兼容性,我们建议以下数据类型
类型 | 描述 |
---|---|
主要 | 主键,整数类型,自动递增 |
时间戳 | 日期/时间格式(如有可用,包含时区) |
int | 整数值 |
double | 十进制值 |
text | 文本类型 |
* | 字面类型--可能引起存储兼容性问题 |
类型也可以通过指定 'DEFAULT val' 后跟默认值。
移动表
MV TAB schema.my_table > new_schema.new_table;
删除表
RM TAB schema.my_table;
添加列
您可以指定默认值或外键约束。
ADD COL table.col type;
修改列
为了使操作可逆,您必须提供原始类型。
MV COL table.col type > table.new-col new-type;
删除列
为了使操作可逆,需要提供类型。
RM COL table.col type;
添加索引/外键
严格的 外键 (FK!) 将在支持的情况下引起级联删除。
您可以使用 'ISA' 创建数据子类关系。数据子类在语义上与外键不同,可用于在 DTModels 中创建 is_a 清单。
ADD FK wheels.bus_id ~ buses.id;
ADD FK! bees.hive_id ~ hive.id;
ADD ISA employees.contact_id ~ contacts.id;
ADD IDX table.col;
删除索引/外键
RM FK! bees.hive_id ~ hive.id;
RM ISA employees.contact.id ~ contacts.id;
RM IDX table.col;
语法高亮
您可以在以下链接找到最新的 Atom 语法高亮包:[https://github.com/expressive-analytics/atom-language-dtql](https://github.com/expressive-analytics/atom-language-dtql)