Announcement

Collapse
No announcement yet.

(my)sql anfänger-problem

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

  • (my)sql anfänger-problem

    moin
    *edit: - sry wär vllt im mysql-bereich besser aufgehoben gewesen - hatte nicht gesehn dass dafür ein extra bereich da ist

    erstmal sorry für die warscheinlich dumme frage - aber ich find grad absolut keine hilfreiche erklärung dafür ^^ vllt kann mir hier ja jemand helfen

    ich habe das problem dass mir mysql sämtliche referenzen vermurkst

    ich habe jetzt folgende zwei tabellen (soll für ne webseite werden):

    Code:
    create table user(
      id int auto_increment primary key,
      prename varchar(255) not null,
      lastname varchar(255) not null,
      nickname varchar(255) not null unique,
      password varchar(255) not null
      );
    
    create table chars(
      id int auto_increment primary key,
      name varchar(255),
      uid int not null references cms_user(id) on delete cascade
      );
    wenn jetzt einen eintrag aus 'user' lösche sollten ja eigendlich alle einträge aus 'chars' mit zugeordneter user-id auch gelöscht werden - was aber nicht passiert (uid bleibt beim gleichen wert)

    aso - kann in meinem sql-editor aus der tabelle den code zum erstellen erzeugen lassen - dabei kommt folgendes raus:

    Code:
    CREATE TABLE `cms_chars` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(255) default NULL,
      `uid` int(11) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
    meine vermutungen wären eigendlich nur dasses entweder am sql-editor ("EMS sql manager 2007 lite") oder am auto_increment liegen könnte - würde mich aber beides wundern - bzw im postgreSQL hatte der (zumindest ähnlicher) code funktioniert

    aso hab die referenz auch mit
    Code:
    uid int not null references user.id on delete cascade,
    probiert - gleiches ergebnis ^^

    lg, hoffe hier kann mir vllt jemand bissel weiterhelfen ^^



    *edit:

    bin auf http://dev.mysql.com/doc/refman/5.1/...nstraints.html gestossen und habs mal folgendermaßen versucht:

    Code:
    create table userinno(
      id int auto_increment,
      prename varchar(255) not null,
      lastname varchar(255) not null,
      nickname varchar(255) not null unique,
      password varchar(255) not null,
      index(id)
      ) ENGINE=InnoDB;
    
    create table charsinno(
      id int auto_increment,
      name varchar(255),
      uid int not null references userinno(id) on delete cascade,
      index(id)
      ) ENGINE=InnoDB;
    ist aber immernoch das gleiche problem
    Zuletzt editiert von sataan1337; 19.07.2009, 16:59.

  • #2
    Hallo,

    für die korrekte Handhabung von referentieller Integrität ist der Tabellentyp MyISAM nicht geeignt. Dieser unterstützt RI zwar syntaktisch - d.h. er meckert nicht beim Anlegen - die Constraints werden aber in keinster Weise beachtet.
    Bei der Verwendung von InnoDB als Engine sollte dagegegn auch ein DELETE CASCADE wie erwartet funktionieren.

    Originally posted by sataan1337 View Post
    ...
    wenn jetzt einen eintrag aus 'user' lösche sollten ja eigendlich alle einträge aus 'chars' mit zugeordneter user-id auch gelöscht werden - was aber nicht passiert (uid bleibt beim gleichen wert)
    Was meinst du genau mit "uid bleibt beim gleichen wert"?

    Außerdem sollte sich ein Fremdschlüssel immer auf einen Primary oder Unique Key beziehen. Die Tabellendefinition müßte also korrekterweise so aussehen:
    [highlight=sql]
    create table userinno(
    id int auto_increment,
    prename varchar(255) not null,
    lastname varchar(255) not null,
    nickname varchar(255) not null unique,
    password varchar(255) not null,
    primary key(id)
    ) ENGINE=InnoDB;

    create table charsinno(
    id int auto_increment,
    name varchar(255),
    uid int not null,
    primary key(id),
    constraint userinno_id foreign key (uid) references userinno(id) on delete cascade
    ) ENGINE=InnoDB;
    [/highlight]

    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


    • #3
      omg ich hab bei der inno-db die primary keys vergessen *schäm ^^
      danke dir
      so funktionierts doch tatsächlich ^^

      Comment

      Working...
      X