Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка при выполнении тригера 
V
    Опции темы
FortMax
  Дата 12.11.2009, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 2.10.2006
Где: Россия, г. Бироби джан ЕАО

Репутация: нет
Всего: 5



Доброго времени суток !
В качестве среды использую dbForge Studio for MySQL. В БД есть табличка для регистрации пользователей, дата регистрации вставляется через триггер такого вида 
Код
CREATE 
    DEFINER = 'root'@'localhost'
TRIGGER dbMessBox.Ins_Registr_Date
    BEFORE INSERT
    ON dbMessBox.tUsers
    FOR EACH ROW
BEGIN
  UPDATE
    dbmessbox.tUsers
  SET
    dbmessbox.tUsers.Registr_Day = (SELECT NOW())
  WHERE
    dbmessbox.tUsers.ID_User = inserted.ID_User;
      
    END


при попытке добавить данные в среда происходит ошибка 
Код

Can't update table 'tusers' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


Может кто знает в чем проблема ???
з.ы. ещё у меня сомнения по поводу обьекта inserted, есть ли такой в My, я его взял из MS SQL ?

Это сообщение отредактировал(а) FortMax - 12.11.2009, 04:37


--------------------
user posted image
PM MAIL ICQ   Вверх
zav74
Дата 12.11.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 19.7.2006

Репутация: нет
Всего: нет



Вместо inserted надо NEW.
PM MAIL   Вверх
FortMax
  Дата 13.11.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 2.10.2006
Где: Россия, г. Бироби джан ЕАО

Репутация: нет
Всего: 5



пробовал, та же ошибка


--------------------
user posted image
PM MAIL ICQ   Вверх
zav74
Дата 13.11.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 19.7.2006

Репутация: нет
Всего: нет



Так ты же в триггере обновляешь ту же таблицу, к какой триггер привязан. Вроде ошибка в этом. 
Да и вообще у меня вроде не получилось сделать BEFORE INSERT, пришлось AFTER INSERT.
PM MAIL   Вверх
FortMax
  Дата 16.11.2009, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 2.10.2006
Где: Россия, г. Бироби джан ЕАО

Репутация: нет
Всего: 5



т.е. тригер пытается обновить не существующую запись !?


--------------------
user posted image
PM MAIL ICQ   Вверх
pp2amd6
Дата 16.11.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.1.2008
Где: Минск

Репутация: нет
Всего: нет



А почему бы просто не написать 
BEGIN
     SET dbmessbox.tUsers.Registr_Day = NOW();
END

???
PM MAIL ICQ   Вверх
zav74
Дата 16.11.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 19.7.2006

Репутация: нет
Всего: нет



Цитата

т.е. тригер пытается обновить не существующую запись !?


И это тоже, но в этом случае бы не было ошибки, просто бы не обновилась запись. Но если перести с английского текст ошибки-"не может обновить таблицу 'tusers' в триггере, потому что она уже используется." Триггер сработал на этой же таблице-наверно это критично.

PM MAIL   Вверх
FortMax
  Дата 17.11.2009, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 2.10.2006
Где: Россия, г. Бироби джан ЕАО

Репутация: нет
Всего: 5



pp2amd6,  а это будет для какой записи в таблице !?

а если я буду производить вставку из пхп-скрипта, такой ошибки не будет ???

Это сообщение отредактировал(а) FortMax - 17.11.2009, 01:16


--------------------
user posted image
PM MAIL ICQ   Вверх
sir_nuf_nuf
Дата 17.11.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 8
Всего: 31



Цитата(zav74 @  16.11.2009,  18:32 Найти цитируемый пост)
Триггер сработал на этой же таблице-наверно это критично

Это точно критично по крайней мере для MySQL.
Нельзя из триггера обновлять таблицу на которой он и висит.

Вам нужен такой триггер.
Код

CREATE 
    DEFINER = 'root'@'localhost'
TRIGGER dbMessBox.Ins_Registr_Date
    BEFORE INSERT
    ON dbMessBox.tUsers
    FOR EACH ROW
BEGIN
    NEW.Registr_Day = NOW();
END


В момент вызова NEW - указывает "новое значение строки". 


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
FortMax
Дата 18.11.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 2.10.2006
Где: Россия, г. Бироби джан ЕАО

Репутация: нет
Всего: 5



sir_nuf_nuf,  выдает ошибку
Код
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.Registr_Day =NOW();
END' at line 8


???


--------------------
user posted image
PM MAIL ICQ   Вверх
pp2amd6
Дата 18.11.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 17.1.2008
Где: Минск

Репутация: нет
Всего: нет



FortMax
Код

    set NEW.Registr_Day = NOW();


Это сообщение отредактировал(а) pp2amd6 - 18.11.2009, 10:10
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1291 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.