先看个表实例:
mysql> CREATE TABLE `ZZJG` (
`id` int(11) NOT NULL auto_increment,
`orgid` varchar(32) NOT NULL COMMENT '组织机构ID',
`orgname` varchar(32) DEFAULT NULL COMMENT '组织机构名称',
`parentid` varchar(32) DEFAULT NULL COMMENT '上级组织机构ID',
index(`orgid`),
PRIMARY KEY (`id`,`orgid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='组织机构表';
Query OK, 0 rows affected
mysql> CREATE TABLE `REGION` (
`id` int(11) NOT NULL auto_increment,
`regionid` varchar(32) NOT NULL COMMENT '区域ID',
`regionname` varchar(32) NOT NULL COMMENT '区域名称',
`pregionid` varchar(32) DEFAULT NULL COMMENT '上级区域ID ',
`orgid` varchar(32) DEFAULT NULL COMMENT '上级组织机构ID ',
index(`regionid`,`orgid`),
PRIMARY KEY (`id`),
foreign key(`orgid`) references zzjg(`orgid`) on delete cascade on update cascade
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域表';
Query OK, 0 rows affected
==============================================================
很多时候,我们去创建外键,总是出错。这个主要是我们没搞清楚创建条件、没有认真阅读操作手册造成的。
常出错的错误报告就是:ERROR 1005 : Can't create table '.\DB\XXXTable.frm' (errno: 150)
==================================条件/注意事项==========================
为了建立两个MySQL表之间的一个外键关系,必须满足以下三种情况:
* 两个表必须是InnoDB表类型。
* 使用在外键关系的域(字段)必须为索引型(Index)。所以要为设置外键的字段建立index。
* 使用在外键关系的两个域(字段)数据类型要相同。
http://hi.baidu.com/jsjok/blog/item/7699668deb954bf4f11f3642.html