Ошибка в 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;

person user2862454    schedule 28.06.2015    source источник
comment
Мое сомнение приходит в заявлении внешнего ключа   -  person user2862454    schedule 28.06.2015
comment
Вы искали в Stackoverflow? Кажется, было несколько сообщений об ошибке 150.   -  person jcoppens    schedule 28.06.2015


Ответы (1)


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

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)
);
person Gordon Linoff    schedule 28.06.2015
comment
так как я могу проверить, есть ли значение в столбце другой таблицы, я могу добавить индекс? и если есть то как это сделать? - person user2862454; 28.06.2015
comment
@user2862454 . . . Используйте первичный ключ. Это правильный способ установить отношение внешнего ключа. - person Gordon Linoff; 28.06.2015