这是我的最后一招,因为我已经尝试了一些我可以在谷歌和Stack Overflow上找到的东西。
在问这个问题之前,我已经彻底搜索了一个答案。我发现人们从MySQL那里得到了同样的错误信息,但是他们的解决方案不对我有用,因为我没有做那个特定的事情(不同的列类型)错误。
我遇到外键问题,是相同的类型(varchar(xx)
,其中xx在两种情况下都是相同的长度; NOT NULL),但仍然给我一个错误,由PHPMyAdmin的命令SHOW ENGINE INNODB STATUS
描述为:
2015-03-24 16:04:21 66c表arhiva / privilegija的外键约束出错:
外键(korisnik_ime)参考文献korisnik(ime),
外键(firma_naziv)参考文献firma(naziv)
):
在引用的表中找不到索引 引用的列显示为第一列或列类型 在表中,引用的表与约束不匹配。
这是我的数据库模式,对不起英文名称(顺便说一下,我第一次遇到这个问题时,列名是西里尔字符,但即使我用拉丁文转换它们 - 你在这里看到的 - 我的问题是不已解决):
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)
);
请您指导我解决这个问题的正确方向。我认为使用西里尔字符是问题,但事实证明问题出在其他地方。
答案 0 :(得分:0)
添加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)
);
现在你有一个索引,所以外键约束应该有效。