Ich arbeite in PHP.
Bitte geben Sie an, wie Sie neue Datensätze in die Datenbank einfügen können, die über ein eindeutiges Feld verfügt. Ich füge viele Datensätze in einen Stapel ein und möchte nur, dass die neuen eingefügt werden, und ich möchte keinen Fehler für den doppelten Eintrag.
Gibt es nur eine Möglichkeit, zuerst ein SELECT zu erstellen und festzustellen, ob der Eintrag bereits vor dem INSERT vorhanden ist - und nur dann, wenn SELECT keine Datensätze zurückgibt? Ich hoffe nicht.
Ich möchte MySQL irgendwie anweisen, diese Einfügungen ohne Fehler zu ignorieren.
Vielen Dank
Antworten:
Sie können die Syntax INSERT ... IGNORE verwenden, wenn Sie bei einem doppelten Datensatz keine Aktion ausführen möchten.
Sie können die REPLACE INTO- Syntax verwenden, wenn Sie einen alten Datensatz mit demselben Schlüssel durch einen neuen überschreiben möchten.
Sie können auch die Syntax INSERT ... ON DUPLICATE KEY UPDATE verwenden, wenn Sie stattdessen eine Aktualisierung des Datensatzes durchführen möchten, wenn Sie auf ein Duplikat stoßen.
Bearbeiten: Ich dachte, ich würde einige Beispiele hinzufügen.
Beispiele
Angenommen, Sie haben eine Tabelle
tbl
mit zwei Spaltenid
undvalue
. Es gibt einen Eintrag, id = 1 und value = 1. Wenn Sie die folgenden Anweisungen ausführen:REPLACE INTO tbl VALUES(1,50);
Sie haben noch einen Datensatz mit id = 1 value = 50. Beachten Sie, dass der gesamte Datensatz jedoch zuerst GELÖSCHT und dann erneut eingefügt wurde. Dann:
INSERT IGNORE INTO tbl VALUES (1,10);
Die Operation wird erfolgreich ausgeführt, es wird jedoch nichts eingefügt. Sie haben immer noch id = 1 und value = 50. Schließlich:
INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;
Sie haben jetzt einen einzelnen Datensatz mit id = 1 und value = 200.
quelle
IGNORE
ignoriert Fehler, die möglicherweise nichts mit doppelten Schlüsseln zu tun haben. Es ist besser, wennON DUPLICATE KEY UPDATE field=field
Sie diese Fehler abfangen und als Bonus keine Warnungen erhalten.Sie können sicherstellen, dass Sie keine doppelten Informationen einfügen, indem Sie die EXISTS-Bedingung verwenden.
Wenn Sie beispielsweise eine Tabelle mit dem Namen clients mit dem Primärschlüssel client_id hatten, können Sie die folgende Anweisung verwenden:
INSERT INTO clients (client_id, client_name, client_type) SELECT supplier_id, supplier_name, 'advertising' FROM suppliers WHERE not exists (select * from clients where clients.client_id = suppliers.supplier_id);
Diese Anweisung fügt mehrere Datensätze mit einer Unterauswahl ein.
Wenn Sie einen einzelnen Datensatz einfügen möchten, können Sie die folgende Anweisung verwenden:
INSERT INTO clients (client_id, client_name, client_type) SELECT 10345, 'IBM', 'advertising' FROM dual WHERE not exists (select * from clients where clients.client_id = 10345);
Durch die Verwendung der dualen Tabelle können Sie Ihre Werte in eine select-Anweisung eingeben, obwohl die Werte derzeit nicht in einer Tabelle gespeichert sind.
von http://www.techonthenet.com/sql/insert.php
quelle
Sie können Trigger verwenden .
Lesen Sie auch diese Einführung zu Triggern .
quelle
Versuchen Sie, eine doppelte Tabelle, vorzugsweise eine temporäre Tabelle, ohne die eindeutige Einschränkung zu erstellen, und laden Sie diese in diese Tabelle. Wählen Sie dann nur die eindeutigen (DISTINCT) Elemente aus der temporären Tabelle aus und fügen Sie sie in die Zieltabelle ein.
quelle
$duplicate_query=mysql_query("SELECT * FROM student") or die(mysql_error()); $duplicate=mysql_num_rows($duplicate_query); if($duplicate==0) { while($value=mysql_fetch_array($duplicate_query) { if(($value['name']==$name)&& ($value['email']==$email)&& ($value['mobile']==$mobile)&& ($value['resume']==$resume)) { echo $query="INSERT INTO student(name,email,mobile,resume)VALUES('$name','$email','$mobile','$resume')"; $res=mysql_query($query); if($query) { echo "Success"; } else { echo "Error"; } else { echo "Duplicate Entry"; } } } } else { echo "Records Already Exixts"; }
quelle