j-angnoe / simpleschema
同步基于文件的模式与mysql数据库模式。
Requires
- php: >=7.4
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
的完整表。这仍然需要在某个时候清理。