外键不匹配 SQLite
Foreign key mismatch SQLite
我搜索了所有关于这个的文档,但我似乎无法理解问题出在哪里,也许有经验的人可以帮助我。
所以我正在创建一个名为 LOCALIZACAO 的 table:
CREATE TABLE LOCALIZACAO(
id INTEGER PRIMARY KEY AUTOINCREMENT,
rua TEXT NOT NULL,
codigoPostal TEXT NOT NULL,
UNIQUE (codigoPostal));
还有另一个 table 引用了 LOCALIZACAO,名为 SOCIOLOCALIZACAO:
CREATE TABLE SOCIOLOCALIZACAO(
idS INTEGER REFERENCES SOCIO(idS),
idL INTEGER NOT NULL REFERENCES LOCALIZACAO(idL),
CONSTRAINT pk_SOCIOLOCALIZACAO PRIMARY KEY (idS),
CONSTRAINT fk_SOCIOLOCALIZACAO FOREIGN KEY (idL) REFERENCES LOCALIZACAO(id) ON DELETE CASCADE ON UPDATE CASCADE);
虽然我在 LOCALIZACAO table 上插入元素,但在 SOCIOLOCALIZACAO table:
上插入元素
INSERT INTO SOCIOLOCALIZACAO VALUES (1,1);
我遇到错误
foreign key mismatch "SOCIOLOCALIZACAO" referencing "LOCALIZACAO"
我确定 SOCIO 和 LOCALIZACAO 中有元素 1
这里是SOCIO table:
CREATE TABLE SOCIO(
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
anoDeNascimento INTEGER NOT NULL,
numeroDeSocio INTEGER NOT NULL CHECK (numeroDeSocio > 0),
nif INTEGER NOT NULL CHECK (nif > 99999999 AND nif < 1000000000),
anoDeVinculacao INTEGER NOT NULL CHECK (anoDeNascimento < anoDeVinculacao),
UNIQUE (nome, nif),
UNIQUE (numeroDeSocio));
感谢任何帮助!
谢谢!
您的外键引用了 table LOCALIZACAO
中的字段 idS
和 idL
。没有这样的字段,那里只有一个 id
字段。
我猜你只是在插入记录时才看到这个,因为 SQLite 不是很迂腐。其他数据库不会让您创建这样的外键。
我搜索了所有关于这个的文档,但我似乎无法理解问题出在哪里,也许有经验的人可以帮助我。
所以我正在创建一个名为 LOCALIZACAO 的 table:
CREATE TABLE LOCALIZACAO(
id INTEGER PRIMARY KEY AUTOINCREMENT,
rua TEXT NOT NULL,
codigoPostal TEXT NOT NULL,
UNIQUE (codigoPostal));
还有另一个 table 引用了 LOCALIZACAO,名为 SOCIOLOCALIZACAO:
CREATE TABLE SOCIOLOCALIZACAO(
idS INTEGER REFERENCES SOCIO(idS),
idL INTEGER NOT NULL REFERENCES LOCALIZACAO(idL),
CONSTRAINT pk_SOCIOLOCALIZACAO PRIMARY KEY (idS),
CONSTRAINT fk_SOCIOLOCALIZACAO FOREIGN KEY (idL) REFERENCES LOCALIZACAO(id) ON DELETE CASCADE ON UPDATE CASCADE);
虽然我在 LOCALIZACAO table 上插入元素,但在 SOCIOLOCALIZACAO table:
上插入元素INSERT INTO SOCIOLOCALIZACAO VALUES (1,1);
我遇到错误
foreign key mismatch "SOCIOLOCALIZACAO" referencing "LOCALIZACAO"
我确定 SOCIO 和 LOCALIZACAO 中有元素 1
这里是SOCIO table:
CREATE TABLE SOCIO(
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
anoDeNascimento INTEGER NOT NULL,
numeroDeSocio INTEGER NOT NULL CHECK (numeroDeSocio > 0),
nif INTEGER NOT NULL CHECK (nif > 99999999 AND nif < 1000000000),
anoDeVinculacao INTEGER NOT NULL CHECK (anoDeNascimento < anoDeVinculacao),
UNIQUE (nome, nif),
UNIQUE (numeroDeSocio));
感谢任何帮助! 谢谢!
您的外键引用了 table LOCALIZACAO
中的字段 idS
和 idL
。没有这样的字段,那里只有一个 id
字段。
我猜你只是在插入记录时才看到这个,因为 SQLite 不是很迂腐。其他数据库不会让您创建这样的外键。