【问题标题】:node-mysql use default if null on insert如果插入时为空,node-mysql 使用默认值
【发布时间】:2016-01-31 23:02:28
【问题描述】:

我对 mysql 还很陌生,我正在尝试使用node-mysql 在节点中启动并运行它。我创建了一个简单的表格,如下所示:

CREATE TABLE myTable (
    id SERIAL,
    display BOOLEAN NOT NULL DEFAULT 1,
    active BOOLEAN NOT NULL DEFAULT 0
) DEFAULT CHARSET utf8 COLLATE utf8_bin;

我正在插入这样的行:

db.query('INSERT INTO myTable SET ?', {
    display: myObject.display,
    active: myObject.active
}, callback);

正如文档所说,node-mysql 将我传入的对象转换为键值对。如果myObject.displaymyObject.active 都被定义,这将非常有用。如果一个或两个都不是,node-mysql 会尝试将NULL 插入列中,这是不允许的。我打算在这种情况下使用默认值,但它会引发关于 NULL 值的错误。所以我的问题是:

1) 创建表时是否有一些特殊的语法可以使用,当给定空值时将使用默认值,或者 2) 是否有一些优雅的方法可以使用不涉及一堆的 node-mysql 来做到这一点对象解析?

如果您发现我可以改进的其他内容,请随时扩展您的答案。我更大的目标是学习在节点中创建健壮、安全和简洁的 mysql 插入的最佳方法。

【问题讨论】:

  • 您正在组合 INSERTUPDATE 语句。

标签: mysql node.js node-mysql


【解决方案1】:

对于 INSERT 语句,您的 SQL 语法不正确。

插入

INSERT into TableName(id, display, active)
VALUES (?, ?, ?)

更新

UPDATE TableName SET display = ?
WHERE id = ?

然后,您将使用 db.query() 填充 ? 占位符并传入您的参数。

【讨论】:

  • 我正在使用 MySQL,并且 INSERT ... SET 似乎等同于 INSERT ... VALUES: dev.mysql.com/doc/refman/5.7/en/insert.html
  • 看起来 VALUES 的行为完全相同。我仍然收到错误:Error: ER_BAD_NULL_ERROR: Column \'display\' cannot be null
  • 我不会说“确切”,我敢打赌错误是不同的 :) - 这表明您正在为“显示”列传递null,它被定义为NOT NULL.
猜你喜欢
  • 2019-03-09
  • 2012-12-01
  • 2017-12-25
  • 2010-09-18
  • 1970-01-01
  • 2013-05-19
  • 2015-05-24
  • 2023-03-29
  • 2020-11-06
相关资源
最近更新 更多