Проблема создания внешнего ключа в MySQL

Я следил за этой статьей: http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html для создания внешнего ключа между двумя таблицами. Каждая попытка терпит неудачу. Есть ли что-то, чего мне не хватает?!

Это действительно расстраивает, и я никогда не ожидал, что столкнусь с этой проблемой!

Спасибо.


person Arash    schedule 08.06.2009    source источник
comment
... не могли бы вы показать нам, каковы именно ваши попытки?   -  person Paolo Bergantino    schedule 08.06.2009


Ответы (4)


Вы не показываете, что вы пробовали или в чем была ошибка, поэтому все ответы являются только догадками.

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

person Bill Karwin    schedule 08.06.2009
comment
Это порядок, в котором я бы с трудом снимал создание ключа. - person Christian; 08.06.2009
comment
+1. Я должен сказать, что мне всегда нравятся ваши ответы. Они основательны и очень хорошо осведомлены. - person Paolo Bergantino; 08.06.2009
comment
Я хотел бы подчеркнуть, что нужно следить за подписанными и неподписанными. Легко не заметить и поймал меня. - person Cory House; 16.09.2009

Что именно идет не так? Без подробностей мы не сможем вам помочь...

mysql> CREATE TABLE parent (id INT NOT NULL,
    ->                      PRIMARY KEY (id)
    -> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE child (id INT, parent_id INT,
    ->                     INDEX par_ind (parent_id),
    ->                     FOREIGN KEY (parent_id) REFERENCES parent(id)
    ->                       ON DELETE CASCADE
    -> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)

У меня работает нормально.

person Paolo Bergantino    schedule 08.06.2009

Вы должны помнить одну вещь: если ваша дочерняя таблица/столбец имеет значения, которых нет в родительской таблице/столбце, вы всегда будете получать ошибку.

person Jordan S. Jones    schedule 08.06.2009

Пример:

use trading_research;
drop table if exists stock_history;
create table stock_history
(
        company_id integer(4) NOT NULL,
        price_date date NOT NULL,
        primary key(company_id, price_date),
        opening_price decimal(10,2) NULL,
        closing_price decimal(10,2) NULL,
        high_price decimal(10,2) NULL,
        low_price decimal(10,2) NULL,
        adjusted_closing_price decimal(10,2) NULL,
        volume decimal(20, 2) NULL,
        constraint foreign key (company_id) references stock_company (company_id) on delete cascade on update cascade
);

Если вы подробно расскажете о том, что вы пытаетесь сделать, и/или об ошибках, которые вы получаете, я могу помочь больше.

person C. Ross    schedule 08.06.2009