2013-11-22 151 views
-1

我有我的存儲客戶提供一個非常簡單的結構的MySQL表:MySQL的觸發更新場時,其他領域的更新

CREATE TABLE IF NOT EXISTS `recipients` (
    `recipient_id` int(8) unsigned NOT NULL AUTO_INCREMENT, 
    `first_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `last_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `email` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `address` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `address2` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `city` varchar(85) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `postal` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `state` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `country` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `phone_1` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `phone_2` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL, 
    `birth_date` date NOT NULL, 
    `anniversary` date NOT NULL, 
    PRIMARY KEY (`recipient_id`), 
    KEY `email` (`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=1 ; 

什麼我要找的是使MySQL更新狀態字段設置爲0時國家領域變成了一些具體的文字。即如果國家更改爲英國,我希望州字段自動設置爲'N/A'。

我知道我可以繼續並運行更新聲明,但我不知道MySQL是否可以這樣做,所以我不必擔心它。

+1

所以,你知道你想要什麼,你知道如何做到這一點。有什麼問題? –

回答

3

可以使用觸發器,見下面的例子:

-- first you must change delimiter 
DELIMITER $$ 

-- create the new trigger, if you want to update it then before create you must do 
-- DROP TRIGGER IF EXISTS your_name_here 
CREATE TRIGGER your_name_here BEFORE UPDATE ON recipients FOR EACH ROW 
BEGIN 
    -- check if country now is UK 
    IF NEW.country = 'UK' THEN 
    -- if so, do your work 
    SET NEW.state = 'N/A'; 
    END IF; 

    -- you can put more code here as needed! 
END $$ 

-- then reset delimiter 
DELIMITER ; 

也看到文檔:http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

+0

感謝馬泰奧。應該運行每個更新或我必須手動運行? – sd1sd1

+0

它會自動爲每個更新運行。 –