Mysqlでは、mysqlのテーブルにInsertコマンドを使用して行を挿入していますが、最後の行のIDを挿入する必要があります。
SELECT LAST_INSERT_ID() ;
しかし、毎回出力として0が返されます。これで私を助けてください。
Mysqlでは、mysqlのテーブルにInsertコマンドを使用して行を挿入していますが、最後の行のIDを挿入する必要があります。
SELECT LAST_INSERT_ID() ;
しかし、毎回出力として0が返されます。これで私を助けてください。
LAST_INSERT_ID()
AUTO_INCREMENT
列に対してMySQLサーバーによって自動生成された値のみを返します。特定の値を挿入すると、自動生成は行われず、によって値が返されることはありませんLAST_INSERT_ID()
。
LAST_INSERT_ID
自分に値を割り当てることができます。
INSERT INTO table (uuid) VALUES (LAST_INSERT_ID(12345));
LAST_INSERT_ID(value)
value
への後続の呼び出しによって返されるように割り当てLAST_INSERT_ID()
、同じ値を返します。残念ながら、これは整数値に対してのみ機能し、UUIDでは役に立ちません。
挿入によって自動生成されないが、それに渡されるものを選択したいのはなぜですか?その理由は、挿入ステートメントでUUID()を使用しているためです。最初にUUIDを選択してから、それを挿入に渡すことをお勧めします
SELECT @id := UUID();
INSERT INTO tablename(id, value) VALUES(@id, somevalue)
自動インクリメントにuuidを割り当てていますが、これは間違っていることです
自動インクリメントフィールドが自動的に挿入されます
それ以外の場合、LAST_INSERT_ID()で0の結果が得られます
まず、自動インクリメントされた1行を使用する必要があります。
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);
最後に挿入されたIDからすべての列を選択する場合は、次のように実行できます。
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table)