【问题标题】:Best way to create schemas in SQL在 SQL 中创建模式的最佳方法
【发布时间】:2016-01-18 16:39:02
【问题描述】:

我想就我的后端通量寻求帮助。

我现在开始使用 SQL,并且我在 noSQL 数据库方面有一些背景,但我不太了解 SQL,所以我在查找如何注册我的架构时遇到了一些麻烦。

我正在使用node-mysql,我可以创建模式的方式是调用方法查询,例如:

myInstance.query(    'CREATE TABLE users (
  id       INT PRIMARY  KEY  AUTO_INCREMENT,
  name     VARCHAR(100) NULL NULL,
  email    VARCHAR(100) NULL NULL,
  password VARCHAR(100) NULL NULL
)');

这个解决方案的问题是:这段代码会在每次服务器初始化时运行。

所以,我想知道如何检查架构是否已经存在,并且..这是一个好的解决方案吗?我在考虑创建所有模式的 bash 脚本,它们我不需要这个 if 语句。

谢谢。

【问题讨论】:

    标签: javascript mysql sql node.js bash


    【解决方案1】:

    您所说的“模式”实际上是“表”。因此,create table 声明,而不是 create schema。这个非常重要。也许documentation 的这一部分会帮助您了解其中的区别。

    有四种截然不同的结构:

    • 数据库服务器 -- 如何连接到一个或多个数据库
    • 数据库实例 -- 一组对象,通常是一个备份和存储单元
    • 架构 -- 一组对象(可能在数据库中),通常是一个权限单元
    • 表格 -- 存储数据的地方

    请注意,不同的数据库系统在这些方面略有不同。

    当然,“表”是有模式的,所以很容易混淆。

    通常,数据库的管理与用户应用程序分开处理。也就是说,DBA(也可能是开发人员)将创建数据库、管理访问、处理备份/恢复以及其他事情。应用程序将简单地连接到数据库并假设正确的表和数据在那里。

    也就是说,在大多数情况下,您不会在应用程序代码中创建表。只需使用应该已经为您的数据库创建的表。

    【讨论】:

      【解决方案2】:

      你可以修改你的sql语句为

      CREATE TABLE IF NOT EXISTS users (…
      

      这样代码将在服务器 init 上运行,但不会执行任何操作,并且当表已经存在时也不会失败。请参阅corresponding mysql documentation

      与您得到的答案相反,在应用程序代码中包含 SQL 语句对于后端来说并不少见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-16
        • 2020-07-29
        • 2020-10-30
        • 1970-01-01
        相关资源
        最近更新 更多