在SQL

时间:2016-01-18 16:39:02

标签: javascript mysql sql node.js bash

我想请求我的后端助手帮助。

我现在开始使用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语句。

感谢。

2 个答案:

答案 0 :(得分:3)

你所谓的“架构”实际上是一个“桌子”。因此,create table语句,而不是create schema。这是非常重要的。也许这部分documentation将帮助您理解差异。

有四种截然不同的结构:

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

请注意,不同的数据库系统在这些系统上的变化略有不同。

当然,“表格”有模式,这就是为什么容易混淆的原因。

通常,数据库的管理与用户应用程序分开处理。也就是说,DBA(也可能是开发人员)将创建数据库,管理访问,处理备份/恢复等。应用程序只需连接到数据库并假设存在正确的表和数据。

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

答案 1 :(得分:0)

您可以将sql语句修改为

CREATE TABLE IF NOT EXISTS users (…

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

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