mysql - 在外键列上插入问题

标签 mysql sql database foreign-keys sql-insert

我目前正在测试某些内容,并在尝试在表中插入一些值时遇到问题。

我有以下 3 个表;设备,室外,室内。

**outdoor**             --->          **devices**             <----- **indoor**

net_id(pk)                    net_id(fk)               net_id(pk)

我想要建立一种关系,以便设备可以通过室内或室外的 net_id 来位于室外或室内。因此我做了以下事情:

ALTER TABLE devices
ADD CONSTRAINT o_relationship
FOREIGN KEY (net_id)
REFERENCES outdoor (net_id);

ALTER TABLE devices
ADD CONSTRAINT i_relationship
FOREIGN KEY (net_id)
REFERENCES indoor (net_id);

现在我的问题是,当我尝试在设备中插入值时,除非 net_id 值同时属于室内和室外表,否则我无法这样做。这意味着,假设“net_001”存在于室内和室外表中,它允许我将其插入设备中,但如果“net_001”存在于室内,“net_002”存在于室外,假设我想添加“net_001”或“net_002”在设备中它不允许我这样做。因此,我希望能够在设备表中进行插入,如上所述。

希望我能够清楚地解释这个问题。预先感谢您!

最佳答案

在表设备中使用两列,一列用于室内,一列用于室外,否则您无法区分哪一个是室内,哪一个是室外,因为它们可能具有与您描述的相同的 id。

ALTER TABLE devices
ADD CONSTRAINT o_relationship
FOREIGN KEY (net_indoor_id)
REFERENCES indoor (net_id);

ALTER TABLE devices
ADD CONSTRAINT o_relationship
FOREIGN KEY (net_outdoor_id)
REFERENCES outdoor (net_id);

关于mysql - 在外键列上插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23265241/

相关文章:

sql - 如何在没有联合条款的情况下进行优化?

c# - Entity Framework 代码优先和 Firebird - 外键名称问题

php - 如何使用下拉列表将两个表连接到表上?

Mysql 帮助更新具有相同值的行

java - 如何从Mysql表中删除一个匹配项?

PHPMyAdmin SQL 不允许我更改 MySQL 表并给出错误 #1064

Mysql - 在价格表中选择低于,等于或高于的计数

SQL规范化

sql - 如何防止查询中出现惰性后台打印?

PHP 准备语句 : binding variable parameters