是他們的一個int字段在mysql中負數不允許?或者更具體地說,如果在該字段中插入一個負數,它將插入一個零。我問這是因爲我們有一個得分系統,我們不允許人們得到負分數。因此,如果他們的分數達到零下,它將只是插入一個零。我試圖做到這一點,而不必查詢用戶的分數來檢查它是否會下降到零。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
。
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647.
The unsigned range is 0 to 4294967295.
但試圖插入-ve整數到unsigned int列不會拋出錯誤 – Raaghu 2018-01-06 17:05:28
MySQL有一個UNSIGNED
預選賽整數類型。
負值將被鉗位到零,但會產生一個警告:
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 2012-01-09 20:31:33
@ user962449我不知道,我從來沒有打開過這樣的錯誤。你爲什麼不嘗試它? – Alnitak 2012-01-09 20:35:40
如果是在嚴格模式下運行,這將引發錯誤和插入/更新將失敗。
我通常會爲這類事情創建一個用戶定義的函數。 (在這種情況下,一個非常簡單的「if(expr1,expr2,expr3)」將會訣竅
- 1. 如何防止Mysql中的負數
- 2. 在TextView中防止負數
- 3. 防止負數破壞
- 4. MySQL的防止雙重負荷
- 5. 防止負載ngFor
- 6. $ INC防止負值
- 7. 防止小負數印刷爲「-0」
- 8. 防止負值從文本
- 9. 防止被稱爲負載
- 10. 防止jSpinner中的負值
- 11. 防止IE表示負載
- 12. 谷歌登錄 - 防止自動負載
- 13. 如何防止IE8的JavaScript庫負載
- 14. PHP - 防止被插入MySQL數據庫
- 15. 防止Mysql的被覆蓋的數據
- 16. 防止計數()在mysql中返回「NULL」
- 17. 如何防止workTicker和breakTicker函數進入負數
- 18. 如何防止輸入負數或4位以上的數字
- 19. 如何防止數據存儲自動IDS是負數
- 20. 防止輸入數量在JQuery中變爲負數
- 21. 防止在JS點擊計數器的負數
- 22. 防止刪除列在MySQL
- 23. Textarea防止mysql注入 - PHP
- 24. mySQL - 防止重複預訂
- 25. MySQL:如何防止刪除?
- 26. 防止mysql MyISAM表崩潰
- 27. 防止倍數
- 28. 在對象上生成負面ID並防止整數溢出
- 29. Silverstripe防止負載數據提交表單
- 30. 我們如何防止用戶輸入負數?
這是一個非常有用的想法。我已經將一些字段更改爲無符號,但他們觸發了現有的錯誤處理方法,我不得不刪除它們。這對避免無意義的查詢/連接進行檢查很有用。 – M1ke 2013-10-30 11:43:44