在MySQL数据库中设置行的唯一ID

时间:2011-01-12 05:58:28

标签: php mysql sql

我想为添加到我的数据库的每个项目设置一个唯一的ID,类似于Drupal节点。只是不确定在向数据库添加新项目时我怎么知道下一个数字是什么。 MySQL的声明是:

$query = "INSERT INTO `HERDSIRES`(uid, name, color, gender) VALUES ( VALUE of next uid, '$name', '$color',  '$gender')";

我想我需要在INSERT之前查询数据库,找出最后一个uid的值然后再加1,然后将其保存到变量中。我不确定这是不是最好的方式。

有什么想法?

4 个答案:

答案 0 :(得分:6)

如果数据库将列设置为自动生成,则只需在null语句中传递INSERT,MySQL将完成剩下的工作。

例如,在指定了auto_increment的主键列上。

你的意思是:

INSERT INTO `HERDSIRES`(uid, name, color, gender) 
VALUES ( null, '$name', '$color',  '$gender')";

或者你可以完全省略它,因为你无论如何都在枚举字段:

INSERT INTO `HERDSIRES`(name, color, gender) 
VALUES ( '$name', '$color',  '$gender')";

编辑:以下是如何使用PHP从表中获取最后一个自动生成的ID:

$query = mysql_query('INSERT INTO ...');
$new_row_id = mysql_insert_id();

// do something with $new_row_id

答案 1 :(得分:2)

你有什么理由不能使用autoincrement吗? SQL会自动为您处理。

答案 2 :(得分:1)

将表中的字段设置为自动递增,然后在插入时不设置字段。

答案 3 :(得分:1)

看看:

How to Get the Unique ID for the Last Inserted Row

  

对于LAST_INSERT_ID(),最多   最近生成的ID保留在   服务器基于每个连接。   它不会被其他客户更改。   如果你更新,它甚至没有改变   另一个AUTO_INCREMENT列,带有   非神经价值(即一个值   不是NULL而不是0)。运用   LAST_INSERT_ID()和AUTO_INCREMENT   同时从多个列   客户完全有效。每   客户端将收到最后插入的   客户端的最后一个语句的ID   执行。