2013-11-22 117 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

它会自动为每个更新运行。 –