我阅读了很多有关此问题的主题。但是我没有解决我的解决方案。

我创建两个表:Polluant&Alerte。在Alerte中,我已定义外键为污染对象的ID。这是table的创建代码:

CREATE TABLE IF NOT EXISTS Polluant (
idPol int(3) PRIMARY KEY AUTOINCREMENT,
nom varchar(10) UNIQUE NOT NULL,
unite varchar(10) NOT NULL
);

CREATE TABLE IF NOT EXISTS Alerte(
idAlerte int(3) PRIMARY KEY AUTO_INCREMENT,
unite varchar(10) NOT NULL,
Max1 int(10) NOT NULL,
Max2 int(10) NOT NULL,
Max3 int(10) NOT NULL,
type boolean NOT NULL,
idPol int(3),
FOREIGN KEY (idPol) REFERENCES Polluant(idPol)
);


这是条目的:

insert into polluant(nom,unite) values ("testPol","g/m3");
insert into alerte values (1,"test",1,2,3,true,1);
insert into alerte values (2,"autretest",2,4,40,false,1);   !! this one isn't OK


当前尝试在mysql上,但它将在sqllite asap上运行。

我在“污染”表中添加一个条目,其ID为1。
我在Alerte表中添加一个条目,其中idPol = 1。没问题。

我在Alerte表中添加了第二个条目,其中idPol = 1。 MySQL高兴地告诉我:

1062-键“ idPol”的条目“ 1”重复

嗯为什么呢它在表污染源ofc中必须是唯一的,并且确实如此,但是不必在Alerte中,是吗?好吧,我不明白这个问题,对我来说看起来不错。有人有主意吗?
Thinqs

最佳答案

您引用的Polluant表,因此您的插入值一定不能重复

FOREIGN KEY (idPol) REFERENCES Polluant(idPol)

您的列很有可能被设置为“唯一”,并且您试图输入表中已存在ID的行。

您可能试图插入ID(或其他字段)为1的记录,而表中已经存在这样的记录。对于每个记录,作为主键的字段必须具有唯一的值。

Setting the column to auto_increment and not inserting a value when inserting the row (letting it auto populate) would be the best fix. Or you could see the last ID in your table though, and increment it by one for your value

关于mysql - 独特的外来力量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22711516/

10-09 20:20