【问题标题】:Mysql, How to read auto increment value in other fields of the same inserting row?Mysql,如何在同一插入行的其他字段中读取自动增量值?
【发布时间】:2015-03-11 15:10:30
【问题描述】:

您好,我需要在我的交易的评论字段中包含交易 ID

mysql_query("INSERT INTO `transactiontb` (`tid`, `amount`, `comment`) VALUES (NULL,'$amount', CONCAT('Transaction # ',`tid`)')");

我该怎么做?

【问题讨论】:

  • 您已经在tid 列中找到了号码。为什么你会在 cmets 中再次需要它,这超出了我的理解。人们只是喜欢愚蠢复杂的解决方案,不是吗?
  • 我不会向用户显示每个交易 ID,只是在某些类型的交易中用户需要知道他的 tid 然后他会从评论中读取它,我可以用另一个查询更新评论但我正在寻找更短的方法
  • 所以在选择和显示时动态构建评论。
  • 用户可以编辑评论,这是评论的默认值
  • @N.B.简单地说,如果您想制作数据迁移脚本。也就是说,如果你想将数据迁移到Drupal,你可能会发现节点表中的vid等字段与nid的值相同。

标签: php mysql database insert auto-increment


【解决方案1】:
  1. 退出 mysql_* 函数。查看 MySQLi 或 PDO。
  2. 不要将tid 存储两次。为什么在选择它时不连接而不是那样存储它?这不是最好的方法。

作为参考,请尝试LAST_INSERT_ID()+1):

INSERT INTO `transactiontb` (`tid`, `amount`, `comment`)
VALUES (NULL, '$amount', CONCAT_WS('Transaction # ', LAST_INSERT_ID()+1))

LAST_INSERT_ID() 将给出前一个 INSERT 的 ID,而不是当前 INSERT 的 ID,因此您必须添加 1。

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

生成的 ID 保存在服务器上的 每个连接的基础。这意味着返回的值 给定客户端的函数是生成的第一个 AUTO_INCREMENT 值 对于影响 AUTO_INCREMENT 列的最新语句 客户。此值不会受到其他客户端的影响,即使它们 生成自己的 AUTO_INCREMENT 值。这种行为确保 每个客户端都可以检索自己的 ID 而无需担心 其他客户端的活动,并且不需要锁或 交易。

【讨论】:

  • 我担心有时LAST_INSERT_ID(id+1) 不等于当前插入id
  • 什么会让你害怕?不用担心,没有+1,您将获得上一个记录而不是当前记录。但我更新了一个更好的 +1。
  • 但是,这仍然是一种可怕的数据存储方式。
  • 您的代码有效,但在每次插入时只返回 1,当我删除 +1 时它会返回 0,所以我会看到 Transaction # 0
  • 使用LAST_INSERT_ID()+1 ?
【解决方案2】:

使用LAST_INSERT_ID() 函数。

LAST_INSERT_ID()(不带参数)返回 BIGINT(64 位)值 表示为设置的第一个自动生成的值 最近执行的 INSERT 的 AUTO_INCREMENT 列 声明影响这样的列。

来源:MySQL Documentation

例子:

"INSERT INTO transactiontb(tid, amount, comment) VALUES (NULL,'" . $amount . "', CONCAT_WS('#','Transaction',LAST_INSERT_ID(id+1)))"

刚刚看到你也忘记为你添加分隔符CONCAT_WS 函数,所以我在示例查询中修复了它。

【讨论】:

  • 我用过但没有得到结果,你能举个例子吗?
  • 查看答案以获取示例。
  • 你也忘了在 CONCAT_WS 函数中使用分隔符,所以我也更新了。
  • '# Transaction' 只是一个字符串,反正你写的代码不工作,是不是使用 LAST_INSERT_ID() 的语法正确?
  • 你有'# Transaction'作为你的第一个值,CONCAT_WS中的第一个值是SEPERATOR,在mysql文档中查找。是的,这个查询应该是正确的。你确定你是在我上次编辑后复制的吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2015-10-04
  • 2012-02-27
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多