在Mysql中我在mysql表中插入一行插入命令,现在我想要最后一行的Id插入,我正在使用
SELECT LAST_INSERT_ID() ;
但它每次都给我0输出。 请帮助我。
答案 0 :(得分:4)
LAST_INSERT_ID()
仅返回MySQL服务器为AUTO_INCREMENT
列自动生成的值;插入特定值时,不会发生自动生成,LAST_INSERT_ID()
也不会返回任何值。
您可以自己为LAST_INSERT_ID
分配一个值:
INSERT INTO table (uuid) VALUES (LAST_INSERT_ID(12345));
LAST_INSERT_ID(value)
指定后续调用value
返回LAST_INSERT_ID()
,并返回相同的值。不幸的是,这仅适用于整数值,对UUID不起作用。
答案 1 :(得分:1)
为什么要选择一些不是由insert自动生成但传递给它的东西?原因是您在insert语句中使用UUID()。我建议你先选择UUID,然后将其传递给插入
SELECT @id := UUID();
INSERT INTO tablename(id, value) VALUES(@id, somevalue)
答案 2 :(得分:0)
你正在为自动增量分配一个uuid,这就是你做错了
将自动插入自动增量字段
除此之外,您将获得LAST_INSERT_ID()
中的0结果答案 3 :(得分:0)
首先,您必须使用一个自动递增的行。
如果您使用的是php,请使用此方法:
$foo = mysql_insert_id();
看看http://php.net/manual/en/function.mysql-insert-id.php
在c#中使用如下:
connection.Open();
cmd = new MySql.Data.MySqlClient.MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = "INSERT INTO o_test(game_id, user_id, date) values(?game_id, ?uid, ?date)";
cmd.Prepare();
cmd.Parameters.AddWithValue("?game_id", null);
cmd.Parameters.AddWithValue("?uid", words[1]);
cmd.Parameters.AddWithValue("?date", words[2]);
cmd.ExecuteNonQuery();
int game_id;
cmd.Parameters.Add(new MySqlParameter("newId", cmd.LastInsertedId));
game_id = Convert.ToInt32(cmd.Parameters["@newId"].Value);
答案 4 :(得分:0)
如果要从上次插入的ID中选择所有列,可以这样:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table)