繁体   English   中英

获取当前的auto_increment值

[英]Get current auto_increment value

我正在使用php为我的表执行mysql插入。 自动增量列名称为“ link_id”,“ alias”列用于创建SEO友好的网址。

在插入期间,我想在我的别名列的末尾附加link_id值。

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

我不想再次查询。

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

谢谢

您应该使用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值。

您是否考虑过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。 问题是并发性。 很少见,但是两个人可以得到相同的ID,从而造成各种混乱。 尝试预测值时要格外小心。

我在SELECT端处理这种情况。

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

举个例子

在我的选择中,我将“从表名中选择concat(aliasroot,link_id)作为别名”

您可以使用mysql_insert_id()++,尽管这并不总是可靠的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM