提问人:Eli 提问时间:5/17/2009 最后编辑:Eli 更新时间:5/17/2009 访问量:3617
MySQL current_insert_id()?(除 last_insert_id())
MySQL current_insert_id()? (Not last_insert_id())
问:
我正在插入一行带有 char 列的行,用于基于行的自动 id(除其他外)的哈希值。
我知道我可以插入它,获取insert_id,计算哈希值并更新它。
有谁知道在单个查询中执行此操作的方法?您需要在插入时insert_id行。这是完全不可能的,还是有类似current_insert_id()的东西......
谢谢!
答:
不,MySQL中没有函数可以为您提供.current_insert_id()
从 MySQL 中的字段获取生成的 ID 值的唯一方法是执行 INSERT,然后调用 。因此,您执行单独的 UPDATE 来计算哈希值的计划可能是您必须做的。AUTO_INCREMENT
last_insert_id()
我能想到另外两种选择:
在 INSERT 之前,使用除 .例如,请参阅
UUID()
函数。AUTO_INCREMENT
SET @id = SELECT UUID(); INSERT INTO MyTable (id, hash) VALUES (@id, hash(@id...));
请勿在哈希计算中包含 ID。
据我所知,在一个查询中,MySQL中没有办法做到这一点,但是您可以在选择的服务器端脚本语言中执行以下操作:
<?php
$query = mysql_query("SHOW TABLE STATUS LIKE 'MyTable'");
$row = mysql_fetch_assoc($query);
$next_id = $row['Auto_increment'];
?>
...它为您提供了要合并到 SQL 中的 ID。
编辑:我还找到了这个答案,可能会有所帮助。
评论
当我进行插入时,我会做这样的事情:
INSERT INTO table (col1,col2) VALUES (data1,data2);SELECT LAST_INSERT_ID()
然后像获取数据一样运行查询。在 VB.NET 中,语法是(假设您有 MySql.Data.MySqlClient .dll):
Dim sql As String = "[sql string above]"
Dim dr As MySqlDataReader = YourRetrieveDataFunction(sql)
dr.Read()
yourObjectInstance.ID = dr(0)
dr.Close
从技术上讲,这是两个查询,但对数据库只有一个命中:)
评论
您可以从 中查询下一个要使用的值。表,那里的列。(您可能正在为争用条件设置自己?information_schema
TABLES
AUTO_INCREMENT
评论