2017-11-27 12 views
0

最後のIDの値をテーブルに入れたいと思っています。どのように私はmysqlでこれを行うことができますか? 例の場合:DB2で私たちは、上記のステートメントは、MySQLに変換する必要がある最後に挿入されたIDをmysqlの式で取得する

SET var_ID = (SELECT ID FROM NEW TABLE (INSERT INTO val_CLIENT(E_VER, NAME, TYPE) VALUES(0, val_NAME, 502))); 

を持っています。これどうやってするの?

+1

あなたは2 SQL、最初のインサートを使用して取得することができます最後のIDは次に秒のSQLで使用 –

答えて

2

LAST_INSERT_ID()機能を使用できます。

あなたのINSERT文を実行します。

INSERT INTO val_CLIENT(E_VER, NAME, TYPE) VALUES(0, val_NAME, 502); 

をストアドプロシージャでそれをやっている場合は、あなたがこれを変更する必要がありますが、あなたがそれを選択するために探している場合によっては。

変数として保存するには、SETステートメントを使用できます。

SET @VarID = (SELECT LAST_INSERT_ID()); 
+0

だから私は値を設定した後に挿入する必要があると言っている:SET @ VarID =(SELECT LAST_INSERT_ID()); INSERT INTO val_CLIENT(E_VER、NAME、TYPE)VALUES(0、val_NAME、502); – user3803112

+1

'AUTO_INCREMENT'属性を持つテーブルに行を挿入すると(詳細はこれを必要としませんが、一般的な使い方です)、そのIDを使用してIDを取得します。外部キー関係などの追加レコードを挿入する可能性があります。 – kchason

+0

okありがとうございました。 – user3803112

2

あなたID列がINSERT声明

SELECT LAST_INSERT_ID() as ID 

後、タイプAUTO_INCREMENTの使用LAST_INSERT_ID()ある場合ただし、同じ接続を使用して同時要求のために、これは矛盾する結果につながります。その場合には、次のクエリは、安全な賭けです:

SELECT ID FROM val_CLIENT 
ORDER BY ID DESC 
LIMIT 1 
1

可能クエリ:

SELECT ID table ORDERからID DESCをLIMIT BY 1

+0

これは競合条件がないことを前提としています(つまり、他の誰かが別の 'INSERT'を実行していないということです)。 – kchason

関連する問題