【问题标题】:SQL: Is it bad to use create on database and tables that already exist?SQL:在已经存在的数据库和表上使用 create 是不是很糟糕?
【发布时间】:2017-06-24 19:48:23
【问题描述】:

我想在我的 Nodejs 服务器上创建一个数据库初始化脚本,该脚本将在每次服务器初始化时运行,也就是说,如果尚未创建所有必需的数据库和表,则它们将被创建。 所以如果我只是在做类似的事情:

CREATE DATABASE newtest;
USE newtest;
CREATE TABLE people(id INT(11) auto_increment PRIMARY KEY, name VARCHAR(140) NOT NULL);

与每次检查数据库或表是否存在相反,如果不存在则创建它,这可能是不好的。我的意思是,只要它不杀死我的脚本并且只返回一个错误作为参数并继续它就可以了,不是吗?想确认一下。

谢谢

【问题讨论】:

  • 大多数东西都有IF NOT EXISTS的选项,所以create database if not exists newtest;

标签: mysql sql node.js database


【解决方案1】:

这很好,事实上,大多数数据库框架(如LiquibaseSpring Data JPA)在数据库初始化/应用程序启动期间都使用这种方法。

如果您想手动执行,使用您自己的自定义脚本,那么您可以使用IF NOT EXISTS 语法,例如:

CREATE TABLE IF NOT EXISTS `schema`.`Employee` (
id int
);

【讨论】:

  • 谢谢!我实际上发现了多个语句的问题,并且已经解决了。
【解决方案2】:

一般来说,我认为以这种方式创建数据库是一种不好的做法。

创建数据库不是(必然)一项微不足道的操作。需要为表分配空间,需要生成和更新系统表。此外,还可以在数据库级别进行优化。它不应该被认为是原子操作。

一般来说,一个应用程序会访问一个或几个数据库。这些数据库应该在应用程序开始运行之前设置和定义。换句话说,环境应该已经为应用做好了准备。

这是否意味着在应用程序代码中创建数据库总是是错误的?不可以。但是这样做应该是非常罕见的,而且要非常小心。

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 2020-01-29
    • 2011-09-20
    • 2011-10-06
    • 1970-01-01
    • 2013-03-28
    • 2020-12-02
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多