M.Dessel: Datensatzänderung im Primary Key

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

  1. 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

    1. 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

      1. 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";

        1. 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

          1. 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";

            1. 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

              1. 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";

                1. 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

        2. 你好 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.

          再见,
           克里斯蒂安

          --
          Toilettenspruch II. | Toilettenspruch I.
          If God had a beard, he'd be a UNIX programmer.
          http://wwwtech.de/
          1. 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

            1. 你好 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.

              再见,
               克里斯蒂安

              --
              Toilettenspruch II. | Toilettenspruch I.
              Es ist uns nicht möglich, in einem Bereich unseres Lebens richtig zu verhalten, wenn wir in allen anderen falsch handeln. Das Leben ist ein unteilbares Ganzes.
              http://wwwtech.de/
              1. 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