Referenzen werden ignoriert

allesfam

Neuer Benutzer
Beiträge
3
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
 
Werbung:
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

https://www.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.
 
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.
 
Ä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
 
Ä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

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.
 
Es geht um die Engine, nicht um das DB-System. MySQL hat verschiedene Engines:

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!
 
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:
Ich würde die Tabelle oder zumindest die FKs dafür aber sicherheitshalber neu erstellen. MySQL sollte man nicht blind vertrauen.
 
Werbung:
Zurück
Oben