为什么在向表中添加外键约束时出错?

时间:2012-05-02 00:12:25

标签: sql wordpress foreign-keys foreign-key-relationship

表wp_users wordpress有这样的语法:

CREATE TABLE `wp_users` (
  `ID` bigint(20) unsigned NOT NULL auto_increment,
  `user_login` varchar(60) NOT NULL default '',
  `user_pass` varchar(64) NOT NULL default '',
  `user_nicename` varchar(50) NOT NULL default '',
  `user_email` varchar(100) NOT NULL default '',
  `user_url` varchar(100) NOT NULL default '',
  `user_registered` datetime NOT NULL default '0000-00-00 00:00:00',
  `user_activation_key` varchar(60) NOT NULL default '',
  `user_status` int(11) NOT NULL default '0',
  `display_name` varchar(250) NOT NULL default '',
  PRIMARY KEY  (`ID`),
  KEY `user_login_key` (`user_login`),
  KEY `user_nicename` (`user_nicename`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

我想整合一个已经为wordpress实现的系统,但是我遇到连接表wp_users的外键问题。

我有这张桌子:

CREATE TABLE attach (
  attach_id int unsigned NOT NULL auto_increment,     
  email varchar(60) NOT NULL default '',
  PRIMARY KEY  (attach_id),
  FOREIGN KEY (email) REFERENCES wp_users(user_login_key) 
  ON UPDATE CASCADE ON DELETE CASCADE
)Engine=INNODB;

我想从wp_users连接到user_email,但是user_login和user_email将是相同的...由于其他表中的其他情况,完全不可能将w__users中的attach_id定义为ID到ID。

当我提交时给出错误#1005

2 个答案:

答案 0 :(得分:1)

在表CREATE TABLE attach的第二个create语句中,您有像这样的外键引用

FOREIGN KEY (email) REFERENCES wp_users(user_login_key)

在上面的语句中,名称 user_login_key 引用表wp_users中的约束。创建外部约束时,需要在另一个表中引用要创建关系而不是约束名称的字段名称。更改 CREATE TABLE attach 中的引用语句,如下所示以解决此问题。在此声明中, user_login 指的是同名的列

FOREIGN KEY (email) REFERENCES wp_users(user_login)

Click here to view that both tables are created successfully in SQL Fiddle.

脚本

    CREATE TABLE attach 
(
        attach_id   int unsigned NOT NULL auto_increment
    ,   email varchar(60) NOT NULL default ''
    ,   PRIMARY KEY  (attach_id)
    ,   FOREIGN KEY (email) REFERENCES wp_users(user_login) 
        ON UPDATE CASCADE ON DELETE CASCADE
)Engine=INNODB;

答案 1 :(得分:1)

请检查您的父母和孩子的栏目数据类型是否相同?

例如:

父表中的

具有

  Fb_user_id INT(4) NOT NULL,
你的子表中的

也必须提供相同的数据类型,如
      ID INT(4)NOT NULL,

不要添加任何额外的属性,例如             无符号  像那样。