Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Внешние ключи


Автор: 4итер 29.3.2013, 15:29
При попытки связать внешние ключи с первичными, выскакивает ошибка
Код

Can't create table '.\tablica\svyaz.frm' (errno: 150)


вот код:
Код

create table svyaz (
id1 varchar(10) not null,
id2 varchar(10) not null,
foreign key(id1) references postavki(id1),
foreign key(id2) references postav(id2)) type=InnoDB;


Первичные ключи в предыдущих таблицах id1, id2 обозначил. В чем может быть проблема?

Автор: lancelot555 29.3.2013, 15:32
Проверь типы и размеры полей id1 , id2 во всех таблицах
Они должны быть одинаковы

Автор: 4итер 29.3.2013, 15:35
lancelot555, вроде везде стоит тип varchar и тип таблицы одинаковый..

Автор: Akina 29.3.2013, 15:51
Цитата(4итер @  29.3.2013,  16:35 Найти цитируемый пост)
везде стоит тип varchar 

Укажи длину.

Автор: 4итер 29.3.2013, 15:53
Akina, varchar(10) стоит, все равно ошибка

Автор: lancelot555 29.3.2013, 15:57
Для ключей вообще лучше INT использовать, наверняка можно без varchar обойтись

Автор: Akina 29.3.2013, 16:25
Код

mysql> CREATE TABLE parent (id INT NOT NULL,
    -> txt varchar(10),
    -> primary key (id),
    -> unique index (txt)
    -> );
Query OK, 0 rows affected (0.16 sec)

mysql> CREATE TABLE child (id INT, parent_txt varchar(10),
    -> INDEX par_ind (parent_txt),
    -> FOREIGN KEY (parent_txt) REFERENCES parent(txt)
    -> );
Query OK, 0 rows affected (0.25 sec)


Добавлено через 7 минут и 44 секунды
О! А дай-ка я попробую и проявлю телепатические способности!

Цитата(4итер @  29.3.2013,  16:29 Найти цитируемый пост)
Первичные ключи в предыдущих таблицах id1, id2 обозначил.

означает что-то типа
Код

CREATE UNIQUE INDEX id1id2 ON tablename(id1, id2)
? если да - то источник ошибки очевиден.

Автор: 4итер 29.3.2013, 16:38
Akina, юмор ваш неуместен. Ошибка была в том, что использовал тип varchar вместо integer. Спасибо за помощь всем)

Автор: Akina 29.3.2013, 16:45
Цитата(4итер @  29.3.2013,  17:38 Найти цитируемый пост)
Ошибка была в том, что использовал тип varchar вместо integer.

Что за бред? я тебе прямо цитатой с консоли показываю внешние varchar(10) ключи. Прекрасно всё создаётся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)