2012-05-02 10 views
1

表のwp_usersのワードプレスこの構文があります。テーブルに外部キー制約を追加する際にエラーが発生するのはなぜですか?

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が同じになります...そして、wp_usersからIDへのFKとしてattach_id定義することは全く不可能です、他のテーブルの他の状況のた​​めです。

私が提出し

がテーブル CREATE TABLE attachのためのあなたの第二create文でエラー#1005

答えて

1

を与え、あなたは上記の声明の中で、この

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

YOUR親と子列のデータ型を確認してください同じでORしなければなりませんない?例については

あなたの親テーブルでもuは(4)、NOT NULL
IDのINTのように同じデータ型を与える必要があり、あなたの子テーブル内の列のような

Fb_user_id INT(4) NOT NULL, 

を持って、

のような余分な属性を追加しないでください。署名付き です。

関連する問題