我正在做我的表使用php的mysql插入。 自動增量列名稱是「link_id」 和「別名」列用於使SEO友好的網址。獲取當前auto_increment值
在我插入期間,我想在我的別名列的末尾添加link_id值。
所以我需要知道什麼是被插入的link_id值。
我不想做另一個查詢。
mysql_insert_id()不起作用,因爲它使用以前的查詢,而不是當前的查詢。
感謝
我正在做我的表使用php的mysql插入。 自動增量列名稱是「link_id」 和「別名」列用於使SEO友好的網址。獲取當前auto_increment值
在我插入期間,我想在我的別名列的末尾添加link_id值。
所以我需要知道什麼是被插入的link_id值。
我不想做另一個查詢。
mysql_insert_id()不起作用,因爲它使用以前的查詢,而不是當前的查詢。
感謝
你可以使用mysql_insert_id()++,儘管這並不總是可靠的。
這將是更好的將是插入查詢,然後使用CONCAT()
您應該使用追加電流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值。
正如Dereleased指出的,您對$ next_id的假設很容易出現競爭狀況。 – melfar 2009-10-28 17:47:29
你考慮過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 = next id的公司。問題是併發性;這很少見,但是兩個人可以得到相同的身份證,導致各種各樣的混亂。試圖預測價值時要非常小心。
mysql_insert_id()++將無法工作,因爲mysql_insert_id()是連接具體。這是一個安全的假設,只有一個插入發生在這張表上。 – longneck 2009-10-28 17:33:00