Negatif sayılara izin verilmeyen bir int alan mı? veya daha spesifik olarak, alana negatif bir sayı girildiğinde, bir sıfır ekler. Bunu soruyorum çünkü bir puanlama sistemimiz var ve insanların olumsuz skorlara sahip olmasına izin vermiyoruz. Eğer skorları körük sıfıra ulaşırsa, bunun yerine sadece bir sıfır ekler. Kullanıcının skorunu sorgulamak zorunda kalmadan, sıfırdan aşağı düşüp düşmeyeceğini kontrol etmeye çalışıyorum.mysql negatif sayıları önler
cevap
yapacaktır Başkalarının önerdiği DDL değişikliğine (INT UNSIGNED) ek olarak, uygulama mantığınızı da değiştirirdim. ki:
Ben feryat sıfır düşecek olmadığını kontrol etmek kullanıcının puanını sorgulamak zorunda kalmadan bunu yapmak için çalışıyorum
açıkça ayrı kontrol etmek gerekmez. sorgu:
UPDATE your_table
SET score = GREATEST(score + ?, 0) -- This '?' is the adjustment to the score
WHERE user_id = ?
Artık uygulamanız, score
GÜNCELLEŞTİRME işlevini sıfırın altına düşürmeyebilir, ayrıca SQL moduna bağlı olarak hata veya uyarı üretemez.
Evet. int
alanını oluşturabilir ve UNSIGNED
olarak işaretleyebilirsiniz. MySQL 5.0 Reference Manual itibaren
:
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647.
The unsigned range is 0 to 4294967295.
Ancak, imzasız int sütununa tamsayı eklemek, hata atmayacaktır – Raaghu
MySQL tamsayı türleri için bir UNSIGNED
ön eleme sahiptir.
Negatif değerler sıfıra sıkıştırılır, ancak bir uyarı oluşturur: Eğer sıkı sql modunda çalışıyorsa
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)
Hata yakalamıyorsam, uyarı mysql hatası veriyor mu? – user962449
@ user962449 Bilmiyorum, Böyle bir hata yakalamadım. Neden denemiyorsun? – Alnitak
bu bir hata ve başarısız olmasına neden olan ekleme/güncelleme atardı.
Genellikle bu tür bir şey için kullanıcı tanımlı bir işlev oluşturuyorum. (Bu durumda çok önemsiz "if (expr1, expr2, expr3)" hile
- 1. std :: stoul neden negatif sayıları dönüştürüyor?
- 2. Python'da tüm negatif sayıları sıfıra nasıl değiştiririm?
- 3. Dizelerdeki onaltılık sayıları negatif sayılara dönüştürme, Perl
- 4. mysql içinde negatif değeri 0'a dönüştür
- 5. haskell negatif ondalık sayılar
- 6. İlaçlar çakışmayı nasıl önler?
- 7. MySql, pozitve veya negatif seçim sorgusunda nasıl gruplandırabilirim?
- 8. Negatif marjı
- 9. Android, aktivitenin geri yüklenmesini önler
- 10. iç referans çöp toplanmasını önler
- 11. , gönderim sırasında varsayılanı önler: - Angularjs
- 12. Web sunucuları TIME_WAIT'i nasıl önler?
- 13. Programatik olarak pil şarjını önler
- 14. MVC görünümü, yinelenen html'yi önler
- 15. Tetikleyicilerin karşılıklı olarak yinelemeli yürütmesini önler misiniz?
- 16. Mysqli'de ondalık sayıları tutma
- 17. Negatif sayıları komut satırı argümanları olarak kabul etmek için Perl'i nasıl alabilirim?
- 18. Sayım sayıları
- 19. Pandalar, sayıları
- 20. Tüm sayıları
- 21. Negatif sayılar için iPhone klavye düzeni?
- 22. Açgözlü olmayan negatif görünüm
- 23. UILabel negatif satır aralığı
- 24. JSTL negatif sıfır
- 25. Negatif bakışta hata oluştu
- 26. Satırları negatif değerlerle silme
- 27. Yang: negatif lookahead eşdeğeri?
- 28. Negatif doldurmanın etkileri
- 29. AtomicInteger: negatif olmayan
- 30. Negatif süre açıklığı
Bu çok yararlı bir fikir. Bazı alanları imzasız olarak değiştirdim ancak mevcut hata işleme yöntemlerini tetiklediler ve bunları kaldırmak zorunda kaldım. Bu, kontrol etmek için anlamsız bir sorgu/bağlantıdan kaçınmak için kullanışlıdır. – M1ke