Viele Entwickler führen immer noch eine Abfrage aus, um zu überprüfen, ob ein Feld in einer Tabelle vorhanden ist, und führen dann eine Einfüge- oder Aktualisierungsabfrage gemäß dem Ergebnis der ersten Abfrage aus. Versuchen Sie es mit der ON DUPLICATE KEY-Syntax, das ist viel schneller und besser als das Ausführen von 2 Abfragen.Weitere Daten können here
INSERT INTO table (a, b, c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c = 9 gefunden werden;
wenn Sie für den gleichen Wert halten c Sie ein Update mit dem gleichen Wert tun
INSERT INTO Tabelle (a, b, c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c = 6;
der Unterschied zwischen 'ersetzen' und 'auf doppelten Schlüssel':
ersetzen: Einsätze oder Löschungen und fügt
auf doppelten Schlüssel: Einfügungen oder Aktualisierungen
Wenn Ihre Tabelle keinen Primärschlüssel oder eindeutigen Schlüssel hat, macht das Ersetzen keinen Sinn.
Sie können auch die Funktion VALUES
verwenden, um zu vermeiden, dass Sie die tatsächlichen Werte zweimal angeben müssen. Z.B. statt
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;
können Sie
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);
verwenden Wo VALUES(c)
auf den Wert prevously angegeben bewerten wird (6).
Es erstellt mehr als auf Eintrag für REPLACE INTO Benutzer SET ip = '$ Uip', lastcheck = '$ tim' – unrelativity
IS IP oder lastcheck entweder einen Primärschlüssel oder eindeutigen Index? – carl
Dann wird das Verhalten erwartet, das Sie erleben. Ein Feld muss entweder primär oder eindeutig sein, damit dies funktioniert. Wie würde MySQL andernfalls Dubletten vermeiden? Es scheint, als ob Sie die user_id in dieser Tabelle (als Primärschlüssel) haben sollten, die Sie auch in Ihre Ersetzung einfügen. – carl