SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.04.2010 18:37:06

kiligin
Завсегдатай
Зарегистрирован: 28.11.2009
Сообщений: 48

Работа с триггерами

Добрый день, участники форума!

Помогите пожалуйста написать триггер в мускуле!
Цель данного триггера такова: есть таблица пользователей с полями логин и пароль.
Необходимо написать триггер, который при добавлении и редактировании записи будет хэшировать пароль.

примерно я себе это представляю таким образом (пример на sql server)

create trigger Ttrigger1 on User
after update, insert
as
begin
   If insert begin
      update user set password = md5(password)
      where id_user = (select top(1) id_user from inserted)
   end
   else begin
      update user set password = md5(select password from inserted)
      where password = (select password from deleted)
   end
end

конечно я не до конца уверен в правильности синтаксиса данного триггера, т.к. проверить его в данный момент не является возможным. но смысл я думаю понятен. если необходимы пояснения к данному запросу, то я всегда рад!

Неактивен

 

#2 09.04.2010 20:20:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Работа с триггерами

Что-то Вы совсем сложные конструкции пишете smile

CREATE TRIGGER bi_tablename BEFORE INSERT ON tablename FOR EACH ROW
SET NEW.password = MD5(NEW.password);;

CREATE TRIGGER bu_tablename BEFORE UPDATE ON tablename FOR EACH ROW
IF NEW.password != OLD.password THEN
  SET NEW.password = MD5(NEW.password);
END IF;;

Неактивен

 

#3 09.04.2010 23:23:46

kiligin
Завсегдатай
Зарегистрирован: 28.11.2009
Сообщений: 48

Re: Работа с триггерами

Спасибо большое!
Самое интересное то, что в мускуле почему-то нельзя написать триггер одновремено и для апдейта и для инсерта)
И вот еще! спасибо за правильную мысль сравнения таблиц new и old.

Неактивен

 

#4 15.04.2010 11:48:00

kiligin
Завсегдатай
Зарегистрирован: 28.11.2009
Сообщений: 48

Re: Работа с триггерами

появилась новая проблема с триггерами.
в phpmyadmin я пишу:

create trigger TCreateUser
before insert
on `user`
for each row
begin
  set new.password = md5(new.password);
  create user new.login@'%' identified by new.password;
  grant all privileges on 'office_supplies'.* to new.login identified by new.password;
end;;

что пишет мне пхп:

SQL-запрос:

CREATE trigger TCreateUserbefore INSERT ON `user`
FOR each
ROW
BEGIN
SET new.password = md5( new.password ) ;

Ответ MySQL: Документация
#1064 - 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 '' at line 6


Моя задача такова:
при создании пользователя в приложении нужно, чтобы срабатывал триггер на добавление пользователя с доступом к бд, с хэшированием пароля и присвоением полных привилегий к бд.

Помогите пожалуйста!!!

Отредактированно kiligin (15.04.2010 11:49:23)

Неактивен

 

#5 15.04.2010 17:47:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Работа с триггерами

Не уверен, что phpmyadmin умееет корректно жевать delimiterы. Воспользуйтесь
нормальным клиентом MySQL.

Неактивен

 

#6 15.04.2010 18:48:22

kiligin
Завсегдатай
Зарегистрирован: 28.11.2009
Сообщений: 48

Re: Работа с триггерами

т.е. ручками! )) спасибо! я знал, что возможности мускула больше, чем они доступны через пхп...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson