我正试图在我的表上设置外键约束,以便在删除主键时自动删除该行。
主表是
CREATE TABLE IF NOT EXISTS `tbl_users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(250) NOT NULL,
`password` varchar(250) NOT NULL,
`user_role` varchar(100) NOT NULL DEFAULT 'staff',
`user_name` varchar(250) NOT NULL DEFAULT 'staff name',
`user_email` varchar(250) NOT NULL,
`user_phone` varchar(15) NOT NULL,
`user_login_status` tinyint(1) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM; 外键表是
CREATE TABLE IF NOT EXISTS `tbl_user_meta` (
`user_id` int(11) NOT NULL,
`staff_id` int(11) NOT NULL,
`dep_id` int(11) NOT NULL,
`class_id` int(11) NOT NULL,
`subject_id` int(11) NOT NULL
) ENGINE=MyISAM我使用以下查询设置外键
alter table tbl_user_meta add foreign key('user_id') references tbl_users('user_id') on delete cascade;查询正常,但外键约束不起作用,请帮助我
我用mysql 5.6.12在windows上使用wamp服务器
发布于 2013-12-13 07:47:11
MyISAM引擎不支持外键约束。
外键差异 InnoDB存储引擎支持检查外键约束,包括级联、删除和更新。参见14.2.3.4节,“InnoDB和外键约束”。 用于InnoDB以外的存储引擎,MySQL服务器在CREATE语句中解析外键语法,但不使用或存储.
要能够使用FK约束,必须使用InnoDB engine。
您可以这样更改表的引擎。
ALTER TABLE tbl_users ENGINE = InnoDB;
ALTER TABLE tbl_user_meta ENGINE = InnoDB; UPDATE您可以使用此查询为所有表生成ALTER TABLE语句
SELECT GROUP_CONCAT(CONCAT(
'ALTER TABLE `', table_name, '` ENGINE=InnoDB') SEPARATOR ';\n')
FROM information_schema.tables
WHERE table_schema = SCHEMA()
AND ENGINE = 'MyISAM';然后复制并执行
这是SQLFiddle演示
发布于 2013-12-13 07:52:42
使用INNODB。
参见这里的详细信息,http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-foreign-keys.html。
https://stackoverflow.com/questions/20561485
复制相似问题