1

テーブルwp_userswordpressの構文は次のとおりです。

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 ;

そして、すでにワードプレス用に実装されているシステムを統合したかったのですが、テーブル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

テーブルの 2 番目の create ステートメントでは、次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 に答える