Это мое последнее средство, так как я перепробовал все, что смог найти в 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)
);
Можете ли вы направить меня в правильном направлении решения этой проблемы. Я думал, что использование символов кириллицы было проблемой, но оказывается, что проблема кроется где-то еще.
добавить 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)
);
Теперь у вас есть индекс, поэтому ограничение внешнего ключа должно работать.
Других решений пока нет …