2013-12-21 4 views
0

У меня есть таблица с двумя столбцами с именем «Таблица 1»: (столбец 1 с именем «Col1» со значениями: A, B, C, D, E, F) (колонка 2 с названием «Col2» со значениями: 12,15,2,5,200,1).Увольнение триггера MySQL по существующей таблице при создании триггера

Я хотел бы получить все значения из столбца 2, чтобы изменить значение 1, если их значение меньше 100, так что столбец 2 в конечном итоге будет выглядеть так: (столбец 2 с именем «Col2» со значениями: 1,1,1,1,200,1).

Я попытался создать триггер:

delimiter // 

CREATE TRIGGER Table1upd BEFORE UPDATE ON Table1 
FOR EACH ROW 
BEGIN 
    IF NEW.Col2<100 THEN 
     SET NEW.Col2=1; 
    END IF; 
END;// 

delimiter ; 

При создании триггера в MySQL Workbench он говорит, что триггер был добавлен, но что 0 строк (ы) пострадавших.

Я предполагаю, что моя проблема связана с выбором ПЕРЕД ДОПОЛНЕНИЕМ, поскольку триггер работает, когда я обновляю значение в таблице, но я не знаю, как его изменить, чтобы триггер также первоначально выполнялся автоматически, когда Я его создаю.

Спасибо заранее за любую помощь, D

+1

0 затронутых строк - это то, что вы часто видите, когда выполняете DDL-запросы. Это не означает, что когда-либо существовала вероятность того, что любые строки могут быть затронуты. Это побочный эффект того, как MySQL обменивается данными, возвращая количество строк, даже в тех случаях, когда не задействованы никакие строки. –

ответ

0

Ответ прост: BEFORE UPDATE триггер срабатывает только на UPDATE, так что вам нужно второй триггер BEFORE INSERT для охвата обоих случаев использования: обновления и вставки:

delimiter // 

CREATE TRIGGER Table1insert BEFORE INSERT ON Table1 
FOR EACH ROW 
BEGIN 
    IF NEW.Col2<100 THEN 
     SET NEW.Col2=1; 
    END IF; 
END;// 

delimiter ; 
+0

извините, но это не сработало для меня. пожалуйста, уточните? как я понимаю, он будет работать над будущими записями, добавленными в таблицу, не так ли? У меня уже есть записи в этой таблице, и на них не влияет добавление предложенного вами триггера. Я хочу, чтобы триггер изменил существующие записи таблицы. Thanx. – theexplorer

+0

@theexplorer. Разъяснение: «TRIGGER» выполняется только при событии, то есть когда новая запись «INSERT» или существующая запись изменяется с помощью «UPDATE». Чтобы изменить существующие записи (независимо от любого события), вам необходимо выполнить запрос вручную, например: 'UPDATE Table1 SET Col2 = 1 WHERE Col2 <100' – Kaii

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