2012-05-03 2 views
0

Мы не можем выполнить запрос ниже. У нас есть другая таблица с именем «человек», и у нее есть первичный ключ person_id. Как вы можете видеть, мы пытаемся получить этот столбец в качестве нашего (клиентского стола) внешнего ключа. phpMyAdmin возвращает синтаксическую ошибку # 1064. Что здесь происходит?Innodb не принимает внешний ключ

CREATE TABLE IF NOT EXISTS `resort`.`customers` (
    `person_id` VARCHAR(45) NOT NULL , 
    `cid` INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    UNIQUE INDEX `person_id_UNIQUE` (`cid` ASC) , 
    PRIMARY KEY (`person_id`) , 
    UNIQUE INDEX `person_id_UNIQUE` (`person_id` ASC) , 
    CONSTRAINT `person_id` 
    FOREIGN KEY() 
    REFERENCES `resort`.`person`() 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 

К слову, этот запрос генерируется Oracle Workbench Oracle.

ответ

3

Вам необходимо включить столбцы в определении ограничения:

CONSTRAINT person_id 
    FOREIGN KEY() 
    REFERENCES resort.person() 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 

должно быть:

CONSTRAINT fk_person_id 
    FOREIGN KEY (person_id) 
    REFERENCES resort.person (id) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 
+0

Теперь он говорит: "# 1061 - Дубликат ключа имя 'person_id_UNIQUE'" – gzg

+1

Geez, просто посмотрите на свой SQL. Это потому, что у вас есть два UNIQUE определения с тем же именем: 'UNIQUE INDEX person_id_UNIQUE (cid ASC)' и 'UNIQUE INDEX person_id_UNIQUE (person_id ASC)'. Часть сразу после 'UNIQUE INDEX' - это имя индекса. –

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