0

在 Mysql 中,我在 mysql 表中使用 Insert 命令插入一行,现在我想要插入最后一行的 Id,我正在使用

SELECT LAST_INSERT_ID() ;

但它每次都给我 0 作为输出。请帮助我。

4

5 回答 5

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 无效。

于 2012-10-12T12:11:39.503 回答
1

为什么要选择不是由插入自动生成但传递给它的东西?原因是您在插入语句中使用了 UUID()。我建议您首先选择 UUID,然后将其传递给插入

SELECT @id := UUID();
INSERT INTO tablename(id, value) VALUES(@id, somevalue)
于 2012-10-12T12:11:50.537 回答
0

如果要从最后插入的 id 中选择所有列,可以这样:

SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table)
于 2014-02-10T17:23:02.613 回答
0

你正在为自动增量分配一个 uuid 这是你做错了什么

自动增量字段将自动插入

除此之外,您将在 LAST_INSERT_ID() 中获得 0 结果

于 2012-10-12T12:09:57.713 回答
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);
于 2012-10-12T12:21:33.540 回答