Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопросы по тригерам / 4 сообщений из 4, страница 1 из 1
18.03.2015, 12:06:29
    #38908120
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по тригерам
имеем тригер:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DELIMITR |

CREATE TRIGGER `after_update_customer_deposit`
	AFTER UPDATE ON `customers_deposit`
	FOR EACH ROW 
        	      BEGIN 
	            UPDATE `sisense`.`customer_deposit` SET `amount` = NEW.amount WHERE `id` = NEW.id;
                    END|
DELIMITR;



работает норм, но:


1) Мне надо обновить во второй базе только те что были обновлены в первой. Но имеются подозрения что тригер будет пробегать по всей таблице если я прав но как исправить?

2) В таблице может быть более одного поля которое могут изменить. Что делать? Пихать всё в один запрос или модно делать нескольео запросов?

Попытался написать так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TRIGGER `after_update_customer_deposit`
	AFTER UPDATE ON `customers_deposit`
	FOR EACH ROW 
		BEGIN 
			if(OLD.amount != NEW.amount)
			{
			    UPDATE `sisense`.`customer_deposit` SET `amount` = NEW.amount WHERE `id` = NEW.id;
			}
			
			if(OLD.rateUSD != NEW.rateUSD)
			{
			    UPDATE `sisense`.`customer_deposit` SET `rateUSD` = NEW.rateUSD WHERE `id` = NEW.id;
			}
		END|
delimiter ;



Но сервер жалуется на ошибки в запросах! Что я делаю не так?
...
Рейтинг: 0 / 0
18.03.2015, 12:37:55
    #38908194
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по тригерам
AreostarНо имеются подозрения что тригер будет пробегать по всей таблицеПри наличии индекса на `sisense`.`customer_deposit`.`id` не будет. Если вы вообще об этом.
AreostarВ таблице может быть более одного поля которое могут изменить. Что делать? Пихать всё в один запрос или модно делать нескольео запросов?Забивайте в один. Более того, можете писать апдейт даже без проверок изменений. Обновятся всё равно только те поля, которые реально изменились. Типа такого
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TRIGGER `after_update_customer_deposit`
AFTER UPDATE ON `customers_deposit`
FOR EACH ROW 
BEGIN 
 UPDATE `sisense`.`customer_deposit`
 SET `amount` = NEW.amount, `rateUSD` = NEW.rateUSD
 WHERE `id` = NEW.id;
END


AreostarНо сервер жалуется на ошибки в запросах! Как жалуется? "вай нащяльниканамэ, какой плахой запрос!"?AreostarЧто я делаю не так?Не прив о дите сообщение об ошибке.
...
Рейтинг: 0 / 0
18.03.2015, 12:39:19
    #38908199
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по тригерам
Стоп. ЯНП. Вы пытаетесь в афтер апдейт обновить эту же запись в этой же таблице? А нахрена??
...
Рейтинг: 0 / 0
18.03.2015, 12:55:22
    #38908233
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопросы по тригерам
tanglirСтоп. ЯНП. Вы пытаетесь в афтер апдейт обновить эту же запись в этой же таблице? А нахрена??

название тоже но в другой базе.

tanglirЗабивайте в один. Более того, можете писать апдейт даже без проверок изменений. Обновятся всё равно только те поля, которые реально изменились. Типа такого

спасибо за ответ!!!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вопросы по тригерам / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]