【问题标题】:MySQL create a database according to a template databaseMySQL根据模板数据库创建数据库
【发布时间】:2016-03-14 01:32:36
【问题描述】:

我正在编写一个 PHP 应用程序,它需要在添加数据时创建新数据库。我想要一种很好且简单的方法来指定创建的数据库的外观(即它们包含哪些表,这些表应该包含哪些索引,...),这目前是 MySql Workbench 中的 EER 图,然后我将其转发到服务器。我不认为 PHP 代码中的许多 CREATE 语句“既好又简单”。由 PHP 应用程序中的某个事件触发,我需要做一些事情来创建一个具有指定名称的新数据库,该名称是模板数据库的副本。

这是这个问题的重复:
MySQL copy/duplicate database
但是这个问题的答案不适合我。
我不想使用 mysqldump,因为我无法承担在服务器上执行 shell 代码的安全风险,因为必须插入创建的数据库的名称,这可能容易受到代码注入的影响。还有this.
我也不想用 SHOW 语句将数据库分开并手动执行 CREATE 语句来拼接一个新数据库,因为这会很快变得很麻烦,而且它可能无法捕获模板数据库的所有方面,因此会引入难以发现的错误.我也不确定在引用表之前创建引用表时,此方法处理外键的效果如何。

理想情况下,我想使用一个简单的 SQL 语句,例如 CREATE DATABASE ? LIKE TemplateDatabase(其中 ? 以某种形式的预准备语句表示数据库名称)。不幸的是,尽管 MySQL 中似乎不存在该功能。
显然 PostgreSQL 可以做这样的事情就好了,但我不想仅仅因为一个特性而迁移。

如何在满足上述约束的同时实现这一点?

【问题讨论】:

  • CREATE DATABASE ? 你不能绑定表/列,句号。使用安全列表。
  • @Fred-ii- 请澄清您对“安全列表”的含义

标签: php mysql database postgresql


【解决方案1】:

如果您的项目是新项目,通过正确管理迁移,您可以区分哪些部分用于表架构,哪些部分用于表的数据。复制数据库只是重新运行迁移。

如果您的项目已经存在。您可以创建sql文件,并编写php脚本手动运行。

【讨论】:

  • 我是否理解正确,我应该使用 MySQL 的迁移功能?如何触发从 PHP 的迁移,以及应该如何准确地配置迁移以达到预期的效果?由于我的问题中所述的原因,我想避免使用 SQL 文件。
  • 解决这个问题应该说来话长。但你可以耐心地做。创建一个自定义控制台控制器,通过调用`shell_exec('your command to run')`触发迁移,配置迁移作为你想要的效果应该在那个控制台控制器中控制。
猜你喜欢
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2018-03-02
  • 2021-11-10
相关资源
最近更新 更多