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或为此操作创建存储过程。