2013-08-17 3 views
1

У меня есть эта странная проблема с созданием внешнего ключа.# 1215 - Невозможно добавить ограничение внешнего ключа

Учитывая 2 таблицы:

CREATE TABLE IF NOT EXISTS `groupdeals` (
    `groupdeals_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `product_id` int(10) NOT NULL, 
    `merchant_id` int(11) NOT NULL, 
    `minimum_qty` int(11) NOT NULL, 
    `maximum_qty` int(11) NOT NULL, 
    `target_met_email` int(11) NOT NULL, 
    `coupon_barcode` text NOT NULL, 
    `coupon_merchant_address` int(11) NOT NULL, 
    `coupon_merchant_contact` int(11) NOT NULL, 
    `coupon_expiration_date` date DEFAULT NULL, 
    `coupon_price` int(11) NOT NULL, 
    `coupon_fine_print` int(11) NOT NULL, 
    `coupon_highlights` int(11) NOT NULL, 
    `coupon_merchant_description` int(11) NOT NULL, 
    `coupon_business_hours` int(11) NOT NULL, 
    `coupon_merchant_logo` int(11) NOT NULL, 
    `coupon_additional_info` text NOT NULL, 
    `position` int(11) NOT NULL, 
    PRIMARY KEY (`groupdeals_id`), 
    KEY `groupdeals_id` (`groupdeals_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

и

CREATE TABLE IF NOT EXISTS `groupdeals_coupons` (
    `coupon_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `groupdeals_id` int(11) NOT NULL, 
    `order_item_id` int(11) NOT NULL, 
    `coupon_code` varchar(255) NOT NULL DEFAULT '', 
    `redeem` varchar(255) NOT NULL DEFAULT '', 
    `status` varchar(255) NOT NULL DEFAULT '', 
    PRIMARY KEY (`coupon_id`), 
    KEY `fk_groupdeals_coupons_groupdeals1_idx` (`groupdeals_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Я пытаюсь добавить внешний ключ, выполнив следующий запрос:

ALTER TABLE `groupdeals_coupons` 
ADD CONSTRAINT `fk_groupdeals_coupons_groupdeals1` 
    FOREIGN KEY (`groupdeals_id`) 
    REFERENCES `groupdeals` (`groupdeals_id`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE; 

Все я получаю ошибка:

#1215 - Cannot add foreign key constraint 

показать состояние двигателя InnoDB

------------------------ 
LATEST FOREIGN KEY ERROR 
------------------------ 
2013-08-17 13:47:49 7ff5dbb2c700 Error in foreign key constraint of table xxxxx/#sql-7b23_282b1a: 

FOREIGN KEY (`groupdeals_id`) 
REFERENCES `groupdeals` (`groupdeals_id`) 
ON DELETE CASCADE 
ON UPDATE CASCADE: 
Cannot find an index in the referenced table where the 
referenced columns appear as the first columns, or column types 
in the table and the referenced table do not match for constraint. 
Note that the internal storage type of ENUM and SET changed in 
tables created with >= InnoDB-4.1.12, and such columns in old tables 
cannot be referenced by such columns in new tables. 
See http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html 
for correct foreign key definition. 

колонна groupdeals.groupdeals_id является первичным, так что я действительно не могу понять, где проблема: |

Любые подсказки?

Тип сервера: Сервер Percona Версия сервера: 5.6.11-rc60.3-журнал - Percona сервер (GPL), выпуск 60,3

ответ

6

Ваши типы противоречивы:

CREATE TABLE IF NOT EXISTS `groupdeals` (
    `groupdeals_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 

CREATE TABLE IF NOT EXISTS `groupdeals_coupons` (
    [...] 
    `groupdeals_id` int(11) NOT NULL, 

Как вы видите, в одной таблице вы имеете int unsigned. В другом, только int.


Кстати, я заметил, у вас есть два ключи на groupdeals_id. Это специально?

CREATE TABLE IF NOT EXISTS `groupdeals` (
    [...] 
    PRIMARY KEY (`groupdeals_id`), 
    KEY `groupdeals_id` (`groupdeals_id`) 
+0

Infact это был неподписанный вопрос, пропустил тот. Благодарю. – Alekc

0

Попробуйте эти два шага, чтобы добавить внешний ключ: -

  1. alter table groupdeals_coupons modify groupdeals_id int unsigned not null default 0;

  2. ALTER TABLE groupdeals_coupons ADD CONSTRAINT fk_groupdeals_coupons_groupdeals1 FOREIGN KEY (groupdeals_id) references groupdeals (roupdeals_id);

+0

В таблице вопросника 'groupdeals_coupons' на самом деле уже есть столбец' groupdeals_id'. Я полагаю, вы имели в виду 'modify' или' change' вместо 'add'. –

+0

Точно и даже пытаюсь создать groupdeals_id2 (просто чтобы проверить, не является ли неподписанная причина). Я все еще получаю сообщение об ошибке – Alekc

+0

@TomasCreemers: - Да, я только что видел. Обновлен мой ответ !!!! –

 Смежные вопросы

  • Нет связанных вопросов^_^