REFERENCES users (id)

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • REFERENCES users (id)

    Hallo,

    Also ich bin neu hier im Forum und hab auch gleich schon eine Frage.

    Es geht um den Befehl REFERENCES beim erstellen einer Tabelle in mysql.

    Was genau bewirkt dieser Befehl?

    Danke schon mal.

    mfg peter

  • #2
    RTFM
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      vielen dank tontechniker.

      aber habe nun folgendes problem.

      als wenn ich die zwei tabellen vom beispiel so erstell:
      Code:
      CREATE TABLE parent (id INT NOT NULL,
                          PRIMARY KEY (id)
      ) ENGINE=INNODB;
      CREATE TABLE child (id INT, parent_id INT,
                         INDEX par_ind (parent_id),
                         FOREIGN KEY (parent_id) REFERENCES parent(id)
                           ON DELETE CASCADE
      ) ENGINE=INNODB;
      und dann in beiden tabellen einen datensatz anlege,
      dann müsste doch beim löschen des datensatzes in der tabelle parent auch der datensatz in der tabelle child automatisch gelöscht werden.

      das funktioniert aber leider nicht.

      bitte helft mir.

      mfg peter

      Kommentar


      • #4
        Andersrum!
        CASCADE: Delete or update the row from the parent table and automatically delete or update the matching rows in the child table.

        Kommentar


        • #5
          warum andersrum?

          habs doch genau so beschrieben wie dus auch meinst, oder nicht?

          mfg

          Kommentar


          • #6
            Original geschrieben von rundmc
            habs doch genau so beschrieben wie dus auch meinst, oder nicht?
            nein hast du nicht.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Doch hat er.
              CASCADE: Bei Löschung/Änderung einer Zeile der Elterntabelle werden automatisch die zugehörigen Zeilen der Kindtabelle auch gelöscht oder geändert.
              beim löschen des datensatzes in der tabelle parent auch der datensatz in der tabelle child automatisch gelöscht werden.
              Allerdings solltest du die Beschränkungen noch einmal durchgehen, der Index in der referenzierten Tabelle fehlt, wobei das Beispiel das du gepostet hast eindeutig aus der Manual kommt.
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar


              • #8
                so, danke erstmal.

                hab jetzt bei der tabelle PARENT die id spalte auf INDEX gesetzt.
                Leider funktionierts noch immer nicht.

                Bitte helft mir.

                mfg

                Kommentar


                • #9
                  Überprüfe im PMA ob die Tabelle wirklich die InnoDB-Engine verwendet. Bei dem Xampp beispielsweise ist InnoDB nicht aktiviert, dies musst du noch aktivieren, um diese Engine verwenden zu können!!

                  Kommentar


                  • #10
                    danke euch allen, das mit innodb funktioniert.

                    aber jetzt hab ich nochmal eine frage.
                    bin auf eine liste von sqlbefehlen gestoßen, und jetzt würde mich interessieren was dieser REFERENCES befehl eigentlich macht.

                    Da steht ja kein CASCADE ON DELETE oder so.

                    Code:
                    CREATE TABLE users
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      ids text,
                      name text NOT NULL,
                      vorname text NOT NULL,
                      private bool NOT NULL,
                      uni_id int4 REFERENCES unis (id),
                      image_url text
                    );
                    CREATE TABLE user_data
                    (
                      id int4 NOT NULL PRIMARY KEY REFERENCES users (id),
                      uni_year int2,
                      home_zip int4,
                      home_town text,
                      home_country text,
                      relationship int2 REFERENCES relationships (id),
                      political int2 REFERENCES political (id),
                      major int4 REFERENCES major (id),
                      ext_friends int2,
                      uni_friends int2,
                      icq int8,
                      skype text,
                      aim text,
                      jabber text,
                      tel text,
                      street text,
                      homepage text,
                      school int4 REFERENCES schools (id),
                      jobtype int4 REFERENCES jobs (id),
                      residence int4 REFERENCES residences (id),
                      room text,
                      status text,
                      interests text,
                      music text,
                      books text,
                      movies text,
                      "quote" text,
                      about text,
                      company text,
                      doing_what text,
                      career text,
                      clubs text,
                      birthdate date,
                      register_date date,
                      last_update date,
                      ************ int2
                    );
                    
                    CREATE TABLE concentration_members
                    (
                      concentration_id int4 REFERENCES concentrations (id),
                      user_id int4 REFERENCES users (id)
                    );
                    
                    CREATE TABLE concentrations
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE course_members
                    (
                      course_id int4 REFERENCES courses (id),
                      user_id int4 REFERENCES users (id)
                    );
                    
                    CREATE TABLE courses
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      turnus varchar(1) NOT NULL CHECK (turnus::text = 'W'::text OR turnus::text = 'S'::text),
                      name text,
                      "year" varchar(5) NOT NULL
                    );
                    
                    CREATE TABLE friends
                    (
                      id1 int4 REFERENCES users (id),
                      id2 int4 REFERENCES users (id)
                    );
                    
                    CREATE TABLE group_members
                    (
                      group_id int4 REFERENCES groups (id),
                      user_id int4 REFERENCES users (id)
                    );
                    
                    CREATE TABLE groups
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text,
                      ids varchar(8)
                    );
                    
                    CREATE TABLE jobs
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE lookingfor
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE lookingfor_members
                    (
                      lookingfor_id int4,
                      user_id int4 REFERENCES users (id)
                    );
                    
                    CREATE TABLE major
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE political
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE relationships
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE residences
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    
                    CREATE TABLE schools
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text,
                      "location" text
                    );
                    
                    CREATE TABLE unis
                    (
                      id int4 NOT NULL PRIMARY KEY,
                      name text
                    );
                    danke.

                    mfg rundmc

                    Kommentar


                    • #11
                      Manual lesen hilft.
                      InnoDB weist jede INSERT- oder UPDATE-Operation zurück, die versucht, einen Fremdschlüsselwert in einer Kindtabelle anzulegen, wenn kein passender Schlüsselwert in der Elterntabelle vorhanden ist. Was InnoDB mit einer INSERT- oder UPDATE-Operation anfängt, die versucht, in der Elterntabelle einen Schlüsselwert zu ändern oder zu löschen, zu dem in der Kindtabelle passende Zeilen vorhanden sind, hängt davon ab, welche Referenzaktion in den Teilklauseln ON UPDATE und ON DELETE der FOREIGN KEY-Klausel angegeben ist.
                      http://dev.mysql.com/doc/refman/5.1/...nstraints.html

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        ja, das mit dem ON DELETE CASCADE versteh ich ja.

                        Aber was ist wenn nur da steht
                        zb.:
                        Code:
                        relationship int2 REFERENCES relationships (id)
                        also ohne ON...
                        außerdem fehlt hier auch FOREIGN KEY().

                        was bringt das?

                        danke im voraus

                        mfg

                        Kommentar


                        • #13
                          Lies den zitierten Teil doch mal bitte mit Verstand?!

                          Warum FOREIGN KEY fehlt, weiß ich nicht, aber ich wage mal einfach zu behaupten, dass es auch auf der von mir verlinkten Manual-Seite steht.

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            bins nochmal,

                            ich check das nicht ganz.

                            worin liegt der underschied:

                            Code:
                            FOREIGN KEY (user_id) REFERENCES users(id);
                            und
                            Code:
                            user_id REFERENCES users(id);
                            danke
                            mfg

                            Kommentar


                            • #15
                              Scheinbar ist FOREIGN KEY immer eine separate Schreibweise, hinter der Definition der Spalten, bzw. als separates ALTER TABLE, während das simple Nutzen von REFERENCES immer nur direkt hinter der Spalten-Deklaration erfolgt - ich hab dazu zwar spontan keinen Beleg im Manual gefunden, aber das macht zumindest bei mir Sinn ... Ausprobieren könnte die These bestätigen~

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X