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

спасибо Matteo. который должен запускаться для каждого обновления, или я должен запустить это вручную? – sd1sd1

+0

Он автоматически запускается для каждого обновления. –

Смежные вопросы