Announcement

Collapse
No announcement yet.

relationen erstellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • relationen erstellen

    Hi Leute,

    ich habe mich nun durch alle möglich sql-tutorials gewühlt und im netz findet man sehr wehig einsteigerfreundliches (zumindest kaum was auf deutsch).

    Ich habe zum einen eine Tabelle (namens "user") mit den Spalten user_id (Primary Key), username (unique) und passwort.
    Dann habe ich noch eine Tabelle mit persönlichen Daten (namens "user_info") wie email adresse oder Telefonummer und eben auch mit einer Spalte user_id (ebenfalls Primary Key)damit man einwandfrei sehen kann welcher datensatz zu welchen user gehört.

    Nun möchte ich die Spalte "user_id" der Tabelle "user_info" so mit der Spalte "user_id" der Tabelle "user" verknüpfen das ich keinen Datensatz in der tabelle "user_info" anlegen kann, der eine user_id hat, die nicht in in der Tabelle "user" existiert.

    Desweiteren soll eine Änderung der user_id in der Tabelle "user" ebenfalls eine Änderung der user_id im zugehörigen Datensatz zur folge haben.
    Das ist allerdings sekundär und nur zu Übungszwecken weil dieser Fall im konkreten Beispiel wohl nicht vorkommen wird.

    Hauptsächlich soll das erstere Möglich sein.
    Ich habe es folgendermaßen versucht:

    Code:
    create table user_info 
    (
     user_id int not null primary key references user(user_id),
     email varchar(32) not null,
     name varchar(32) not null,
     vorname varchar(32) not null,
     wohnort varchar(32) not null,
     plz int not null,
     strasse varchar(32) not null,
     telefonnr varchar(32) not null,
     faxnr varchar(32) not null
    )
    geht aber schief

    auch habe ich es statt
    Code:
     user_id int not null primary key references user(user_id),
    so probiert:
    Code:
     user_id int not null primary key,
     ...,
     ...,
     foreign key (user_id) reference user (user_id)
    Allerding funktionieren beide obig aufgeführten Wünsche nicht. Es ist als wären es 2 ganz verschiedene Tabellen ohne jegliche Verknüpfung.

    Hoffe wirklich jemand hat n Ratschlag. Bin frustriert

    Übrigens benutze ich mysql version 5.0.45

    Danke schonml für eure Mühen

    P.S Falls jemand n gutes e-book oder ne gute webseite zum Theam SQL weiß (für etwas Anfänger oder Fortgeschrittenere) wäre ich für einen Link echt dankbar

  • #2
    [highlight="sql"]
    create table user_info
    (
    id int not null primary key,
    user_id not null
    email varchar(32) not null,
    name varchar(32) not null,
    vorname varchar(32) not null,
    wohnort varchar(32) not null,
    plz int not null,
    strasse varchar(32) not null,
    telefonnr varchar(32) not null,
    faxnr varchar(32) not null
    foreign key (user_id) reference user (user_id)
    )
    [/highlight]

    Comment


    • #3
      Danke erstmal für die schnelle Antwort

      Hat mysql zwar geschluckt (nachdem ich die synthax Fehler gebügelt habe) aber die zwei Tabellen verhalten sich immernoch komplett fremd zueinnander. Das heißt wenn ich die user_id eines Eintrags in "user" ändere kümmert das den Eintrag in "user_info" immernoch herzlich wenig. Auch kann ich immernoch Einträge mit ungültigen user_id in "user_info" erstellen.

      ich habe die Tabelle mit folgender Anweisung erstellt:
      Code:
      CREATE TABLE user_info(
      id int NOT NULL PRIMARY KEY ,
      user_id int NOT NULL ,
      email varchar( 32 ) NOT NULL ,
      name varchar( 32 ) NOT NULL ,
      vorname varchar( 32 ) NOT NULL ,
      wohnort varchar( 32 ) NOT NULL ,
      plz int NOT NULL ,
      strasse varchar( 32 ) NOT NULL ,
      telefonnr varchar( 32 ) NOT NULL ,
      faxnr varchar( 32 ) NOT NULL ,
      momentaner_ag varchar( 64 ) ,
      FOREIGN KEY ( user_id ) REFERENCES user( user_id )
      )
      Habe gelesen das mysql die Anweisung FOREIGN KEY gar nicht kennt und einfach übergeht. Ist da was dran?

      ich weiß jetzt auch nicht mehr
      Zuletzt editiert von the knowless; 18.02.2008, 23:38.

      Comment


      • #4
        Hallo,

        wenn du unter MySQL Fremdschlüssel einsetzen möchtest, mußt du als Engine InnoDB verwenden! MyISAM schluckt zwar die Syntax, ignoriert FKs aber ansonsten vollständig.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Danke für den Tipp werd mal schauen ob ich es nun zum laufen bringe.
          Werd hier posten ob es geklappt hat.

          Comment


          • #6
            So nun hab ichs zum laufen gebracht:

            Als erstes muß man die my.cnf Datei im Verzeichniss "/mysql/bin" mit dem Editor öffnen. Dies geht aber unter Windows nicht indem ihr die Datei einfach öffnet, denn Windows erkennt eine soche Datei als Verknüpfung und weigert sich diese über den herkömmlichen Weg zu öffnen (also doppelklick auf die Datei).
            Folglich wird sie auch nicht als "my.cnf" sondern einfach nur als "my" dargestellt.

            Also müssen wir das Notepad öffnen und dann über das Öffnen Menü die Datei suchen und öffnen (geht natürlich nur wen die Option "alle Dateien" bei Dateityp gewählt wurde)

            Nun müssen diese Zeilen:

            Code:
            skip-innodb
            # Uncomment the following if you are using InnoDB tables 
            #innodb_data_home_dir = E:/inet/XAMPP/mysql/data/
            innodb_data_file_path = ibdata1:10M:autoextend 
            #innodb_log_group_home_dir = E:/inet/XAMPP/mysql/data/
            #innodb_log_arch_dir = E:/inet/XAMPP/mysql/data/
            # You can set .._buffer_pool_size up to 50 - 80 % 
            # of RAM but beware of setting memory usage too high 
            #set-variable = innodb_buffer_pool_size=16M 
            #set-variable = innodb_additional_mem_pool_size=2M 
            # Set .._log_file_size to 25 % of buffer pool size 
            #set-variable = innodb_log_file_size=5M 
            #set-variable = innodb_log_buffer_size=8M 
            #innodb_flush_log_at_trx_commit=1 
            #set-variable = innodb_lock_wait_timeout=50
            Durch folgende ersetzt werden:

            Code:
            #skip-innodb
            default-storage-engine=INNODB 
            # Uncomment the following if you are using InnoDB tables 
            innodb_data_home_dir = E:/inet/XAMPP/mysql/data/
            innodb_data_file_path = ibdata1:10M:autoextend 
            innodb_log_group_home_dir = E:/inet/XAMPP/mysql/data/
            innodb_log_arch_dir = E:/inet/XAMPP/mysql/data/
            # You can set .._buffer_pool_size up to 50 - 80 % 
            # of RAM but beware of setting memory usage too high 
            set-variable = innodb_buffer_pool_size=16M 
            set-variable = innodb_additional_mem_pool_size=2M 
            # Set .._log_file_size to 25 % of buffer pool size 
            set-variable = innodb_log_file_size=5M 
            set-variable = innodb_log_buffer_size=8M 
            innodb_flush_log_at_trx_commit=1 
            set-variable = innodb_lock_wait_timeout=50
            nun kann man Foreign Keys benutzen.

            danke nochmal für eure Hilfe

            Comment

            Working...
            X