Seite 1 von 1

Datenbankeintrag bedingt erstellen

Verfasst: Montag 21. Oktober 2013, 08:37
von Aries
Hallo, ich möchte einen sqlite3-Datenbanktabelleneintrag unter der Bedingung erstellen, dass ein gleicher Eintrag noch nicht existiert. Wie geht das?

Re: Datenbankeintrag bedingt erstellen

Verfasst: Montag 21. Oktober 2013, 08:51
von Hyperion
Wie ist denn ein "gleicher" Datensatz definiert? Ohne dieses Wissen kann man dazu schlecht etwas konkretes sagen...

Re: Datenbankeintrag bedingt erstellen

Verfasst: Montag 21. Oktober 2013, 09:05
von Aries
Hyperion hat geschrieben:Wie ist denn ein "gleicher" Datensatz definiert? Ohne dieses Wissen kann man dazu schlecht etwas konkretes sagen...
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.

Re: Datenbankeintrag bedingt erstellen

Verfasst: Montag 21. Oktober 2013, 09:12
von /me
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 würde ja einfach die Spalte UNIQUE definieren und auf einen entsprechenden zurückgemeldeten Fehler des Datenbanksystems passend reagieren.

Re: Datenbankeintrag bedingt erstellen

Verfasst: Montag 21. Oktober 2013, 11:00
von BlackJack
Falls das mit dem UNIQUE nicht funtkionieren sollte, muss man halt einfach prüfen ob es so einen Eintrag bereits gibt.

Re: Datenbankeintrag bedingt erstellen

Verfasst: Montag 21. Oktober 2013, 12:01
von Aries
/me hat geschrieben:
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 würde ja einfach die Spalte UNIQUE definieren und auf einen entsprechenden zurückgemeldeten Fehler des Datenbanksystems passend reagieren.
Danke, das funktioniert.

Re: Datenbankeintrag bedingt erstellen

Verfasst: Freitag 15. November 2013, 18:56
von Aries
Aries hat geschrieben:
Hyperion hat geschrieben:Wie ist denn ein "gleicher" Datensatz definiert? Ohne dieses Wissen kann man dazu schlecht etwas konkretes sagen...
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.
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?

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

Re: Datenbankeintrag bedingt erstellen

Verfasst: Freitag 15. November 2013, 20:05
von /me
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?
Das kann man dadurch erreichen, dass man alle Spalten gemeinsam als Unique definiert.

Mich würde ja der Use-Case dahinter interessieren.

Re: Datenbankeintrag bedingt erstellen

Verfasst: Samstag 16. November 2013, 23:57
von Aries
/me hat geschrieben:
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?
Das kann man dadurch erreichen, dass man alle Spalten gemeinsam als Unique definiert.
Wenn ich folgende Seite (http://www.sqlite.org/lang_createtable.html) richtig verstehe müsste das dann so aussehen:

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.

Re: Datenbankeintrag bedingt erstellen

Verfasst: Sonntag 17. November 2013, 00:24
von BlackJack
@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.