mysql - 外键力独特

标签 mysql sql foreign-keys unique

我读了很多关于这个问题的主题。但我没有解决我的问题。

我创建了两个表:污染物和警报。在 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,但它将尽快在 sqllite 上运行。

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

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

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

嗯嗯。为什么 ?它在表 pollunant ofc 中必须是唯一的,确实如此,但它不必在 Alerte 中,不是吗?好吧,我不明白这个问题,它对我来说看起来很好。有人有主意吗? 想法

最佳答案

您引用了Polluant表,因此您的插入值必须是不重复的值

外键 (idPol) 引用污染物 (idPol)

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

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

将列设置为 auto_increment 并且在插入行时不插入值(让它自动填充)将是最好的解决方法。或者您可以看到表中的最后一个 ID,并将其加一作为您的值

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

相关文章:

php - 即使 mysql 表中有值,SQL 查询也不会返回值

mysql - SQL - 选择至少包含一个 NULL 值的列?

sql - hive 条件时的两种情况

sql - 如何仅对表的特定行进行分组

Django 外键多对一关系显示在模板上

php - CSV 到标准化数据库 MySQL

mysql - 独特的用户识别约束

python - SQL:从可能位于另一个表中的列中获取值

Django与模型之间的双向关系

Mysql创建索引而不是外键约束