2017-08-24 3 views
0

Ich versuche, zwei Spalten in einer Tabelle zu aktualisieren, um den IN-Operator alsVerwirrung in Bezug auf Betreiber

mysql_query("UPDATE table SET value = value + 1 WHERE column IN ('row1' , 'row2')"); 

verwenden, aber ich bin zu bemerken, dass der Wert in row1 & row2 nicht richtig aktualisiert, wie ich gedacht hatte, . Ich habe versucht mit dem gleichen Code in localhost, es funktionierte aber auf dem Testserver mit ca. 15-20 Treffern pro Stunde funktioniert es nicht. Ich blockierte sogar den gesamten Verkehr des Testservers und wartete auf mehr als 12 Stunden, wenn der Server nachhing, aber das half nicht.

änderte ich meinen Code

mysql_query("UPDATE table SET value = value + 1 WHERE column = 'row1'"); 
mysql_query("UPDATE table SET value = value + 1 WHERE column = 'row2'"); 

nun leicht erhöhten Verkehrsaufkommen, etwa 25-30 Hits pro Stunde die Echtzeit-Wert immer noch mit Ich begann.

Mache ich einen Fehler im Code, nahm Hilfe von here, oder gibt es irgendeine Beschränkung in der IN-Operator oder ist es die Fehler des Testservers?

Edit: Ich verwende einen kostenlosen Host.

+0

'row1' und' row2' sind Ihre Werte, die Sie aktualisieren möchten? –

+0

Können Sie Ihre Beobachtungen teilen? Da Sie den Spaltenwert inkrementieren, verwenden Sie interne MySQL-Transaktionen oder den Transaktionsbereich aus Code zum gegenseitigen Ausschluss? Und als Sie sagten, es funktionierte in localhost, wo Sie auf den gleichen MySQL-Server oder einen anderen verwiesen haben? –

+0

@chiragsatapara Nein, 'row1' und' row2' sind zwei Parameter, in der Spalte sagen wir "Cat" und "Dog" in zwei separaten Reihen in der Spalte "Animals" und lassen den Wert "count" lauten. So etwas wie, _mysql_query ("UPDATE Tabelle zählt SET = count + 1 WHERE Spalte IN ('Katze', 'Dog')"); _ – NewBee

Antwort

1

Ich denke, dass dies der klassische Fall der Rasse ist und keine Synchronisationstechnik verwendet, um wechselseitigen Ausschlussblock zu schaffen. Versuchen Sie, diese Update-Anweisung innerhalb einer Transaktion auszuführen

+0

Ich lese in einem E-Book, dass die "TRANSACTION" -Funktion mehr Ressourcen erfordert, also habe ich es vermieden. Wenn es jedoch in den Zustand "ROLLBACK" geht, wird nichts aufgezeichnet, wenn ich die verlorenen Daten verfolgen kann. Ich bin komplett neu und das ist meine erste Seite so leid für meine Anfänger Antworten. – NewBee

+1

@NewBee Transactions bieten einen "Alles-oder-nichts" -Ansatz, der wichtig ist, wenn Sie in einer einzigen Anfrage/Sitzung mehrere Tabellen schreiben, z. B. die Verarbeitung von Kundenbestellungen. Verhindern eines unerwünschten Schreibens, wenn eine Abfrage in der Transaktion fehlschlägt. Rollbacks treten auf, wenn eine Abfrage fehlschlägt. Ermöglicht Ihnen, den Fehler auf Anwendungsebene zu behandeln, mit der Möglichkeit, zu einem bestimmten 'SAVEPOINT' zurückzukehren. – fyrye

+0

@SunilSinghal @fyrye danke für den Vorschlag über 'TRANSACTION'. In meiner derzeitigen Verwendung wird sich die Verzögerung nicht auf Benutzerkonten oder irgendetwas auf der Website auswirken, aber in anderen Situationen kann es zu einem Chaos kommen. Ich werde versuchen, alle 'IN' und separat aktualisierten Tabellen in' TRANSACTION' zu ändern. :) – NewBee

Verwandte Themen