首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql外键不工作

mysql外键不工作
EN

Stack Overflow用户
提问于 2013-12-13 07:44:47
回答 2查看 1.5K关注 0票数 0

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

主表是

代码语言:javascript
复制
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; 

外键表是

代码语言:javascript
复制
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

我使用以下查询设置外键

代码语言:javascript
复制
alter table tbl_user_meta add foreign key('user_id') references tbl_users('user_id') on     delete cascade;

查询正常,但外键约束不起作用,请帮助我

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-13 07:47:11

MyISAM引擎不支持外键约束。

外键差异 InnoDB存储引擎支持检查外键约束,包括级联、删除和更新。参见14.2.3.4节,“InnoDB和外键约束”。 用于InnoDB以外的存储引擎,MySQL服务器在CREATE语句中解析外键语法,但不使用或存储.

要能够使用FK约束,必须使用InnoDB engine。

您可以这样更改表的引擎。

代码语言:javascript
复制
ALTER TABLE tbl_users ENGINE = InnoDB;
ALTER TABLE tbl_user_meta ENGINE = InnoDB; 

UPDATE您可以使用此查询为所有表生成ALTER TABLE语句

代码语言:javascript
复制
SELECT GROUP_CONCAT(CONCAT(
  'ALTER TABLE `', table_name, '` ENGINE=InnoDB') SEPARATOR ';\n') 
  FROM information_schema.tables
 WHERE table_schema = SCHEMA()
   AND ENGINE = 'MyISAM';

然后复制并执行

这是SQLFiddle演示

票数 3
EN

Stack Overflow用户

发布于 2013-12-13 07:52:42

使用INNODB。

参见这里的详细信息,http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-foreign-keys.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20561485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档