Frage

Ich arbeite in PHP.

Bitte, was ist der richtige Weg, um neue Datensätze in die DB einzufügen, das eindeutige Feld hat. Ich bin viele Datensätze in einem Batch-Einfügen und ich möchte nur die neuen eingesetzt werden, und ich will keine Fehler für den doppelten Eintrag.

Gibt es nur Weg, um zuerst eine SELECT und um zu sehen, zu machen, wenn der Eintrag bereits dort vor dem INSERT ist - und nur einfügen, wenn SELECT keine Datensätze zurückgibt? Ich hoffe nicht.

Ich möchte irgendwie MySQL sagen, diese Einsätze ohne Fehler zu ignorieren.

Danke

War es hilfreich?

Lösung

Sie können mit INSERT ... IGNORE Syntax, wenn Sie wollen keine Maßnahmen ergreifen, wenn es ein doppelter Datensatz ist.

Sie können mit REPLACE INTO Syntax, wenn Sie wollen überschreiben einen alten Datensatz mit einem neuen mit dem gleichen Schlüssel.

Alternativ können Sie INSERT ... ON DUPLICATE KEY UPDATE Syntax, wenn Sie ein Update für die Aufzeichnung statt ausführen möchten, wenn Sie ein Duplikat begegnen.

Edit:. Dachte ich einige Beispiele hinzufügen würde

Beispiele

Angenommen, Sie eine Tabelle mit dem Namen tbl mit zwei Spalten, id und value haben. Es gibt einen Eintrag, ID = 1 und Wert = 1. Wenn Sie die folgenden Anweisungen ausführen:

REPLACE INTO tbl VALUES(1,50);

Sie haben noch einen Datensatz, mit id = 1 Wert = 50. Beachten Sie, dass der gesamte Datensatz jedoch zuerst gelöscht und dann wieder eingesetzt. Dann gilt:

INSERT IGNORE INTO tbl VALUES (1,10);

Die Operation erfolgreich ausgeführt, aber nichts eingeführt wird. Sie haben noch id = 1 und Wert = 50. Schließlich:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

Sie haben nun einen einzelnen Datensatz mit id = 1 und Wert = 200.

Andere Tipps

Sie können mit Auslöser .

Überprüfen Sie auch diese Einführung Leitfaden für auslöst .

Wie sieht das Datenbankschema aus?

Sie können eine ID-Spalte hinzufügen, die href="http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html" rel="nofollow noreferrer"> auto für jeden Einsatz, eindeutige Zeilen zu gewährleisten.

Versuchen Sie, eine doppelte Tabelle erstellen, vorzugsweise eine temporäre Tabelle, ohne die eindeutige Einschränkung und tun Sie Ihre Bulk-Ladung in dieser Tabelle. Wählen Sie dann nur die einzigartigen (DISTINCT) Elemente aus der temporären Tabelle und legen Sie in die Zieltabelle.

$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";
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top