2010-05-06 17 views
25

Ich möchte einen Datensatz in eine Sqlite-Tabelle einfügen, wenn es tatsächlich nicht eingefügt ist.SQLite Abfrage zum Einfügen eines Datensatzes Wenn nicht existiert

Lassen Sie uns sagen, dass es drei Felder pk hat, Name, Adresse

ich mit dem Namen neuer Datensatz eingefügt werden soll, wenn dieser Name preveously nicht hinzugefügt.

Können wir dies in einer einzigen Abfrage tun. Es scheint, als ob es manchmal etwas anders als SQL-Abfragen ist.

Antwort

11

Warum nicht einfach einen eindeutigen Index für den Namen hinzufügen?

+0

CREATE TABLE-Benutzer ('pk' INTEGER PRIMARY KEY, 'Name' VARCHAR (100), 'Count' INTEGER) ; Dies ist meine aktuelle Tabelle. Wie könnte ich es ändern? Tut mir leid, ich konnte nur verstehen :( –

+0

Ich habe es gerade. CREATE TABLE Benutzer ('PK' INTEGER PRIMÄRSCHLÜSSEL, 'Name' VARCHAR (100) UNIQUE, 'Count' INTEGER); –

+5

Weil das Auslösen von Ausnahmen ist nicht, wie Sie Probleme behandeln. Sie können eine Abfrage schreiben, um schnell zu laufen, oder Sie können faul sein .. – Dan

68

Ja, Sie können das mit einer einzigen Abfrage tun.

INSERT KONFLIKT IGNORE soll Ihnen helfen: http://www.sqlite.org/lang_conflict.html

Setzen Sie einen eindeutigen Schlüssel auf den Namen, wird dies einen Konflikt erstellen, wenn Sie einen Datensatz versuchen Einfügen, wenn der Name bereits vorhanden ist.

Der Standardwert ist ABORT, daher gibt die Anweisung ohne IGNORE einen Fehler zurück. Wenn Sie das nicht möchten, verwenden Sie IGNORE.

+1

sqlite> EINFÜGEN IN Benutzerwerte (1, 'test', 0) ON CONFLICT IGNORE; SQL-Fehler: in der Nähe "ON": Syntaxfehler sqlite> sqlite> INSERT OR IGNORE Benutzer Werte (1, 'test', 0); SQL-Fehler: in der Nähe von "Benutzer": Syntaxfehler sqlite> sqlite> INSERT INTO Benutzer Werte (1, 'test', 0) oder IGNORE; SQL-Fehler: nahe "ODER": Syntaxfehler Können Sie mir nur ein Beispiel angeben. konnte es einfach nicht erfolgreich verwenden. Ich möchte den Namen bereits überprüfen oder dann diesen neuen Datensatz hinzufügen, wenn 'test' nicht in der Tabelle –

+0

ist Dies hat das Problem gelöst. Hinzufügen von UNIQUE zum Namensfeld Jetzt bekomme ich SQL-Fehler und Daten nicht hinzugefügt. Benutzer CREATE TABLE ('PK' INTEGER PRIMARY KEY, 'Name' VARCHAR (100) UNIQUE, 'Count' INTEGER); –

+16

INSERT OR IGNORE in Benutzer WERTE ... – Konerak

22

Wenn Sie keine UNIQUE INDEX in Kombination mit INSERT INTO oder INSERT OR IGNORE INTO verwenden können, könnten Sie eine Abfrage wie diese schreiben;

INSERT INTO table (column) 
SELECT value 
WHERE NOT EXISTS (SELECT 1 
        FROM table 
        WHERE column = value) 
Verwandte Themen