我有一个像这样的关系型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 /如果没有则插入它)但是这将需要相当多的查询/代码行 - 我正在尝试创建的系统需要尽可能快速有效,因为它正在从流中读取命令。
我非常有兴趣听到你的意见,这是最好的方法。
非常感谢。
答案 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)
到目前为止我的工作速度足够快了!