我正在使用 php 为我的表做 mysql 插入。自动增量列名为“link_id”,“别名”列用于使 SEO 友好的 url。
在插入过程中,我想在别名列的末尾附加 link_id 值。
所以我需要知道插入的 link_id 值是什么。
我不想做另一个查询。
mysql_insert_id() 不起作用,因为它使用的是以前的查询,而不是当前的查询。
谢谢
我正在使用 php 为我的表做 mysql 插入。自动增量列名为“link_id”,“别名”列用于使 SEO 友好的 url。
在插入过程中,我想在别名列的末尾附加 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'"))
它将在列中为您提供新的 auto_increment 值column_name
。
您是否考虑过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 = next id。问题是并发;很少见,但是两个人可以得到相同的id,引起各种混乱。尝试预测该值时要非常小心。
我在 SELECT 端处理这种类型的场景。
例如:插入 tablename(aliasroot) values('index.php?link_id=');
例如,这会给你
在我的选择中,我会执行“从表名中选择 concat(aliasroot,link_id) 作为别名”
您可以使用 mysql_insert_id() ++,尽管这并不总是可靠的。
更好的是插入查询,然后使用 CONCAT() 附加当前 id