代码之家  ›  专栏  ›  技术社区  ›  john84

insert into语句后记录的catch id(int auto increment)

  •  2
  • john84  · 技术社区  · 15 年前

    这是我第一次使用MySQL作为我的C应用程序的数据存储,正如我看到的那样,在我决定使用自动递增的int的SQL Server中没有唯一的标识符类型,我现在的问题是,如果我执行一个insert,如何获取我刚添加的记录的ID。

    我的快速而肮脏的解决方案是执行SELECTMAX(ID)FROMTABLE语句。但这似乎不一致。我相信有更好的解决方案,比如mysql_insert_id()(php)。

    知道如何用C语言解决这个问题吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Guffa    15 年前

    你使用这个功能 last_insert_id() 在获取上次创建的ID的查询中:

    select last_insert_id()
    

    您必须使用相同的数据库会话,即相同的连接对象。

    如你所知,你不应该使用 select max(id) 以获取ID,因为这将获取任何会话(而不是此特定会话)创建的最后一个ID。如果两个插入是为单独的用户及时完成的(这样两个插入都发生在其中一个选择获取ID之前),那么它们都将获取最后一个插入的ID。

        2
  •  2
  •   john84    15 年前

    Guffa的解决方案是一种可能性,多亏了这一点,但我发现我也可以在命令中使用lastinsertedo,一个简短的示例:

    MySqlCommand cmd = new MySqlCommand("INSERT INTO users (Username, Prename, Lastname, Password) VALUES (\"" +
                                                user.Username + "\",\"\", \"\",\"\")", new MySqlConnection(u.ConnectionString()));
            cmd.CommandType = CommandType.Text;
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            long id = cmd.LastInsertedId;
    

    但是,如果命令执行存储过程,这就不起作用。

    当做, 约翰尼斯