Datensatzänderung im Primary Key
M.Dessel
- php
Hallo zusammen,
ich hab mal wieder ne Frage.
Ich habe eine MySQL Tabelle in der ich einen zusammengesetzten 4-fach Primary-Key habe, den ich manuell vergeben muss.
Ich habe in meinem Programm eine Funktion geschrieben, mit der ich die Inhalte der Datensätze ändern kann.
update Tabelle_xyz where usw.
funktioniert auch bis auf den Fall, wenn sich Änderungen in den Schlüsselfeldern ergeben. Diese werden ignoriert.
Gibt es eine elegantere Lösung als den betreffenden Datensatz in einem Array zwischenzuspeichern ind zu löschen und dann das gerettete Array als neuen Datensatz zu speichern oder kann ich die Änderung des Schlüssels erzwingen.
Über eine Hilfe würde ich mich sehr freuen.
Gruss Manfred
Moin,
warum erstellst du nicht einfach eine Spalte (id) mit auto_increment und primary key?
Von zusammengesetzten Primary-Keys halte ich eher weniger, und du wärst dein Problem los.
Sonst beschreibe bitte die Spalten & dein Problem etwas genauer.
Grüße
Fred
Hallo Fred,
die Lösung mit der id mit auto_increment ist in meinen Augen Datenbanktechnisch gar keine Lösung. Denn dann brauche im im Grunde gar keinen Schlüssel.
Wie will ich denn so eine sinnvolle Dabtenbank nach dm Entity-Relationship-Modell aufbauen. Den Schlüssel benutze ich im Grunde dafür, die Eindeutigkeit des jeweiligen Datensatzes zu gewährleisten.
Beispiel: Adressdatenbank:
Datensatz 1 Herr Max Schmidt aus Köln.
Datensatz 4678 Herr Max Schmidt aus Köln.
Deshalb verwende ich grundsätzlich einen Schlüssel, dem beim abspeichern des Datensatzes auffällt, daß es ihn schon gibt.
Gruss Manfred
echo $begrüßung;
Deshalb verwende ich grundsätzlich einen Schlüssel, dem beim abspeichern des Datensatzes auffällt, daß es ihn schon gibt.
Dafür kann man einen Unique Index nehmen.
echo "$verabschiedung $name";
Hallo DedlFix
und wie wie gehe ich damit um(SQL-technisch)? Vor allem wird bei der Eingabe registriert, dass die jewielige Komination schon vergeben ist und kann ich die Werte im Index ändern?
Hört sich auf jedenfall gut an.
Gruss Manfred
echo $begrüßung;
und wie wie gehe ich damit um(SQL-technisch)? Vor allem wird bei der Eingabe registriert, dass die jewielige Komination schon vergeben ist
Beim Schreiben der Daten wird ggf. eine Fehlermeldung ausgelöst, die besagt, dass dieser unique key bereits vorhanden ist.
und kann ich die Werte im Index ändern?
Gar nicht direkt. Du änderst nur wie gehabt die Inhalte der normalen Spalten (und bekommst dann ggf. die "Doppelt"-Meldung).
echo "$verabschiedung $name";
Hi DedlFix,
hab's ausprobiert:
Feld1 Unique
Feld2 Unique
Feld3 Unique
Feld4 Unique
Feld5
...
Eingabe der Werte z.B.
Feld1 Feld2 Feld3 Feld4
A A A A
A A A A -> Fehlermeldung, korrekt
A B A A -> Fehlermeldung:#1062 - Duplicate
entry 'A' for key 1 (Dies müsste aber erlaubt sein!)
Also doch Lösung mit Primary-Key?
Gruss Manfred
echo $begrüßung;
Also doch Lösung mit Primary-Key?
Nein, du hast so wie es aussieht auf die einzelnen Felder jeweils einzelne Unique Keys gelegt. Man kann so einen Unique Key auch über mehrere Felder legen. Das sollte dann das sein, was du haben wolltest.
echo "$verabschiedung $name";
Hi DedlFix,
ok, hab ich geändert und funktioniert unter PHPMyadmin. Versuche ich aber in meinem PHP-Script diese Felder mit update Tabelle xyz zu ändern, habe ich den selber Effekt wie beim Prim-Key. Die Änderung wird ignoriert.
Gruss Manfred
你好 dedlfix,
Deshalb verwende ich grundsätzlich einen Schlüssel, dem beim
abspeichern des Datensatzes auffällt, daß es ihn schon gibt.Dafür kann man einen Unique Index nehmen.
Kann man, es gibt aber keinen Grund dafür. Wenn etwas natürlicherweise ein
Primary Key ist, dann sollte man ihn auch so benutzen.
再见,
克里斯蒂安
Hi Christian,
hast Du auch eine Idee, wie man den Inhalt eines Schlüssels in einen anderen Ändert, ohen gleich den ganzen Datensatz zu löschen?
Gruss Manfred
你好 M.Dessel,
hast Du auch eine Idee, wie man den Inhalt eines Schlüssels in einen
anderen Ändert, ohen gleich den ganzen Datensatz zu löschen?
Ich verstehe dein Problem nicht recht. Man kann problemlos den Inhalt des
primary key ändern – solange dadurch kein duplicate key entsteht.
再见,
克里斯蒂安
Hi Christian,
vielen Dank für den Tip. Ich habe einen gewaltigen Denkfehler gehabt.
Ich habe bestimmt, wie die neuen Werte des Schlüssels lauten sollen, diese aber dummerweise auch schon mit in die WHERE-Klausel mit angegeben. Dadurch kann der zu ändernde Datensatz auch nicht mehr gefunden oder geändert werden. :)
Aber trotzdem vielen Dank für Eure Hilfe.
Gruss Manfred