I'm trying to connect a couple of Mysql tables with foreign keys and ON UPDATE/DELETE rules. My rules are working on all tables except the last one (OrderContains). Why aren't my rules working?
I am using phpMyadmin to run my hand written queries and I can see in the relational view (part of phpMyadmin) of the OrderContains table that there are no connections.
I can't even find the Orders.orderNr in the list of possible connections.
Any suggestions?
Here are my table definitions:
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;
I made the following query in phpMyAdmin SHOW CREATE TABLE OrderContains
and I got this result:
CREATE TABLE `OrderContains` (
`customer` int(11) NOT NULL DEFAULT '0',
`orderNr` int(11) NOT NULL DEFAULT '0',
`itemNr` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`revision` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`quantity` int(11) DEFAULT NULL,
PRIMARY KEY (`customer`,`orderNr`,`itemNr`,`revision`),
KEY `itemNr` (`itemNr`,`revision`),
CONSTRAINT `OrderContains_ibfk_1` FOREIGN KEY (`customer`, `orderNr`) REFERENCES `Orders` (`customer`, `orderNr`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `OrderContains_ibfk_2` FOREIGN KEY (`itemNr`, `revision`) REFERENCES `Items` (`itemNr`, `revision`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
I've also tried restarting the server.
SHOW CREATE TABLE OrderContainsin the "SQL" tab to be sure that the table was created as above. – ypercube Apr 23 '12 at 14:13