¿Es su un campo int en mysql donde los números negativos no están permitidos? o más específicamente si se inserta un número negativo en el campo, insertará un cero. Pregunto esto porque tenemos un sistema de puntuación y no permitimos que las personas tengan puntuaciones negativas. Entonces, si su puntaje llega a cero, simplemente insertará un cero en su lugar. Intento hacer esto sin tener que consultar el puntaje del usuario para verificar si caerá por debajo de cero.mysql previene los números negativos
Respuesta
Además del cambio DDL (INT UNSIGNED) que otros han recomendado, también cambiaría la lógica de la aplicación. decir:
estoy tratando de hacer esto sin tener que consultar la puntuación del usuario para comprobar si va a caer bajo cero
Usted no tiene que comprobar explícitamente en un aparte. consulta:
UPDATE your_table
SET score = GREATEST(score + ?, 0) -- This '?' is the adjustment to the score
WHERE user_id = ?
Ahora su aplicación no puede ACTUALIZAR score
para caer bajo cero, ni generará errores o advertencias dependiendo del modo SQL.
Sí. Puede crear un campo int
y marcarlo como UNSIGNED
.
De 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.
Pero tratar de insertar -ve entero en la columna no firmada no arrojará el error – Raaghu
MySQL tiene un calificador UNSIGNED
de los tipos enteros.
Los valores negativos se pueden fijar a cero, sino que generará una advertencia:
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)
¿La advertencia causará un error de mysql si tengo un error de captura? – user962449
@ user962449 No lo sé, nunca he activado la captura de errores de esa manera. ¿Por qué no lo intentas? – Alnitak
Si está ejecutando en modo estricto SQL esta lanzaría un error y una inserción/actualización fallaría.
Creo que usualmente creo una función definida por el usuario para este tipo de cosas. (En este caso, un "if (expr1, expr2, expr3) muy trivial" hará el truco
- 1. kadane algoritmo números negativos
- 2. almacenar números negativos
- 3. Números aleatorios y negativos
- 4. Bits representación de números negativos
- 5. Java aleatoria dando números negativos
- 6. ¿Expresión regular de Java para números negativos?
- 7. System.Diagnostics.Stopwatch devuelve números negativos en Elapsed ... properties
- 8. FileStream.ReadByte: ¿Byte nunca son números negativos?
- 9. trabajando con números negativos en python
- 10. Compiladores y representaciones de números negativos
- 11. MySQL MONTHNAME() de los números
- 12. Error de TryParse con números negativos
- 13. Números mod negativos en SQL como excel
- 14. operación de módulo con números negativos
- 15. ¿Cómo se comporta Verilog con números negativos?
- 16. Disposición del teclado del iPhone para números negativos?
- 17. La operación de módulo en números negativos en Python
- 18. extraño comportamiento de Objective-C Mod para números negativos
- 19. La ordenación de Linux no funciona con números flotantes negativos
- 20. ¿Por qué mi función Haskell no acepta números negativos?
- 21. Expresión regular para unir números enteros no negativos en PHP?
- 22. ¿Por qué C++ genera números negativos cuando usa módulo?
- 23. Desplazamiento a la derecha de números negativos en C
- 24. Formato Números negativos entre paréntesis PERO NO con $ symbol?
- 25. Regex para un rango numérico de números negativos?
- 26. Python Argparse: Problema con argumentos opcionales que son números negativos
- 27. Android: qué operador de módulo (% no trabaja con números negativos)
- 28. Cómo poner a cero todos los números negativos en un grupo: por instrucción T-SQL
- 29. ¿Cómo se representan los números negativos en un entero con signo de 32 bits?
- 30. Función predeterminada de php que convierte los números negativos en 0
Esta es una idea muy útil. Cambié algunos campos a unsigned pero desencadenaron métodos de manejo de errores existentes y tuve que eliminarlos. Esto es útil para evitar una consulta/conexión sin sentido para verificar. – M1ke