Является ли их 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
.
От 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.
Но попытка вставить -ve целое число в неподписанный int столбец не будет вызывать ошибку – Raaghu
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
@ user962449 Я не знаю, я никогда не включал такую ошибку. Почему бы вам не попробовать? – Alnitak
Если вы работаете в строгом режиме SQL это будет сгенерировано сообщение об ошибке и вставки/обновления потерпит неудачу.
Я обычно создаю пользовательскую функцию для такого рода вещей. (В этом случае очень тривиальное «if (expr1, expr2, expr3)» будет делать трюк
- 1. Выделите отрицательные числа красным
- 2. отрицательные числа с плавающей запятой, представленные как отрицательные целые числа?
- 3. Положительные и отрицательные числа
- 4. Случайные и отрицательные числа
- 5. Отрицательные числа со временем
- 6. Составители и отрицательные числа
- 7. Разрешить отрицательные десятичные числа
- 8. C++ двоичные отрицательные числа
- 9. str_repeat и отрицательные числа
- 10. Отрицательные числа в процентах
- 11. System.nanotime, дающий отрицательные числа
- 12. не получают отрицательные числа
- 13. #define отрицательные числа?
- 14. Добавить отрицательные шестнадцатеричные числа
- 15. Отрицательные числа в Y86
- 16. формат фото отрицательные числа
- 17. Modulo, используя отрицательные числа
- 18. Отрицательные целые числа> Положительные целые числа?
- 19. Android Распознавание речи: отрицательные числа
- 20. Неожиданные отрицательные числа в Java
- 21. Сумма цифр (INC. Отрицательные числа)
- 22. Сканер не сканирует отрицательные числа
- 23. Powershell неправильно считывает отрицательные числа
- 24. Круглые отрицательные числа до нуля
- 25. Haskell взаимные отрицательные целые числа?
- 26. Как Java вычисляет отрицательные числа?
- 27. Конструкция массива и отрицательные числа
- 28. Различают отрицательные и положительные числа?
- 29. clock_t возвращает большие отрицательные числа
- 30. Почему функция генерирует отрицательные числа?
Это очень полезная идея. Я изменил некоторые поля на unsigned, но они вызвали существующие методы обработки ошибок, и мне пришлось их удалить. Это полезно, чтобы избежать бесцельного запроса/подключения для проверки. – M1ke