MySQL关系插入

时间:2014-01-16 15:01:07

标签: mysql

我有一个像这样的关系型MySQL数据库设置:

COMMAND              SOURCE            DESTINATION
id                   id                id
datetime             name              name
source_id            location_id       data_type
destination_id

LOCATION             
id
name

命令可能有很多源和目标,而源可能有很多位置。

我收到一个带有以下值的命令(命令ID自动递增):

datetime = 12345671234
source = "source_device_one"
destination = "destination_device_one"

我需要一种方法,当将命令值插入数据库时​​,程序会检查“source_device_one”是否是SOURCE表中已存在的名称,如果是,则获取它的ID,如果没有,则将其插入到table并检索命令insert的ID。目标设备也需要做同样的事情。

我知道我可以通过编程方式进行单独的查询(在python / php中首先检查每个设备是否存在于各自的表中并获取其ID /如果没有则插入它)但是这将需要相当多的查询/代码行 - 我正在尝试创建的系统需要尽可能快速有效,因为它正在从流中读取命令。

我非常有兴趣听到你的意见,这是最好的方法。

非常感谢。

1 个答案:

答案 0 :(得分:0)

为数字克里斯干杯 - 我已经看过那个页面,但你向我确认我应该再研究一下。大致是我的解决方案:

INSERT INTO source(name) VALUES ('box1') ON DUPLICATE KEY UPDATE id=last_insert_id(id);
SET @source = last_insert_id();
INSERT INTO destination(name) VALUES ('hole1') ON DUPLICATE KEY UPDATE id=last_insert_id(id);
SET @dest = last_insert_id();
INSERT INTO command(datetime,source_id,destination_id) VALUES(NOW(), @source, @dest)

到目前为止我的工作速度足够快了!