C# 如何选择最后一个插入id而不发生冲突

C# 如何选择最后一个插入id而不发生冲突,c#,mysql,sql,C#,Mysql,Sql,我有一张桌子: CREATE TABLE MyTable ( UserID BIGINT NOT NULL AUTO_INCREMENT, Name VARCHAR(50) NOT NULL, PRIMARY KEY (UserID)); 现在我需要插入值并获取该值的最后一个插入键。现在我是这样做的: using (MySqlConnection connection = new MySqlConnection(CONNECTION_STRING)) { connectio

我有一张桌子:

CREATE TABLE MyTable (
  UserID BIGINT NOT NULL AUTO_INCREMENT,
  Name VARCHAR(50) NOT NULL,
  PRIMARY KEY (UserID));
现在我需要插入值并获取该值的最后一个插入键。现在我是这样做的:

using (MySqlConnection connection = new MySqlConnection(CONNECTION_STRING))
{
    connection.Open();
    string query = $"INSERT INTO MyTable VALUES('Bob');\n" +
                   $"SELECT last_insert_id();";

    MySqlCommand command = new MySqlCommand(query, connection);
    var dataReader = command.ExecuteReaderAsync();
    await dataReader;

    long id = -1;
    while (dataReader.Result.Read())
    {
        string idString = (dataReader.Result as IDataRecord)[0].ToString();
        id = long.Parse(idString);
    }

    return id;
}

但是,如果一次会有多个查询呢?是否可能有两个同时执行INSERT查询的命令,然后通过last_INSERT_id()返回相同的值?如何确保last_insert_id()在一个命令中返回与其insert相对应的值?

否,last_insert_id是按每个连接维护的,因此如果两个连接同时运行,一个不会得到另一个的插入值。

是否有可能两个同时执行的命令执行插入查询,然后通过最后一个插入id()返回相同的值,不,它们不会返回相同的值,它是唯一的,因为它代表成功插入数据的第一个生成值;它是每个记录的。可能是@JohnathanBarclay的副本在MySQL中没有这样的副本,即要求解决问题,而这个问题不是您建议的链接的副本,最后的插入id类似于Sql Server的范围标识。它是每个连接的,仅限于当前作用域(触发器触发后会恢复该值,因此触发器不会影响当前作用域中的值,即使它们本身也会生成id)。