1. ホーム
  2. mysql

MySQL に 0 を有効な自動インクリメント値として扱わせる方法

2023-09-20 02:15:43

質問

長い話になりますが、私はSQLファイルを skel スタイル ファイルとしてインポートしたいので、これはプログラムによって繰り返し実行されることになります。SQLファイルは好きなように編集できるのですが、アプリケーションそのものは触りたくないんです。

このアプリケーションでは userid = 0 を使用して匿名ユーザーを表現しています。また、この「ユーザー」を表すために、データベース内に関連する(空白の)項目を持っています。したがって、私の skel.sql の行はこのようになります。

INSERT INTO `{{TABLE_PREFIX}}users` VALUES (0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);

これの問題点は uidauto_increment のフィールドで、それに対して、技術的には 0 は無効な値です。少なくとも、0 に設定すると、基本的に MySQL に、"次の ID をこのフィールドに挿入してください、"

さて、私は INSERT を置いた後に UPDATE クエリを SQL ファイルに挿入したいのですが、MySQL に一般的に伝える方法はありますか? 0 を挿入したいとMySQLに伝える方法はありますか?

どのように解決するのですか?

私が得た答えから ここで :

使用することができます。

SET [GLOBAL|SESSION] sql_mode='NO_AUTO_VALUE_ON_ZERO'

説明したように ここで を使用すると、MySQL が 0 の INSERT/UPDATE ID を次のシーケンス ID として解釈するのを防ぐことができます。このような動作は NULL に制限されます。

これは、アプリケーションから見て、かなり悪い振る舞いであると思われます。特に、後日レプリケーションを実装する場合は、一貫して使用されるように本当に注意する必要があります。