MySQL — не удается добавить ограничение внешнего ключа — латиница / кириллица

Это мое последнее средство, так как я перепробовал все, что смог найти в Google и здесь, в Stack Overflow.

Я тщательно искал ответ, прежде чем задавать этот вопрос. Я обнаружил, что люди получают то же сообщение об ошибке из MySQL, но их решение не работал для меня, потому что я не делаю эту конкретную вещь (разные типы столбцов) неправильно.

У меня проблема с внешними ключами, где они являются того же типа (varchar(xx)где xx одинаковая длина в обоих случаях; NOT NULL), но все равно выдает ошибку, которая описывается командой PHPMyAdmin SHOW ENGINE INNODB STATUS как:

2015-03-24 16:04:21 66c Ошибка в ограничении внешнего ключа архивной таблицы / privilegija:
ИНОСТРАННЫЙ КЛЮЧ (korisnik_ime) ЛИТЕРАТУРА korisnik (ime),
ИНОСТРАННЫЙ КЛЮЧ (firma_naziv) ЛИТЕРАТУРА firma (назив)
):
Не удается найти индекс в ссылочной таблице, где
указанные столбцы отображаются как первые столбцы или типы столбцов
в таблице и ссылочной таблице не соответствуют ограничениям.

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

DROP DATABASE IF EXISTS arhiva;
CREATE DATABASE arhiva
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
USE arhiva;

CREATE TABLE `korisnik` (
ime VARCHAR(30) NOT NULL ,
lozinka CHAR(60) NOT NULL
);

CREATE TABLE `firma` (
naziv VARCHAR(50) NOT NULL
);

CREATE TABLE `privilegija` (
korisnik_ime VARCHAR(30) NOT NULL ,
firma_naziv VARCHAR(50) NOT NULL ,
pristap CHAR(1) NOT NULL ,
FOREIGN KEY (korisnik_ime) REFERENCES korisnik(ime) ,
FOREIGN KEY (firma_naziv) REFERENCES firma(naziv)
);

Можете ли вы направить меня в правильном направлении решения этой проблемы. Я думал, что использование символов кириллицы было проблемой, но оказывается, что проблема кроется где-то еще.

1

Решение

добавить PRIMARY KEY (), вот так:

CREATE TABLE `korisnik` (
ime VARCHAR(30) NOT NULL ,
lozinka CHAR(60) NOT NULL,
PRIMARY KEY(ime)
);

CREATE TABLE `firma` (
naziv VARCHAR(50) NOT NULL,
PRIMARY KEY(naziv)
);

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

0

Другие решения

Других решений пока нет …