mysqlのintフィールドは負の数が許されていませんか?より具体的には、負の数がフィールドに挿入されている場合は、ゼロを挿入します。私たちはスコアリングシステムを持っており、人々が否定的なスコアを持つことを許さないので、私はこれを尋ねます。だから、彼らのスコアが0になったら、代わりにゼロを挿入するだけです。私はこれを行うには、ユーザーのスコアを照会することなく、それがゼロになるかどうかをチェックすることを試みている。mysqlは負の数を防ぎます
答えて
他人が推薦しているDDLの変更(INT UNSIGNED)に加えて、アプリケーションロジックも変更します。言う:
私はそれが怒鳴るゼロに落ちるかどうかを確認するために、ユーザーのスコアを照会することなく、これをやろうとしている
あなたは別々に明示的にチェックする必要はありません。クエリ:
UPDATE your_table
SET score = GREATEST(score + ?, 0) -- This '?' is the adjustment to the score
WHERE user_id = ?
アプリケーションでscore
をゼロ以下に更新することはできません。また、SQLモードによってエラーや警告が生成されることもありません。
はい。 int
フィールドを作成し、UNSIGNED
とマークすることができます。 MySQL 5.0 Reference Manualから
:
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647.
The unsigned range is 0 to 4294967295.
しかし、符号なしint列に-ve整数を挿入しようとするとエラーがスローされません – Raaghu
MySQLは整数型のためUNSIGNED
修飾子を持っています。
負の値はゼロにクランプされますが、警告を生成します:あなたは、厳密なSQLモードで実行している場合は
mysql> create table test (id int(5) unsigned not null);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into test values (-1), (5), (10);
Query OK, 3 rows affected, 1 warning (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 1
mysql> select * from test;
+----+
| id |
+----+
| 0 |
| 5 |
| 10 |
+----+
3 rows in set (0.01 sec)
エラーが発生した場合、警告によりmysqlエラーが発生しますか? – user962449
@ user962449私は知らない、私はそれをキャッチエラーを有効にしたことはありません。なぜあなたはそれを試してみませんか? – Alnitak
が、これはエラーと失敗する挿入/更新をスローしていました。
私はこの種のもののためにユーザ定義関数を作成します。 (この場合、非常に些細な "if(expr1、expr2、expr3)"はトリックを行います
- 1. Laravelのリレーションモデルの熱心な負荷を防ぎます
- 2. PHPはMySQLの競合状態を防ぎます
- 3. Vue.jsはレイアウトのジャンプを防ぎます
- 4. UITableViewCellのUITextViewはセグを防ぎます
- 5. TextInputはScrollViewのスクロールを防ぎます
- 6. CKEDITOR.setDataは.on関数でのイベントの添付を防ぎます
- 7. ASP.NETはブラウザ 'バック'を防ぎます
- 8. event.preventDefaultはajaxコールを防ぎます
- 9. AnkhSVNは自動マージを防ぎます
- 10. pythonはオペレータコールを防ぎます
- 11. Javaソケットはパネルを防ぎますか?
- 12. イオンレンジ入力はスクロールを防ぎます
- 13. 防ぎsudoを
- 14. InternalErrorを防ぎます:再帰が多すぎます
- 15. MySQL - テーブルトリガーはテーブルへの挿入を防ぎ、エラーを返しません?
- 16. 防ぎ、ユーザー、3つの小数
- 17. 防ぎ型キャスト
- 18. 防ぎテキストボックス(ExtJSの)
- 19. PHPはhtmlspecialcharsがURLの数字を変換するのを防ぎます
- 20. 負の指数関数近似:カーブが高すぎる
- 21. jQuery UIダイアログ(モーダル)、ポストバックを防ぎます
- 22. 防ぎアンカー行動
- 23. 防ぎ変更フィルタオブジェクト
- 24. .htaccessを使用するDirectoryIndexはアセットのロードを防ぎます
- 25. Symfonyの教義のフィクスチャは、テーブルのパージを防ぎます
- 26. MySQLは小数フィールドの丸めを防止します
- 27. UISliderのタッチはUIScrollViewのスクロールを防ぎます
- 28. Nugetはソリューション内のパッケージフォルダの生成を防ぎます
- 29. はWidgetProviderのonUpdateのトリガーを防ぎます
- 30. iCloudドライブは特定のファイルのオフロードを防ぎます
これは非常に便利なアイデアです。いくつかのフィールドを符号なしに変更しましたが、既存のエラー処理メソッドをトリガし、それらを削除する必要がありました。これは、チェックする無意味なクエリ/接続を避けるために便利です。 – M1ke