mysql外键不起作用

时间:2013-12-13 07:44:47

标签: mysql foreign-keys

我正在尝试在我的表上设置外键约束,以便在删除主键时自动删除该行

主表是

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;

查询正常,但外键约束无效 请帮帮我

我在Windows上使用wamp服务器使用mysql 5.6.12

2 个答案:

答案 0 :(得分:3)

MyISAM Engine不支持外键约束。

  

Foreign Key Differences
  InnoDB存储引擎支持检查外键   约束,包括CASCADE,ON DELETE和ON UPDATE。见章节   14.2.3.4,“InnoDB和FOREIGN KEY约束”   对于InnoDB以外的存储引擎,MySQL Server解析FOREIGN   CREATE TABLE语句中的KEY语法,但不使用或存储它。

为了能够使用FK约束,您必须使用 InnoDB 引擎。

您可以通过这种方式更改表格的引擎

ALTER TABLE tbl_users ENGINE = InnoDB;
ALTER TABLE tbl_user_meta ENGINE = InnoDB; 

更新您可以使用此查询为所有表生成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 演示

答案 1 :(得分:1)

使用INNODB。

请在此处查看详细信息http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-foreign-keys.html

相关问题