人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLデータベースについてです。
数値型カラムで、AUTO_INCREMENTの場合、そのMAXを越えるとエラーが出てスクリプトが
中断されるのでしょうか。
例えば、TINYINT AUTO_INCREMENTで127まで入っているとき、次のINSERT時です。
そしてATLERで範囲が大きいカラム型に変更する以外の回避策、例えば
INSERT IGNOREなどでエラーを抑えられますか。

●質問者: patacyan
●カテゴリ:コンピュータ
✍キーワード:Max MySQL エラー カラム スクリプト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kimizu
●50ポイント

http://blog.livedoor.jp/nipotan/archives/7100625.html

MySQL の auto_increment が duplicate key になる恐れ - にぽたん研究所

MAXを超えると確実にエラーになります。

正常に処理させるにはカラム型の変更以外の方法はなさそうです。

http://www.mysql.gr.jp/mysqlml/mysql/msg/6311

mysql:6311

INSERT IGNORE INTO で

「重複するキー値の挿入を読み飛ばす」

という処理は可能ですので、中断を防ぐことは

出来そうです。

http://dev.mysql.com/doc/refman/4.1/ja/insert.html

MySQL 4.1 リファレンスマニュアル :: 6.4.3 INSERT 構文

auto_incrementの値は最大値か最小値に切り落とされて

挿入が試みられると思われます。

WARNINGになります。


エラーで中断はしないと思いますが、正常な処理には

なりませんね。

◎質問者からの返答

たくさん調べていただいてありがとうございます。

おそらく該当カラムがPRIMARY KEYでなければ、よかったんでしょうけど、PRIMARY KEYでしたので、このままではエラーが起きる日がやがて来るようです。

早急に設計を見直してみます。


2 ● いわわ
●30ポイント

http://dev.mysql.com/doc/refman/4.1/ja/insert-select.html

MySQL 4.1 リファレンスマニュアル :: 6.4.3.1 INSERT ... SELECT 構文

おっしゃる通り、MAXを超えるとエラーになります。そして、IGNOREをつければ変更行0としてスルーします。


エラーにならずかつ出来るだけ詰めるようにするには、-127?127で空いているところを探して使うようにするしかないと思います。

◎質問者からの返答

なるほど、空いてるところに入れるという回避策もありですね。

このINSERT SELECT構文はMySQLのバージョン3.23.58 でも使用できましたよね。

ぜひ、検討してみます。

解決しそうです。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ