我試着這樣做:MySQL在UPDATE從其他數據庫
我有兩個表table_1
和table_2
,我想在table_2
每一個table_1.id = table_2.id
其實我有這個過程的時間來更新行值PHP,但我必須每5分鐘通過cronjob運行它,但現在我立即需要它。
任何想法如何我可以在MySQL中做到這一點?
我試着這樣做:MySQL在UPDATE從其他數據庫
我有兩個表table_1
和table_2
,我想在table_2
每一個table_1.id = table_2.id
其實我有這個過程的時間來更新行值PHP,但我必須每5分鐘通過cronjob運行它,但現在我立即需要它。
任何想法如何我可以在MySQL中做到這一點?
要達到你想要的,你必須使用觸發器。觸發器是在滿足條件時自動執行的查詢。創建觸發器時,您可以選擇何時觸發。這裏是所有的可能性:
查詢是要執行該條件滿足。 在觸發器語句中,可以使用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;
我對PHP有類似的看法,但是我必須通過cronjob來運行,每次插入新記錄時我都會自動運行。 – psegovias
我的不好,你是對的,我誤解了你的問題。您應該使用觸發器,具體取決於您何時決定,自動觸發執行查詢。 '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
Matriac它會幫助很多,如果你證明你的答案。 – bonCodigo
與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
使用觸發器? MySQL調度程序? –
在谷歌馬克提到的事情,並停止作爲noob嗎? -/ – psegovias
:) – Mjh