2012-05-02 33 views
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将是相同的。而这是完全不可能的FK从wp_users定义attach_id到ID,由于其他表格中的其他情况。

当我提交给了错误#1005

回答

1

在该表CREATE TABLE attach你的第二个创建语句,你有这样的

FOREIGN KEY (email) REFERENCES wp_users(user_login_key) 

在上面的语句外键参考,名字user_login_key引用表wp_users中的约束。创建外部约束时,您需要在另一个表中创建您想创建关系的字段名称,而不是约束名称。如下更改CREATE TABLE附件中的参考声明以解决问题。在这份声明中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

请检查您的父母与子女列的数据类型必须相同或不?

例如:

在父表中有列像

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

还ü必须给予相同的数据类型一样
ID INT(4)NOT NULL,

不会像这样添加任何额外的属性,如 无符号的 。