是他们的一个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