繁体   English   中英

MySQL最后插入的行ID

[英]Mysql last inserted row Id

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

SELECT LAST_INSERT_ID() ;

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

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。

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

SELECT @id := UUID();
INSERT INTO tablename(id, value) VALUES(@id, somevalue)

您正在分配一个自动增量一个uuid,这就是您做错了

自动增量字段将自动插入

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

首先,您必须使用一条自动递增的行。

如果您使用的是php,请使用以下方法:

 $foo = mysql_insert_id();

看看http://php.net/manual/zh/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);

如果要从最后插入的ID中选择所有列,则可以采用以下方式:

SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM