Mysql 插入外键,在缺少外键时更新
我有两张桌子:Mysql 插入外键,在缺少外键时更新,mysql,sql,Mysql,Sql,我有两张桌子: tbl1: ============================ ID | TOKEN(indexed) ============================ 1 | 2176 2 | 2872 3 | 2881 4 | 1182 tbl2: ======================= ID
tbl1:
============================
ID | TOKEN(indexed)
============================
1 | 2176
2 | 2872
3 | 2881
4 | 1182
tbl2:
=======================
ID | TOKEN_REF
=======================
1 | 2
2 | 3
3 | 1
4 | 1
在每次迭代中,服务器将收到一个“令牌”,并将更新tbl1
,如果不存在令牌,在本例中,令牌“5241”
将需要插入tbl1
我需要更新tbl2
,其中tbl2.ID
是自动递增的,无论何时收到令牌(存在或不存在)。如果令牌是新的,则首先更新
tbl1
,然后才使用新令牌的id更新tbl2
我正在考虑这个问题,但我不知道如何将它组合成一个命令
总而言之:我需要在每次迭代中
tbl1
,并在单个命令中将结果ID
插入tbl2
。可能吗
想法?我根据翁德杰的建议准备了一份SQLFiddle,可以找到
在该模式中,我建议在插入触发器后执行以下操作:
CREATE TRIGGER tbl1_ai AFTER INSERT ON tbl1
FOR EACH ROW
INSERT INTO tbl2(TOKEN_REF)
VALUES(new.ID);
你需要把这些分开放在桌子上吗?如果有一个带有ID | TOKEN | TOKEN_REF
的表,那么会更干净,您可以使用一个带有ON DUPLICATE KEY UPDATE
子句的insert来增加REF计数器。唉,还有其他表也使用令牌引用ID。有选项吗?然后,您可以在tbl1
上插入一个条目,如果已经有条目,则忽略该条目,并在tbl2
中使用token\u ref=0
创建一个条目,如果需要,还可以使用触发器,然后始终运行更新。可能不是最有效的,但可以满足您的要求:)MySQL不能使用一个命令插入到两个表中,您应该使用所提到的触发器@fejese或为此操作创建存储过程。