【问题标题】:MySQL INSERT with OUTPUT like MSSQLMySQL INSERT 与 MSSQL 之类的 OUTPUT
【发布时间】:2011-07-25 01:47:09
【问题描述】:

我很确定 MySQL 没有 MSSQL 所具有的 INSERT INTO 表 OUTPUT [列值] - http://msdn.microsoft.com/en-us/library/ms177564.aspx(或 http://blogs.msdn.com/b/sqltips/archive/2005/06/13/output-clause.aspx

复制这个的简单方法是什么? (我正在将一个 MSSQL 应用程序移动到 MySQL。'OUTPUT' 目前是一个唯一标识符和一个 int,所以也许我可以选择 MAX (int) 并添加一个,并在插入之前生成一个 UID?)

谢谢

【问题讨论】:

  • 列上是否有 AUTO_INCREMENT?如果是,请使用LAST_INSERT_ID。如果没有,SELECT MAX 将不得不这样做,确实......
  • 请注意,MS SQL 也有类似LAST_INSERT_ID() 的功能: SET @logSqlId = SCOPE_IDENTITY(); 您可以使用 logSqlId 作为输出参数或从中使用SELECT。同样对于未来的读者,如果从大型商业系统之一迁移,请考虑使用 Postgres。它的功能更接近高端数据库系统,在某些情况下甚至超过了它们。

标签: mysql sql-server


【解决方案1】:

如果这个值是一个自增字段,你可以在运行插入后运行SELECT LAST_INSERT_ID();,你会得到最后一个插入这个字段的值。 见:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

【讨论】:

  • 太棒了,没有太多使用 MySQL,所以不知道该功能,应该可以解决问题,我可以很容易地生成 GUID/唯一标识符
  • 遗憾的是,如果进行批量插入,这根本没有帮助,尤其是您需要在事后进行进一步匹配并且需要的不仅仅是 id - 导致额外的选择。
  • 如果其他人在您的插入和选择最后一个插入之间插入了一些东西怎么办?您必须将其包装在事务中吗??
  • @LorenPechtel No. LAST_INSERT_ID() 是本地连接。本质上,它返回插入的最后一个ID,即使其他连接可能同时插入了行。
猜你喜欢
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多