2015-07-21 40 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);