Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Referenzen werden ignoriert

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von allesfam, 16 September 2014.

  1. allesfam

    allesfam Neuer Benutzer

    Hallo Leute,

    ich sitze gerade an einen kleinen Problemchen und komme nicht weiter.
    Ich habe ein Problem bei dem Referenzieren zweier Tabellen die ich erstellen möchte.

    Ich habe die Tabellen

    Category:

    ID | NAME

    und die Tabelle Activitys

    ID | NAME | CATID


    Die Catid von Activitys referenziert hierbei auf den Primary Key(ID) der Category
    Hierbei kann z.B in der Category Tabelle stehen:

    1 | Sport

    und in der Activitys Tabelle

    1 | Tanzen | 1

    Da Tanzen eine Activity der Kategorie Sport ist.


    Also habe ich die 2 Tabellen folgendermaßen erstellt:


    create table category(
    id int not null primary key,
    name varchar(30)
    )

    create table activity(
    id int not null generated always as identity primary key,
    name varchar(30) unique,
    catid int not null references category
    )

    Wenn ich nun mittels
    insert into activity (name) values ('Tanzen') oder
    insert into activity (name, catid) values ('Tanzen',7)

    etwas in die Tabelle schreiben will, wird sowohl, im ersten Fall das not null, sowie im zweitenfall die referenzielle Integrität ignoriert.


    Da ich im letztes Jahr hauptsächlich mit Java Programmiert habe, habe ich die gleichen Tabellen testweise in der H2 Console angelegt und hierbei funktioniert alles reibungslos und die Datenbank lässt mich keine falschen Einträge hinzufügen.

    Daher verstehe ich nun nicht wirklich, was im phpmyadmin anders sein soll, so dass dies alles nicht funktioniert.

    Es würde mich freuen, wenn mir jemand helfen kann.

    Greetz AllesFAM
     
  2. akretschmer

    akretschmer Datenbank-Guru

    http://datenbankforum.com/threads/mysql-user-verwenden.2014/ , Antwort #6

    Verwende halt irgend was anderes, alles ist besser als MySQL. Meine Empfehlung: PostgreSQL. Das kann auch V8, JSON und so.
     
  3. ukulele

    ukulele Datenbank-Guru

    Also was Referenzielle Integrität angeht so kann die nur InnoDB und nicht MyISAM (das schluckt einfach nur die Befehle, tut aber nichts dergleichen). Ich gehe mal stark davon aus das das der Unterschied ist, MyAdmin nutzt vermutlich MyISAM per default.

    MySQL ist manchmal eben für Fuscher gemacht.
     
  4. allesfam

    allesfam Neuer Benutzer

    Ähm sorry, die Antwort versteh ich jetzt nicht ganz...

    Also ich verwende ja eine Datenbank auf einem Webspace über welche ich mittels Phymyadmin zugreife.
    Wie soll ich hier einfach die Datenbank wechseln? Vieleicht eine doofe Frage, aber ich habe mich damit noch nie auseinander gesetzt, da die "normale" Datenbank eingentlich immer gereicht hat
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Es geht um die Engine, nicht um das DB-System. MySQL hat verschiedene Engines: MyISAM: steinalt, ohne Transaktionen. InnoDB: besser als MyISAM, kann aber auch keine Check-Constraints oder andere nette Dinge. Meine Lieblingsengine ist aber Blackhole: sauschnell beim speichern und super starke Datenkompression. Kleiner Nachteil: leere Ergebnissmengen beim Select. Aber wer MySQL verwendet rechnet ja eh immer mit dem GAU. Zumindest sollte er das.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Um das mal zu zeigen:

    Code:
    mysql> create table master (id int primary key);
    Query OK, 0 rows affected (0.04 sec)   
    
    mysql> create table slave(m_id int, constraint xxx foreign key (m_id) references master(id));
    Query OK, 0 rows affected (0.04 sec)   
    
    mysql> insert into slave values (1);
    Query OK, 1 row affected (0.02 sec)
    
    versus

    Code:
    mysql> create table master (id int primary key) engine = innodb;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> create table slave(m_id int, constraint fk_slave_master foreign key (m_id) references master(id)) engine = innodb;
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> insert into slave values (1);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db183175_2`.`slave`, CONSTRAINT `fk_slave_master` FOREIGN KEY (`m_id`) REFERENCES `master` (`id`))
    
    Faszinierend, gell? Diese und viele andere Bugs werden Ihnen präsentiert von MySQL AB, ähm, SUN, ähm Oraggle. Und besuchen sie uns morgen wieder!
     
  7. allesfam

    allesfam Neuer Benutzer

    Ok ok, dann freut es mich ja zumindest mal das ich nicht der Idiot bin, warum es nicht funktioniert :D

    Aber was ich leider immer noch nicht verstehe, wie kann ich denn die Engine auf meinem Webspace wechseln?
    Sorry ich hab da wiegesagt leider garkeine Ahnung davon, bisher war MySQL für Websachen immer vollkommen ausreichend

    Edit: ok hat sich erledigt ich habs gefunden =)
    für alle die das Problem vilt auch haben

    Code:
    ALTER TABLE TableName ENGINE = InnoDB;
    
    Werde mal versuchen ob ich es so hin bekomm,
    vielen Dank !
     
    Zuletzt bearbeitet: 16 September 2014
  8. ukulele

    ukulele Datenbank-Guru

    Ich würde die Tabelle oder zumindest die FKs dafür aber sicherheitshalber neu erstellen. MySQL sollte man nicht blind vertrauen.
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Yeah. Bereits vorhandene Datensätze, die gegen den Constraint verstoßen, werden soweit ich weiß nicht erkannt.
     
  10. Hony%

    Hony% Datenbank-Guru

    Werden sie auch nicht, da sie sich technisch wie INSERT bzw. UPDATE Trigger verhalten.

    Blackhole kann genauso sinnvoll sein wie /dev/null ;)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden