Почему я получаю сообщение об ошибке при добавлении ограничения внешнего ключа в таблицу?

Таблица 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;

Я хотел подключиться к user_email из wp_users, но user_login и user_email будут одинаковыми. И совершенно невозможно определить attach_id как FK к ID из wp_users из-за других ситуаций в других таблицах.

При отправке выдает ошибку #1005


person Andrew Mut    schedule 02.05.2012    source источник


Ответы (2)


Во втором операторе создания для таблицы 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)

Нажмите здесь, чтобы убедиться, что обе таблицы успешно созданы в 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;
person Community    schedule 02.05.2012

ПОЖАЛУЙСТА, ПРОВЕРЬТЕ, ТИПЫ ДАННЫХ В ВАШИХ РОДИТЕЛЬСКИХ И ДОчерних столбцах ДОЛЖНЫ БЫТЬ ОДИНАКОВЫМИ ИЛИ НЕТ?

Например:

в вашей родительской таблице есть столбец типа

  Fb_user_id INT(4) NOT NULL,

в вашей дочерней таблице вы также должны указать тот же тип данных, что и
ID INT(4) NOT NULL,

не добавляйте никаких дополнительных атрибутов, таких как unsigned.

person kranthi kumar pulivarhty    schedule 17.05.2012