Hej.
Jag försöker att skapa en databas med ett antal tabeller som refererar till varandra med hjälp av foreign keys. När en rad tas bort någonstans ska refererade rader också tas bort med hjälp av ON DELETE.
Jag har skrivit queries för hand och därefter stoppat in dem i databasservern via phpMyAdmins query-fönster. Tabellerna använder InnoDb
Jag får inga felmeddelanden när jag kör koden men när jag sen tittar i relationsvyn som phpMyAdmin har för tabeller så finns inga relationer kvar för OrderContains
och dessutom inga "on delete"-regler.
Cannot delete or update a parent row: a foreign key constraint fails (`exampletable`.`OrderContains`, CONSTRAINT `OrderContains_ibfk_1` FOREIGN KEY (`customer`, `orderNr`) REFERENCES `Orders` (`customer`, `orderNr`))
DELETE FROM `Orders` WHERE `customer` = 1236 AND `orderNr` = '0'
När jag försöker ta bort något från Orders så får jag detta felmeddelande.
CREATE TABLE Users
(
userNr INT,
password VARCHAR(50),
language CHAR(3),
name VARCHAR(32),
email VARCHAR(32),
phone VARCHAR(32),
security_level INT,
address VARCHAR(32),
comment TEXT,
PRIMARY KEY (userNr)
) ENGINE=INNODB;
CREATE TABLE Customers
(
userNr INT,
FOREIGN KEY (userNr) REFERENCES Users(userNr)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (userNr)
) ENGINE=INNODB;
CREATE TABLE Items
(
itemNr VARCHAR(32),
revision VARCHAR(32),
description TEXT,
weight FLOAT,
added DATE,
PRIMARY KEY(itemNr, revision)
) ENGINE=INNODB;
CREATE TABLE Orders
(
customer INT,
orderNr INT,
title VARCHAR(32),
added DATE,
status CHAR(1),
notes TEXT,
PRIMARY KEY (customer, orderNr),
FOREIGN KEY (customer) REFERENCES Customers(userNr)
ON UPDATE CASCADE
ON DELETE CASCADE
) ENGINE=INNODB;
CREATE TABLE OrderContains
(
customer INT,
orderNr INT,
itemNr VARCHAR(32),
revision VARCHAR(32),
quantity INT,
PRIMARY KEY (customer, orderNr, itemNr, revision),
FOREIGN KEY (customer, orderNr) REFERENCES Orders(customer, orderNr)
ON UPDATE CASCADE
ON DELETE CASCADE,
FOREIGN KEY (itemNr, revision) REFERENCES Items(itemNr, revision)
ON UPDATE CASCADE
ON DELETE CASCADE
) ENGINE=INNODB;
Problemet verkar ligga i OrderContains uppbyggnad. Jag skulle vara väldigt tacksam för förslag på lösningar.