【问题标题】:Insert to database and select value插入数据库并选择值
【发布时间】:2019-08-17 16:28:20
【问题描述】:

我想向表中插入数据,但我必须先从该表中“摆脱”并递增。我有这样的sql:

INSERT INTO users_items (rid, item_id, user_id, x, y, amount, item_value) 
VALUES(?, ?, ?, ?, ?, ?, ?) SELECT MAX(rid)+1 as rid FROM users_items

这个 SQL 查询有什么问题?

【问题讨论】:

  • 为什么不使用自动增量?
  • “这个 sql 查询有什么问题?” 可能很难调试竞态条件很可能发生在那个 SQL 代码中......就像@Jonnix 建议的那样使用自动增量,如果您需要在插入后选择它,请使用 SELECT LAST_INSERT_ID()..
  • 您不能在 MySQL 中混合使用 VALUES 和 SELECT 语法。至少不是那样。

标签: mysql node.js database


【解决方案1】:

不清楚你到底想做什么。

听起来您正在尝试构建自己的auto-increment。评论者指出,这不是一个好主意。 可能您可以使用内置的自动增量功能,如果可以的话,您应该这样做。因为听起来rid 是表的 ID 字段,所以这肯定是要走的路。

如果您确实需要根据已经存在的值插入值,那是完全可能的。不要使用下面的 sn-p,但取决于您尝试完成的语法可能会有用。

INSERT INTO users_items (rid, item_id, user_id, x, y, amount, item_value)
    SELECT 
        MAX(rid) + 1 as rid,
        ? as item_id,
        ? as user_id,
        ? as x,
        ? as y,
        ? as amount,
        ? as item_value
    FROM 
        users_items

【讨论】:

    【解决方案2】:

    尝试使用“消除”列中的自动增量属性。以这种方式设置时,您不必在查询中指定“摆脱”。

    但是,如果您必须首先选择最后一个“消除”,则必须将“SELECT”语句放入插入中,如下所示:

    INSERT INTO users_items (rid, item_id, user_id, x, y, amount, item_value) 
    VALUES( (SELECT MAX(rid) + 1 FROM users_items FIRST), ?, ?, ?, ?, ?, ?)
    

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 2013-12-25
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多