获取当前的auto_increment值

时间:2009-10-28 17:24:25

标签: php mysql auto-increment

我正在使用php为我的表做mysql插入。 自动增量列名称为“link_id” 和“alias”colum用于制作SEO友好网址。

在我的插入过程中,我想在别名列的末尾添加link_id值。

所以我需要知道插入的link_id值是什么。

我不想再做一次查询。

mysql_insert_id()不起作用,因为它使用以前的查询,而不是当前查询。

由于

4 个答案:

答案 0 :(得分:3)

您应该使用SHOW TABLE STATUS

$query = mysql_query("SHOW TABLE STATUS LIKE tablename");
$row = mysql_fetch_array($query);
$next_id = $row["Auto_increment"];

它将为您提供auto_increment列的当前状态。

<强>编辑:

在一个查询中,您可以这样做:

INSERT INTO table_schema.table_name(column_name) 
VALUES (("SELECT AUTO_INCREMENT 
         FROM INFORMATION_SCHEMA.TABLES 
         WHERE TABLE_SCHEMA = 'table_schema' 
            AND TABLE_NAME = 'table_name'"))

它会在column_name列中为您提供新的auto_increment值。

答案 1 :(得分:2)

您考虑过trigger in MySQL吗?类似的东西:

DELIMITER //
CREATE TRIGGER `add_alias_id` AFTER INSERT ON `someTable`
    FOR EACH ROW BEGIN
        UPDATE 
            `someTable` 
        SET 
            `alias` = CONCAT(`alias`,NEW.`link_id`)
        WHERE
            `link_id` = NEW.`link_id`;
    END;    
//
DELIMITER ;
编辑:我最近在一家公司工作,其旗舰软件曾经假设max(id)+ 1 =下一个id。问题是并发性;这是罕见的,但两个人可以获得相同的身份,导致各种混乱。要非常小心地预测价值。

答案 2 :(得分:2)

我在SELECT端处理这种情况。

例如: 插入tablename(aliasroot)值('index.php?link_id =');

这会给你举个例子

在我的选择中,我会选择concat(aliasroot,link_id)作为tablename'的别名

答案 3 :(得分:0)

你可以使用mysql_insert_id()++,虽然这并不总是可靠的。

最好是插入查询,然后使用CONCAT()附加当前id