我在 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 类型的键,我不确定这意味着什么)。但是,当我尝试输入 questions 或 users 表中不存在的 Q_id 或 U_id 时,MySQL 仍然允许这些值。
我做错了什么?如何防止具有外键的表接受无效数据?
更新 1
如果我添加TYPE=InnoDB
到最后,我会收到一个错误:
错误 1005 (HY000): 无法创建表 './quotes/actions.frm' (errno: 150)
为什么会发生这种情况?
更新 2
有人告诉我,用功能外键强制数据完整性很重要,而且 InnoDB 不应该与 MySQL 一起使用。你有什么建议吗?