Datenbankeintrag bedingt erstellen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wie ist denn ein "gleicher" Datensatz definiert? Ohne dieses Wissen kann man dazu schlecht etwas konkretes sagen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Wenn alle Werte gleich sind, ist er gleich. Entscheidend ist in meinem Fall allerdings eine einzelne Spalte. Wenn also bereits ein Eintrag mit dem in diese Spalte einzutragende Wert besteht, soll kein neuer Eintrag erstellt werden.Hyperion hat geschrieben:Wie ist denn ein "gleicher" Datensatz definiert? Ohne dieses Wissen kann man dazu schlecht etwas konkretes sagen...
Ich würde ja einfach die Spalte UNIQUE definieren und auf einen entsprechenden zurückgemeldeten Fehler des Datenbanksystems passend reagieren.Aries hat geschrieben:Entscheidend ist in meinem Fall allerdings eine einzelne Spalte. Wenn also bereits ein Eintrag mit dem in diese Spalte einzutragende Wert besteht, soll kein neuer Eintrag erstellt werden.
Falls das mit dem UNIQUE nicht funtkionieren sollte, muss man halt einfach prüfen ob es so einen Eintrag bereits gibt.
Danke, das funktioniert./me hat geschrieben:Ich würde ja einfach die Spalte UNIQUE definieren und auf einen entsprechenden zurückgemeldeten Fehler des Datenbanksystems passend reagieren.Aries hat geschrieben:Entscheidend ist in meinem Fall allerdings eine einzelne Spalte. Wenn also bereits ein Eintrag mit dem in diese Spalte einzutragende Wert besteht, soll kein neuer Eintrag erstellt werden.
Ich habe jetzt ein leicht anderes Problem: Jetzt kommt es nicht mehr nur auf eine einzelne Spalte an. Stattdessen soll ein Eintrag nur dann verhindert werden, wenn ein in allen Spalten gleicher Eintrag bereits existiert. Wie kann man das erreichen?Aries hat geschrieben:Wenn alle Werte gleich sind, ist er gleich. Entscheidend ist in meinem Fall allerdings eine einzelne Spalte. Wenn also bereits ein Eintrag mit dem in diese Spalte einzutragende Wert besteht, soll kein neuer Eintrag erstellt werden.Hyperion hat geschrieben:Wie ist denn ein "gleicher" Datensatz definiert? Ohne dieses Wissen kann man dazu schlecht etwas konkretes sagen...
Beispiel:
Wenn der Eintrag "(1 , a)" schon existiert, sollen die Einträge "(1 , b)" und "(2 , a)" erlaubt sein, der Eintrag "(1 , a)" aber verboten sein
Das kann man dadurch erreichen, dass man alle Spalten gemeinsam als Unique definiert.Aries hat geschrieben:Ich habe jetzt ein leicht anderes Problem: Jetzt kommt es nicht mehr nur auf eine einzelne Spalte an. Stattdessen soll ein Eintrag nur dann verhindert werden, wenn ein in allen Spalten gleicher Eintrag bereits existiert. Wie kann man das erreichen?
Mich würde ja der Use-Case dahinter interessieren.
Wenn ich folgende Seite (http://www.sqlite.org/lang_createtable.html) richtig verstehe müsste das dann so aussehen:/me hat geschrieben:Das kann man dadurch erreichen, dass man alle Spalten gemeinsam als Unique definiert.Aries hat geschrieben:Ich habe jetzt ein leicht anderes Problem: Jetzt kommt es nicht mehr nur auf eine einzelne Spalte an. Stattdessen soll ein Eintrag nur dann verhindert werden, wenn ein in allen Spalten gleicher Eintrag bereits existiert. Wie kann man das erreichen?
create table Beispieltabelle (Spalte1 integer, Spalte2 text, unique (1,2) "conflict clause")
Ich sehe auf der Seite jedoch nicht, was bei "conflict clause" hin muss.
@Aries: Dazu müsstest Du dem Link folgen der vor dem Syntaxdiagramm steht, also in diesem Fall `table-constraint`. Da kommt man dann auf die Seite auf der *alle* Syntaxdiagramme aufgelistet sind und da sind unter jedem auch Querverweise für die enthaltenen Verweise auf andere Syntaxdiagramme und auch wieder zurück zur Dokumentation. Bei http://www.sqlite.org/syntaxdiagrams.ht ... ict-clause sieht man, dass man die „conflict clause” auch leer sein darf. Und unter dem Diagramm ist ein Link zu http://www.sqlite.org/lang_conflict.html wo die verschiedenen Möglichkeiten erklärt werden.
Bei `indexed-column` kommt eigentlich der Name der Spalte hin und keine Nummer.
Eine Tabelle bei der alle Spalten zusammen ein Schlüsselkandidat sind, finde ich übrigens auch interessant.
Bei `indexed-column` kommt eigentlich der Name der Spalte hin und keine Nummer.
Eine Tabelle bei der alle Spalten zusammen ein Schlüsselkandidat sind, finde ich übrigens auch interessant.