È un loro campo int in mysql dove i numeri negativi non sono consentiti? o più nello specifico se un numero negativo è inserito nel campo, inserirà uno zero. Lo chiedo perché abbiamo un sistema di punteggio e non permettiamo alle persone di avere punteggi negativi. Quindi se il loro punteggio raggiunge lo zero inferiore, verrà invece inserito uno zero. Sto provando a farlo senza dover interrogare il punteggio dell'utente per verificare se scenderà al di sotto dello zero.mysql previene i numeri negativi
risposta
In aggiunta alla modifica DDL (INT UNSIGNED) che altri hanno raccomandato, cambierei anche la logica dell'applicazione. dire:
che sto cercando di fare questo senza dover interrogare punteggio dell'utente per controllare se cadrà a zero soffietto
non controlla in modo esplicito in un separato. query:
UPDATE your_table
SET score = GREATEST(score + ?, 0) -- This '?' is the adjustment to the score
WHERE user_id = ?
Ora l'applicazione non può AGGIORNARE score
per scendere sotto zero, né genererà errori o avvisi a seconda della modalità SQL.
Sì. È possibile creare un campo int
e contrassegnarlo come UNSIGNED
.
Da 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.
Ma provare a inserire -ve integer alla colonna int unsigned non genera l'errore – Raaghu
MySQL ha una qualificazione UNSIGNED
per tipi interi.
valori negativi saranno fissati a zero, ma genererà un avvertimento:
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)
L'avviso causerà un errore mysql se si verifica un errore? – user962449
@ user962449 Non so, non ho mai attivato l'errore di cattura in questo modo. Perché non lo provi? – Alnitak
Se si esegue in modalità SQL rigorosa questo getterebbe un errore e un inserimento/aggiornamento fallirebbe.
Io di solito creo una funzione definita dall'utente per questo genere di cose. (In questo caso un banale "if (expr1, expr2, expr3)" farà il trucco
- 1. itoa per i numeri negativi?
- 2. Kadane algoritmo numeri negativi
- 3. Confrontando i numeri negativi in javascript
- 4. Perché std :: stoul converte i numeri negativi?
- 5. Spesso i numeri grandi diventano negativi
- 6. Numeri casuali e negativi
- 7. TryParse fallito con numeri negativi
- 8. iOS Previene il timer UILabel "agitazione" quando i numeri cambiano
- 9. Come bloccare i numeri negativi su h: inputText con JSF
- 10. Strano comportamento Objective-C Mod per i numeri negativi
- 11. Come includere i numeri decimali negativi in questa espressione regolare?
- 12. In che modo Java calcola i numeri negativi?
- 13. Layout tastiera iPhone per numeri negativi?
- 14. Espressione regolare Java per numeri negativi?
- 15. funziona con numeri negativi in python
- 16. Rappresentazioni di compilatori e numeri negativi
- 17. Rappresentazione di numeri negativi in C?
- 18. Come si comporta Verilog con numeri negativi?
- 19. Doctrine ORM 2 Seleziona numeri negativi
- 20. Set CMD/a, modulo e numeri negativi
- 21. MySQL ordine da stringa con i numeri
- 22. mysql dove stringa termina con i numeri
- 23. come generare numeri positivi e negativi in Java
- 24. L'operazione di modulo sui numeri negativi in Python
- 25. Modulo per i dividendi negativi in Python
- 26. Python Argparse: problema con argomenti facoltativi che sono numeri negativi
- 27. Come utilizzare numeri negativi in un intervallo in Swift?
- 28. Numeri negativi mod in SQL proprio come Excel
- 29. Formato Numeri negativi tra parentesi MA NON con simbolo $?
- 30. creando una sequenza di numeri positivi e negativi in R
Questa è un'idea molto utile. Ho modificato alcuni campi in unsigned ma hanno attivato metodi di gestione degli errori esistenti e ho dovuto rimuoverli. Questo è utile per evitare una query/connessione inutile da verificare. – M1ke