Rudi: Primary Key Wert ändern was erledigt mysql davon?

Hallo

ich programmiere mit PHP und MySQL, mein Frage ist: Ich habe eine Tabelle (Rechnung) mit einem Primary Key auf Kundenummer der auf die Tabelle (Kunde) verweist in der wiederum der Schlüssel Kundennummer ist.

Meine Frage ist, wenn ich die Kundennummer in (Rechung) mit PHP durch eine neue Nummer ersetze wird dann in Tabelle (Kunde) automatisch die Kundenummer mit ersetzt oder muß ich in (Kunde) die Kundenummer auch durch einen seperaten PHP Aufruf ändern?

Die Frage ist, wie behandelt das MySQL die Daten intern? Das mit dem Schlüsseln und Fremdschlüsseln habe ich soweit verstanden. Es geht mir nur dadrum was macht mysql für mich oder was muß ich noch ändern wenn ich ein Schlüssel ändere. Kann ja sein das mysql automatisch alle Schlüssel die in einer Beziehung stehen ändert?

Gruß Rudi

  1. Hi,

    Meine Frage ist, wenn ich die Kundennummer in (Rechung) mit PHP durch eine neue Nummer ersetze wird dann in Tabelle (Kunde) automatisch die Kundenummer mit ersetzt

    nein. Wenn eine echte Foreign Key-Beziehung existiert, wird die Änderung entweder die Rechnung mit einem anderen Kunden-Datensatz verknüpfen - oder fehlschlagen, wenn ein solcher nicht existiert.

    Die Frage ist, wie behandelt das MySQL die Daten intern?

    Kommt auf die Version an. Bei älteren (aber ggf. immer noch relativ neuen) Varianten gibt es keine Foreign Keys und damit auch keine wirkliche Bedeutung der Werte.

    Es geht mir nur dadrum was macht mysql für mich oder was muß ich noch ändern wenn ich ein Schlüssel ändere.

    Man ändert keine Primary Keys.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi!

      nein. Wenn eine echte Foreign Key-Beziehung existiert, wird die Änderung entweder die Rechnung mit einem anderen Kunden-Datensatz verknüpfen - oder fehlschlagen, wenn ein solcher nicht existiert.

      also muß ich jeden datensatz manuel ändern mysql erkennt nicht wenn ich einen schlüssel ändere das der fremdschlüssel auch geändert werden soll.

      aber anscheind gibt es bei mysql keinen echten fremdschlüssel dort gibt es nur primary keys oder uniques.

      es stimmt ein primaray key darf man nicht ändern.

      aber in mysql gibt es glaub auch keinen

      Die Frage ist, wie behandelt das MySQL die Daten intern?

      Kommt auf die Version an. Bei älteren (aber ggf. immer noch relativ neuen) Varianten gibt es keine Foreign Keys und damit auch keine wirkliche Bedeutung der Werte.

      1. Wenn du vorher einen Join auf die beiden Tabellen machst, kannst du so eine Art Änderungsweitergabe realisieren.

        Ich frag mich aber warum du in der Rechnungstabelle einen PrimKey hast in dem die Kundennummer (Kundenkey steht), dieses Feld darf in MySQL nicht als PrimKey definiert sein, lediglich die Rechnungsnummer.

        Da der PrimKey normalerweise nur zur internen Verarbeitung verwendet wird, muss man diesen auch nie ändern. Du solltest dein Datenbankmodell vielleicht nochmal überdenken!

        1. Wenn du vorher einen Join auf die beiden Tabellen machst, kannst du so eine Art Änderungsweitergabe realisieren.

          Ich frag mich aber warum du in der Rechnungstabelle einen PrimKey hast in dem die Kundennummer (Kundenkey steht), dieses Feld darf in MySQL nicht als PrimKey definiert sein, lediglich die Rechnungsnummer.

          Eine Rechnung kann nur eine Kundennummer beinhalten oder hast Du schon mal eine Rechnung mit mehreren Kundennummern gesehen?
          Dafür kann aber eine Rechnung eine Kundenummer und Kostenstellennummer beinhalten.

          Da der PrimKey normalerweise nur zur internen Verarbeitung verwendet wird, muss man diesen auch nie ändern. Du solltest dein Datenbankmodell vielleicht nochmal überdenken!

          Ich möchte den Primäry Key auch nicht ändern das war ein blödes Beispiel

          Ein Primary Key habe ich gesetzt weil es eine Rechungsnummer nur einmal geben kann.

          Ein Join habe ich bereits nur zur Abfrage benutzt aber eine Änderunsgweitergabe dass das auch geht wußte ich nicht.

          1. Ich frag mich aber warum du in der Rechnungstabelle einen PrimKey hast in dem die Kundennummer (Kundenkey steht), dieses Feld darf in MySQL nicht als PrimKey definiert sein, lediglich die Rechnungsnummer.

            Eine Rechnung kann nur eine Kundennummer beinhalten oder hast Du schon mal eine Rechnung mit mehreren Kundennummern gesehen?

            Ja, nennt sich Sammelrechnung. Aber mal Spass beiseite.
            Aber ein Kunde kann mehrere Rechnungen bekommen.

            Flo meinte bestimmt, das in der Tabelle Rechnungen niemals die Kd.-Nummer der Primary-Key sein darf (es sei denn jeder Kunde darf nur einmal bestellen in seinem Leben  ;-) ), sondern nur die Rechnungsnummer darf PK sein, weil sie einmalig ist.

            Stefan

            1. Eine Rechnung kann nur eine Kundennummer beinhalten oder hast Du
              schon mal eine Rechnung mit mehreren Kundennummern gesehen?
              Ja, nennt sich Sammelrechnung. Aber mal Spass beiseite.
              Aber ein Kunde kann mehrere Rechnungen bekommen.

              Ja klar kann das ein Kunde mehrere Rechungen bekommen, aber dafür gibt es ja auch unterschiedliche Rechungsnummern.

              Das heißt ein Kunde stellt sein Warenkorb zusammen geht an die Kasse und dann bekommt der Kunde eine Rechnungsnummer für den gesamten Warenkorb. Und in der Rechnung kann es nunmal nur eine Kundenummer geben. Wenn der Kunde mit einem zweiten Warekorb zur Kasse geht bekommt er eine neue Rechnungsnummer zugewiesen.

              Flo meinte bestimmt, das in der Tabelle Rechnungen niemals die
              Kd.-Nummer der Primary-Key sein darf (es sei denn jeder Kunde
              darf nur einmal bestellen in seinem Leben  ;-) ), sondern nur die
              Rechnungsnummer darf PK sein, weil sie einmalig ist.

              »»

              Der Primary-Key in Rechnung ist auch auf die Rechnungsnummer gesetzt die Kundenummer ist nur ein Schlüssel auf Tabelle (Kunde) Kundenummer. Aber wie es mir scheint gibt es Fremdschlüssel nur in Oracle nicht in MysQL und das muß ich mit Join regeln

              1. Aber wie es mir scheint gibt es Fremdschlüssel nur in Oracle nicht in MysQL und das muß ich mit Join regeln

                Nicht nur in Ora auch in anderen DBMS, aber in Mysql z.Zt. nicht(zummindest nicht in Releases die "stable" sind. Bei MySql brauchst Du die Join's(man verzeihe mir das Apostroph)

                Stefan

            2. Flo meinte bestimmt, das in der Tabelle Rechnungen niemals die
              Kd.-Nummer der Primary-Key sein darf (es sei denn jeder Kunde
              darf nur einmal bestellen in seinem Leben  ;-) ), sondern nur die
              Rechnungsnummer darf PK sein, weil sie einmalig ist.

              Ich könnte hier höchstens eine Zusammengesetzten Primary Key aus Rechnungsnummer und Kundenummer machen wobei ein unique das selbe schein mag oder?