忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


2024/05/08 21:19 |
MySQLのINSERTでオートインクリメントの値を取得する方法
MySQLで、オートインクリメントを設定した主キーの値を、別のカラムでINSERT時に使用したい、という要件があったのですが、見事にハマりました(汗)


MySQLではINSERTするときに副問合せ(サブクエリ)に同一のテーブルを指定できないという制約があります。(さっき調べたところマニュアルに記述がありました。)
なので、オートインクリメントの値を使用したい場合、別のSQL文にするとかちょっとカッコ悪いことになってしまいます。


また、直接値を取りにいっても値は0になります。(オートインクリメントされる前なので当たり前といえば当たり前なんですけどね…。)

[SQL]

INSERT INTO table_name VALUES ('', 'hoge', auto_increment_column);



ついでに、MAX関数で取得しようとすると、

[SQL]

INSERT INTO table_name VALUES ('', 'hoge', max(auto_increment_column) + 1));

[結果]

#1111 - Invalid use of group function


「無効なグループ関数の使用」と言われてしまいます。
で、解決方法ですが、灯台下暗し。
『INSERT ~ SELECT』構文なるものがありました…valuesばっか使ってたので存在すら知らなかった。。。


『INSERT ~ SELECT』構文のマニュアル
dev.mysql.com/doc/refman/4.1/ja/insert-select.html



で、解法ですが、下記の通り。


[SQL]

INSERT INTO table_name  ( text ) SELECT max(auto_increment_column) + 1 FROM table_name;


彷徨った果に見つけた下記のブログに感謝します。
このブログも誰かの助けになればよいのですが。


[参考文献]
oldblog.xenophy.com/index.php



PR

2008/04/30 01:25 | Comments(0) | TrackBack() | MySQL

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<画像の表示をタグでやるかCSSでやるか | HOME | 現在時刻をミリ秒まで取得する>>
忍者ブログ[PR]