Я создал таблицу в MySQL:
CREATE TABLE actions ( A_id int NOT NULL AUTO_INCREMENT,
type ENUM('rate','report','submit','edit','delete') NOT NULL,
Q_id int NOT NULL,
U_id int NOT NULL,
date DATE NOT NULL,
time TIME NOT NULL,
rate tinyint(1),
PRIMARY KEY (A_id),
CONSTRAINT fk_Question FOREIGN KEY (Q_id) REFERENCES questions(P_id),
CONSTRAINT fk_User FOREIGN KEY (U_id) REFERENCES users(P_id));
Это создало таблицу, которую я хотел просто отлично (хотя команда "DESCRIBE actions;" показала мне, что внешние ключи были ключами типа MUL, и я не уверен, что это значит). Однако, когда я пытаюсь ввести Q_id или U_id, которого нет в таблицах вопросов или пользователей, MySQL все еще допускает эти значения.
Что я сделал неправильно? Как предотвратить запрет таблицы с внешним ключом принимать недопустимые данные?
ОБНОВЛЕНИЕ 1
Если я добавлю TYPE=InnoDB
в конец, я получаю сообщение об ошибке:
ОШИБКА 1005 (HY000): невозможно создать таблицу. /quotes/actions.frm '(errno: 150)
Почему это может случиться?
ОБНОВЛЕНИЕ 2
Мне сказали, что важно обеспечить целостность данных с помощью функциональных внешних ключей, но также и то, что InnoDB не следует использовать с MySQL. Что вы рекомендуете?