j-angnoe/simpleschema

同步基于文件的模式与mysql数据库模式。

dev-master 2021-12-31 14:56 UTC

This package is auto-updated.

Last update: 2024-09-29 06:03:13 UTC


README

SimpleSchema 是一个MySQL工具,用于同步您的数据库模式与文件中定义的模式。

在设计模型或原型设计时,您可能需要执行大量的模式更改。您可能熟悉由流行框架提供的数据库迁移解决方案,尽管这种方法提供了高准确性和可重复性,但一旦迁移步骤出错,就会变得繁琐。

更好的方法是,如果您可以只将您的模式写入文件,然后让工具为您进行必要的数据库模式修改,会更好。

这正是 SimpleSchema 的全部内容。

示例数据库定义

topics:
        `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
        `name` varchar(40) DEFAULT NULL

users:
        `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
        `name` varchar(40) DEFAULT NULL


posts:
        `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT
        `name` varchar(255) DEFAULT NULL
        `content` text DEFAULT NULL
        `topic_id` int(11) DEFAULT NULL
        KEY `fk_topic_id_topics_id` (`topic_id`)
        CONSTRAINT `fk_topic_id_topics_id` FOREIGN KEY (`topic_id`) REFERENCES `topics` (`id`)

格式与SQL格式非常相似,但去除了一些烦恼:逗号和CREATE TABLE内容。

将其保存为myschema.simpleschema.txt

现在将模式与您的数据库进行比较

simpleschema diff

这会告诉您

- ALTER TABLE `users` ADD COLUMN `password` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL AFTER `name`
- ALTER TABLE `posts` MODIFY COLUMN `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL AFTER `id`

如果这些更改让您满意,运行它们

simpleschema run

警告:SimpleSchema 可以删除列、键等。在应用之前仔细审查更改,以防止意外数据丢失。

使其工作

simpleschema 检查以下环境变量:DB_HOST DB_PORT DB_USERNAME DB_PASSWORD DB_DATABASE

您可以通过在命令前加前缀来提供这些设置

DB_HOST=x DB_PORT=3306 DB_USERNAME=user DB_PASSWORD=pass DB_DATABASE=mydb simpleschema run

设置环境变量的方法: https://phoenixnap.com/kb/linux-set-environment-variable

或者,作为最后的选项,您可以在当前目录下的任何 package.json 中添加一个 simpleschema。此方法适用于开发目的。

"simpleschema" : {
    "DB_HOST" : "....",
    "DB_PORT" : "...",
    "DB_USERNAME" : "...",
    "DB_PASSWORD" : "...",
    "DB_DATABASE" : "..."
}

将现有模式转换为 simpleschema 格式

使用 simpleschema export 开始。通过将输出重定向到文件来写入文件。`simpleschema export > myschema.simpleschema.txt`

SimpleSchema 文件

simpleschema 二进制文件将查找名称中包含 '.simpleschema.' 的文件,并连接所有内容。这允许您将大型模式拆分成逻辑部分,并在代码库中分布这些文件。

使用 simpleschema ls 列出项目中所有的 simpleschema 文件。使用 simpleschema cat 查看所有文件的组合输出。

关于 FULLTEXT 的说明

如果您使用全文列,我们无法使用临时表进行比较。它将创建一个后缀为 _simpleschema_tmp 的完整表。这仍然需要在某个时候清理。