1

表 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 将是相同的。由于其他表中的其他情况,完全不可能将 attach_id 定义为 wp_users 到 ID 的 FK。

当我提交时给出错误#1005

4

2 回答 2

2

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

FOREIGN KEY (email) REFERENCES wp_users(user_login_key)

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

FOREIGN KEY (email) REFERENCES wp_users(user_login)

点击这里查看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;
于 2012-05-02T01:03:51.177 回答
1

请检查您的父子列数据类型是否必须相同?

例如:

在您的父表中有类似的列

  Fb_user_id INT(4) NOT NULL,

在您的子表中,您还必须提供相同的数据类型,例如
ID INT(4) NOT NULL,

不要添加任何额外的属性,如 unsigned 那样。

于 2012-05-17T13:45:55.783 回答