【问题标题】:SQL Auto Increment IDSQL 自动增量 ID
【发布时间】:2012-11-03 17:49:50
【问题描述】:

我有一个带有自动递增字段的 SQL 表。我知道人们在插入发生后询问如何检索“最后一个条目”的 ID,我知道该怎么做。我想要做的是将自动生成的字段复制到同一张表的第二列中 - 我如何修改我的插入代码来做到这一点:

mysql_query("INSERT INTO `tags` (`tid`,`tagid`,`tagname`) VALUES('','INSERTED.ID','{$tagname}')");

我想这样做的原因是因为我希望能够使两行彼此相等。 IE。如果两个不同的标签(具有不同的唯一 ID)具有相同的 tagid,那么我可以在其他地方使用“tagid”引用作为唯一标识符并循环浏览它们。我还可以保留关于哪个标签是父标签的知识 - 因为它将具有与 'tagid' 相同的 'tid'。

我有一个标记事件的系统;但有时我拼错了一个标签……所以我不想纠正所有的错误,而是想通过允许拼写错误的标签被连接起来并以与正确标签相同的方式对待来使我的系统防错。

非常感谢您的帮助 - 即使这意味着以完全不同的方式来做这件事。

谢谢,

【问题讨论】:

  • 这是一种反模式。我不会推荐它。

标签: php sql tags


【解决方案1】:

2 个选项:

1) 可以使用LAST_INSERT_ID()mysql函数,但是在第二次查询中,就不一样了。

SELECT LAST_INSERT_ID();

2) 在表中定义一个插入Trigger,然后当你插入时,触发器“触发”并在触发器中做动作。

 CREATE TRIGGER tag_tid BEFORE INSERT ON tags
 FOR EACH ROW NEW.tid = NEW.id;

注意:短篇创作者,详见链接。

【讨论】:

  • 非常好。我会试试触发器。谢谢
  • 感谢您的帮助 - 我决定进行 2 次单独的查询,以防我被代码隐藏的触发器弄糊涂了。
【解决方案2】:

您必须更改表格以将字段设置为自动增量。然后我相信当你插入任何东西时它会增加。也有这个声明称为重复... http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

【讨论】:

  • 所以我的列 a - TID 是一个自增字段和一个主键。我只能指定一个主键,所以我想做的是让主键在“tagid”字段中重复......我正在阅读重复部分!
  • 您不能让主键重复。它使每一行都是唯一的,sql 不会接受它。如果您愿意,您可以创建一个不同的字段并使其不是主键。然后你可能有重复。还有一些叫做聚合函数的东西。可能对您有所帮助的是 Max() 这将获得某些列的最大值。您可能会将其存储在变量中并在查询中使用它。这里是链接http://www.mysqltutorial.org/mysql-aggregate-functions.aspx
【解决方案3】:

您可以存储以前的 id,然后在查询字符串中使用它。

$previous_id = mysql_insert_id();

mysql_query("INSERT INTO `tags` (`tid`,`tagid`,`tagname`) VALUES('','$previous_id','{$tagname}')");

【讨论】:

  • 有趣的想法。大多数时候这是一个单独的查询,所以我不一定要循环并创建一个过去的 id 来捕获...... mysql_insert_id 是否总是与下一个自动增量值相同? :)
猜你喜欢
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2015-07-05
  • 2014-02-21
  • 2010-10-11
  • 2015-04-27
相关资源
最近更新 更多