如果在插入时为null,则node-mysql使用default

时间:2015-10-31 17:10:39

标签: mysql node.js node-mysql

我对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插入的最佳方法。

1 个答案:

答案 0 :(得分:0)

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

插入

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

<强>更新

UPDATE TableName SET display = ?
WHERE id = ?

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