2012-11-01 22 views
1

如何創建觸發器,該觸發器是通過更改數據庫中的更改而激活的,該更改會更改不同數據庫中的表中的值?在數據庫中觸發應更改不同數據庫中表中的值的數據庫?

一個數據庫包含具有登錄信息(用戶名,密碼)的表。當用戶登錄時,另一個數據庫中的表中的值將被更新。

這怎麼可能實現?

[編輯]

對不起,是的,兩個不同的數據庫是相同的數據庫服務器上。

[更新]

我有mainDB.users表:

username | password | NumberLogins 
---------|----------|-------------- 
     |   | 

otherDB.history表:

username | points 
---------|--------- 
     | 

我們如何遞增相應points後,用戶登錄?

USE `mainDB`; 

DROP TRIGGER IF EXISTS `updateUserInfo`; 

DELIMITER || 

CREATE TRIGGER `updateUserInfo` 
    BEFORE UPDATE ON `users` 
    FOR EACH ROW 

    BEGIN 
     IF NEW.`NumberLogins`=5 THEN 

      UPDATE `otherDB`.`history` 
      SET `points` = `points` + 1, 
      WHERE 
       `username`=NEW.`username`; 

     END IF; 

    END || 

我不斷收到此錯誤。

#1442 - Can't update table 'history' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 
+1

什麼樣的「其他數據庫」?不同的服務器否則,只需運行查詢並通知您可以指定'database.tablename.columname'來訪問其他表和數據庫。 – Sven

回答

1

我假設兩個數據庫都在同一臺服務器上。

USE name_of_db_trigger_to_be_in; 
delimiter || 
create trigger....... 

    UPDATE other_db.other_table 
    SET other_guys = 'hohoho'; 


end|| 
+0

謝謝。我似乎還有另一個問題。我將使用從'main_db.users'獲取的值更新'other_db.other_table'。我被錯誤卡住了 - '#1442 - 無法在存儲的函數/觸發器中更新表'歷史記錄',因爲它已經被調用此存儲的函數/觸發器的語句使用。' – maan81

+0

如果觸發器是由操作觸發的在表A上執行。觸發器不能通過更新/刪除/插入來觸摸表A.你需要修改NEW。* OLD。*值。 U將需要閱讀更多關於SP /觸發器的信息,以瞭解它的工作原理 –