MySQL negatif sayı nasıl engellenir

5 Cevap php

Benim veritabanında 0'dan başlayarak verileri var.

My php will add 1 or -1 to the data depending on the user's input. My problem is that if data is 0 and a user try to subtract 1. The data become 4294967295 which is the maximum value of INT data type. Are there anyways to make the data stays in 0 even when the user asks for -1? Thanks for the reply..

My SQL komutu aşağıdaki gibidir

update board set score=score-1 where team='TeamA'
//this would generate 4294967295 if the score is 0.....

5 Cevap

Evet ..

UPDATE board SET score = score - 1 WHERE team = 'TeamA' AND score > 0

Neden sadece eklemek VE SKOR> 0 değil

Jerry sorusuna Diğer çözüm (sıfıra ulaşmak (ama artık değil) kadar miktarını azaltmak isterseniz) MySQL "CAST" kullanmak için:

UPDATE board SET score = CAST(score - 1 AS SIGNED) WHERE team = 'TeamA'

Eğer sütun imzasız olarak ayarladınız mı?

Eğer (InnoDB gibi) işlem veritabanı kullanıyorsanız, gibi bir şey yapabilirsiniz:

SQL> START TRANSACTION;
SQL> UPDATE board SET score=score-1 WHERE team="TeamA"
SQL> SELECT @@warning_count as wc
if($row["wc"] > 0) {
  $error = true;
SQL> ROLLBACK;
} else
SQL> COMMIT;

Bu sadece mantıksal değil, aslında uygulamasıdır.

Bu söz soru için çok yararlı olmayabilir, ama bu negatif sayıları izin veremem ki diğer durumlarda çalışır ve bir alışveriş sepeti var ve stok miktarlarını güncellemek gerekirse, örneğin, yükseltilmiş olması bir hata gerekiyor Seçilen tüm ürünler, aynı anda birden UPDATE sorguları gerçekleştirmek gerekir. Yukarıdaki çözümlerin herhangi sadece ürünü güncellenmesi SKIP ve herhangi bir hata mesajı dönmeyecek. Tabii ki (tablo kilitleme ve güncellemeden önce miktar okuma gibi) bunu engellemek için birçok yol vardır, ancak bu hızlı (bir saf) bir çözümdür. Sen yerine uyarı kodu / açıklama gerekiyorsa "warning_count SELECT @ @" "FİYATLARI UYARILAR" kullanabilirsiniz.