Verhindern doppelter Einträge in einer Liste

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Verhindern doppelter Einträge in einer Liste

Postby tommyboy » 04. March 2005 10:23

Hallo Leute,

ich habe eine Frage zwecks der Füllung, diverser MySql Tabellen.
Gibt es einen MySqlbefehl der, dass Speichern eines Records verhindert ,
wenn dieser mit einem bereits bestehenden Record übereinstimmt.

Ich habe das Problem bei meiner Tabelle, dass es möglich ist die gleichen
Daten mehrmals ab zu speichern. Sie unterscheiden sich nur durch die Id
die automatisch hochgezählt wird.

Beispiel:

ID NAME STRASSE PLZ ORT
1 Tim Waldstr.3 89012 Pleidelsheim
2 Tim Waldstr.3 89012 Pleidelsheim
3 Tim Waldstr.3 89012 Pleidelsheim

Frage: Wie kann ich das am leichtesten Verhindern?


Mfg
Tommyboy
tommyboy
 
Posts: 71
Joined: 18. July 2004 10:44
Location: Stuttgart-Tübingen

Re: Verhindern doppelter Einträge in einer Liste

Postby Hanspeter Thöni » 04. March 2005 11:26

tommyboy wrote:Hallo Leute,

Frage: Wie kann ich das am leichtesten Verhindern?



z.B. mit einem UNIQUE index

UNIQUE KEY name (name,strasse,plz,ort)

Damit verhindert die Datenbank sicher, dass du Sätze einfügst, wo die drei Felder name,strasse,plz,ort identisch sind.

Hat aber den Nachteil eines relativ grossen Indexes. Besser wäre es wohl hier, in der Applikation die entsprechende Prüfung zu machen.
Gruss Hanspeter
User avatar
Hanspeter Thöni
 
Posts: 233
Joined: 17. August 2004 10:29
Location: Schweiz

Postby tommyboy » 04. March 2005 21:13

Achso, vielen Dank nochmal für die Info!
Also ich denke ich werde es in meinem Programm überprüfen, wobei
dann muß ich ja auch Datenbankzugriffe machen.Identische auslesen
und dann im Programm vergleichen. Ist das soviel schneller als mit
einem UNIQUE index? :?:

Mfg
Tommyboy
tommyboy
 
Posts: 71
Joined: 18. July 2004 10:44
Location: Stuttgart-Tübingen

Postby Jan H. Krüger » 04. March 2005 23:01

Wer sagt den das ein solcher Index soviel langsamer ist? Keiner. Nur das er eben recht groß werden kann.
Indizes sind sogar dazu gedacht bei großen Datenbeständen das Suchen bestimmter Daten zu beschleunigen.

Da du ja recht intensiv mit PHPMyAdmin zu arbeiten scheinst, rufe mal die Übersichtsseite einer beliebiten Tabelle auf.
Dort gibt es eine Unterabteilung, Speicherplatzbedarf. Diese Info ist geteilt in Daten, Index und Insgesamt.
Daten gibt an wie hoch der Platzverbrauch der in der Tabelle hinterlegten Informationen ist. Index gibt an wie hoch der Platzverbrauch der auf dieser Tabelle angelegten Indizes ist.

Der oben beispielhaft genannte Index würde dazu führen das die Angabe unter Index fast genauso groß wäre wie die Angabe unter Daten. Was die ganze Geschichte gegebenenfalls unnötig aufbläht.
Je nachdem was dein Ziel ist, möglichst wenig Abfragen, möglichst geringer Platzverbrauch, möglichst hohe Abfragegeschwindigkeit, Datenplausibilität... je nachdem würde ich entscheiden ob ich einen solchen Index anlege oder vor dem Einspeichern eines neuen Eintrages abfrage ob der Tim in der Waldstr.3 wohnhaft in 89012 Pleidelsheim bereits existiert. Bekomme ich ein positives Resultat ist er bereits hinterlegt und ich muss ihn nicht erneut speichern, ist die Ergebnismenge leer dann existiert der Tim in der Waldstr. 3, 89012 Pleidelsheim noch nicht in der Datenbank.
Das Verhältnis muss halt bei einer Lösung stimmen. Ein absolutes überall greifendes Patentrezept gibt es nicht.

Index welcher defintiv doppelte Einträge verhindert gegen eine weitere Abfrage.
Jan H. Krüger
 
Posts: 152
Joined: 24. October 2004 19:42


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 41 guests