外键力量独特

时间:2014-03-28 11:24:40

标签: mysql sql foreign-keys unique

我在这个问题上读了很多主题。但我没有解决我的解决方案。

我创建了两个表:Polluant&阿勒特。在Alerte,我已经将外键定义为污染物的id。这是表的创建代码:

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,但它会在asll上运行sqllite。

我在Polluant表中添加一个条目,id = 1。 我在Alerte表中添加一个条目,idPol = 1。没问题。

我在Alerte表中添加第二个条目,idPol = 1。 MySQL愉快地告诉我:

1062 - 密钥'idPol'重复输入'1'

mhhhh。为什么?它必须在表格污染物中是唯一的,它是,但它不一定是在阿尔特,做它?好吧,我不明白问题,它对我来说很好。有人有想法吗? Thinqs

2 个答案:

答案 0 :(得分:0)

您引用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

答案 1 :(得分:0)

不要问我为什么,我仍然不明白,我擦除所有数据库并再次创建它我只是在创建表中添加一个约束它工作... thinqs @jmail你的时间。

CREATE TABLE IF NOT EXISTS Alerte(
idAlerte int(3) 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),
PRIMARY KEY(idAlerte),

CONSTRAINT fk_pol FOREIGN KEY (idPol) REFERENCES Polluant(idPol)

);