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);
これの問題点は
uid
が
auto_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 に制限されます。
これは、アプリケーションから見て、かなり悪い振る舞いであると思われます。特に、後日レプリケーションを実装する場合は、一貫して使用されるように本当に注意する必要があります。
関連
-
[解決済み] SQLエラー。ORA-01861:リテラルは、フォーマット文字列01861に一致しません。
-
MySQLにおけるvarchar型とchar型の違い
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLで初期値を設定し、自動インクリメントするには?
-
[解決済み】MySQLのDatetimeカラムにデフォルト値を設定する方法とは?
-
[解決済み】MySQLのSELECTが多すぎるフィールドを返した場合、ターミナルに表示するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのLike演算子に関する詳細
-
MySQLのWhereの使用方法について説明します。
-
MySQLインデックスベースストレステストの実装
-
SpringBootのMySQLへの接続は、バックエンドのインターフェイスの操作方法を書き込むためのデータを取得するために
-
[解決済み】マルチパート識別子をバインドできませんでした。
-
[解決済み】MySQL - オペランドは1つのカラムを含む必要があります。
-
SQLException。オペランドは1列でなければなりません。
-
[解決済み] SQLを使用してSUMとSUBTRACTを行うには?
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?