2015-06-28 2 views
0

У меня есть сомнения, что я делаю неправильно со следующим утверждением таблицы:Ошибка в MySQL на создание заявления

MySQL возвращает ошибку 150

DROP table usuario; 
DROP table MiTabla; 

CREATE TABLE usuario(
id smallint unsigned auto_increment primary key, 
name varchar(20) not null 
)ENGINE=InnoDB; 

Insert into usuario (NAME) VALUES ('Antonio'),('Jose'),('Manuel'); 


CREATE TABLE MiTabla(
id smallint unsigned auto_increment primary key, 
name varchar(20) not null, 
foreign key (name) REFERENCES usuario (name) 
) ENGINE = InnoDB; 
+0

Моего Сомнение приходит внешний ключ заявления – user2862454

+0

Вы делаете поиск на Stackoverflow? Кажется, что есть несколько сообщений об ошибке 150. – jcoppens

ответ

0

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

CREATE TABLE usuario (
    id smallint unsigned auto_increment primary key, 
    name varchar(20) not null unique 
); 

Однако правильно метод заключается в использовании первичных ключей для отношений:

CREATE TABLE MiTabla(
    id smallint unsigned auto_increment primary key, 
    usuario_id smalling unsigned not null, 
    foreign key (usuario_id) REFERENCES usuario(id) 
); 
+0

, так как я могу проверить, есть ли vlue в столбце другой таблицы, я могу добавить индекс? и как это сделать? – user2862454

+1

@ пользователь2862454. , , Используйте первичный ключ. Это правильный способ настройки отношения внешнего ключа. –

+0

Спасибо, все ясно сейчас – user2862454