2015-07-21 47 views
3

我有两个表:插入一个外键,失踪键,更新

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.IDAUTO_INCREMENT每当收到一个令牌(存在或不存在)。
如果令牌为新令牌,则首先更新tbl1,然后仅使用新令牌的标识更新tbl2

我在想INSERT ON EXIST UPDATE,但我不知道如何将它合并成一个命令。

总结:
我需要在每次迭代INSERT ON EXIST UPDATEtbl1INSERT所得IDtbl2在单个命令。那可能吗?

想法?

+1

你需要在不同的表,以保持这些?使用'ID | TOKEN | TOKEN_REF'有一张表会更清洁,并且你可以使用带有'ON DUPLICATE KEY UPDATE'子句的插入来增加ref计数器。 – fejese

+1

唉,还有其他的表使用了令牌引用ID以及 – Ted

+1

是触发器的一个选项吗?那么你可以在'tbl1'上做一个插入操作,忽略是否已经有一个入口,并在'tbl2'中用'token_ref = 0'在需要的情况下用触发器创建一个入口,然后始终运行更新。可能不是最有效的,但不会做你想问的问题:) – fejese

回答

0

根据Ondřej的建议,我准备了一个SQLFiddle,可能会发现它here

在我提出以下INSERT触发器后的架构:

CREATE TRIGGER tbl1_ai AFTER INSERT ON tbl1 
FOR EACH ROW 
    INSERT INTO tbl2(TOKEN_REF) 
    VALUES(new.ID);