MySQLデータベースについてです。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/31 12:13:48
  • 終了:--

回答(2件)

id:kimizu No.1

kimizu回答回数726ベストアンサー獲得回数212006/01/31 14:30:11

ポイント50pt

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

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

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

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

INSERT IGNORE INTO で

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

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

出来そうです。

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

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

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

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

WARNINGになります。


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

なりませんね。

id:patacyan

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

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

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

2006/02/02 12:25:59
id:iww No.2

いわわ回答回数101ベストアンサー獲得回数102006/01/31 18:18:02

ポイント30pt

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で空いているところを探して使うようにするしかないと思います。

id:patacyan

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

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

ぜひ、検討してみます。

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

2006/02/02 13:35:26

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません