2015-12-14 64 views
-2

我試着這樣做:MySQL在UPDATE從其他數據庫

我有兩個表table_1table_2,我想在table_2每一個table_1.id = table_2.id

其實我有這個過程的時間來更新行值PHP,但我必須每5分鐘通過cronjob運行它,但現在我立即需要它。

任何想法如何我可以在MySQL中做到這一點?

+3

使用觸發器? MySQL調度程序? –

+0

在谷歌馬克提到的事情,並停止作爲noob嗎? -/ – psegovias

+0

:) – Mjh

回答

1

要達到你想要的,你必須使用觸發器。觸發器是在滿足條件時自動執行的查詢。創建觸發器時,您可以選擇何時觸發。這裏是所有的可能性:

  • 前/ /刪除插入
  • 後之前之後
  • 前/更新後

查詢是要執行該條件滿足。 在觸發器語句中,可以使用OLD和NEW作爲表中新元素或舊元素的引用。如文檔所述:

In an INSERT trigger, only NEW.col_name can be used; there is no old row. In a DELETE trigger, only OLD.col_name can be used; there is no new row. In an UPDATE trigger, you can use OLD.col_name to refer to the columns of a row before it is updated and NEW.col_name to refer to the columns of the row after it is updated.

您也可以使用BEGIN ... END。我沒有我的當前計算機上的MySQL,但我認爲正確的查詢語法應該是接近這個:

DELIMITER $$ 

CREATE TRIGGER table_2_insertTrigger AFTER INSERT ON table_2 
    FOR EACH ROW BEGIN 
    DECLARE numberOfRow INT; 
    SET numberOfRow = (select count(*) from table_1 where table_1.id = NEW.id); 
    IF numberOfRow > 0 THEN 
     UPDATE table_1 set name = NEW.name where id = NEW.id; 
    END IF; 
END$$ 

DELIMITER ; 

如果要修改就可以做到這一點的同桌:

IF numberOfRow > 0 THEN 
      SET NEW.name = "whatever you want it to equal"; 
     END IF; 
+0

我對PHP有類似的看法,但是我必須通過cronjob來運行,每次插入新記錄時我都會自動運行。 – psegovias

+0

我的不好,你是對的,我誤解了你的問題。您應該使用觸發器,具體取決於您何時決定,自動觸發執行查詢。 'CREATE TRIGGER table_2_insert INSERT後TABLE_2 FOR EACH ROW UPDATE TABLE_2集行= value,其中身份證件(選擇TABLE_1 ID)' 我不知道在這個完美的語法)的情況下,您可以檢查Mysql Manuel [鏈接](https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html) – Matriac

+3

Matriac它會幫助很多,如果你證明你的答案。 – bonCodigo

1

與Matriac例子我發現這個解決方案:

CREATE TRIGGER `TEST` 
BEFORE INSERT ON `table2` 
FOR EACH ROW BEGIN 
SET NEW.row = (SELECT row_from_table_1 FROM table_1 WHERE id = NEW.id); 
END 
相關問題