Ich kann Syntax "Diagramme" auf der SQLite-Website finden, aber keine Beispiele und mein Code stürzt ab. Ich habe andere Tabellen mit eindeutigen Einschränkungen für eine einzelne Spalte, möchte jedoch der Tabelle für zwei Spalten eine Einschränkung hinzufügen. Dies ist, was ich habe, das eine SQLiteException mit der Meldung "Syntaxfehler" verursacht.
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Ich mache das basierend auf folgendem:
In der Dokumentation zu dem von mir bereitgestellten Link heißt es, dass dies CONTSTRAINT name
vor meiner Einschränkungsdefinition erfolgen sollte.
Was jedoch zur Lösung führen kann, ist, dass sich der Debugger über alles beschwert, was meinen Spaltendefinitionen in Klammern folgt.
Wenn ich setze
...last_column_name last_col_datatype) CONSTRAINT ...
Der Fehler liegt in der Nähe von "CONSTRAINT": Syntaxfehler
Wenn ich setze
...last_column_name last_col_datatype) UNIQUE ...
Der Fehler liegt in der Nähe von "UNIQUE": Syntaxfehler
Antworten:
Fügen Sie die UNIQUE-Deklaration in den Abschnitt zur Spaltendefinition ein. Arbeitsbeispiel:
quelle
ON CONFLICT IGNORE
(habe noch nicht versucht, es zu ersetzen) mit mehr als 2 Spalten, aber ich sehe nicht, dass es die eindeutige Einschränkung berücksichtigt, sondern nur fröhlich die Duplikate hinzufügt.ON CONFLICT REPLACE
möglicherweise nicht Ihren Wünschen entspricht. Sie löscht bereits vorhandene Zeilen, damit die neue Zeile eingefügt werden kann. Normalerweise möchte ich die Einschränkungsverletzung abbrechen oder zurückrollen. SQLite ON CONFLICT-KlauselNun, Ihre Syntax stimmt nicht mit dem von Ihnen angegebenen Link überein, der Folgendes angibt:
quelle
Achten Sie darauf, wie Sie die Tabelle definieren, da Sie beim Einfügen unterschiedliche Ergebnisse erhalten. Folgendes berücksichtigen
Während der Einfüge- / Aktualisierungseffekt derselbe ist , bleiben die
id
Änderungen basierend auf dem Tabellendefinitionstyp (siehe die zweite Tabelle, in der 'Alice' jetzt vorhanden istid = 4
; die erste Tabelle macht mehr von dem, was ich von ihr erwarte, den PRIMARY KEY gleich ). Seien Sie sich dieses Effekts bewusst.quelle
Wenn Sie bereits eine Tabelle haben und diese aus irgendeinem Grund nicht neu erstellen können / wollen, verwenden Sie Indizes :
quelle