我在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
,我会收到错误:
ERROR 1005 (HY000): 无法创建表 './quotes/actions.frm'(errno: 150)
为什么会发生这种情况?
更新2
据我所知,使用功能性外键强制执行数据完整性很重要,但也有人说InnoDB不应与MySQL一起使用。你有什么建议?