Mysql

Тема в разделе "SQL", создана пользователем yerke, 15 ноя 2010.

  1. yerke

    yerke Well-Known Member

    Репутация:
    0
    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    привет знатоки MySQL

    есть в таблице mySQL такой тригер
    Код (PHP):
    DELIMITER |
    CREATE TRIGGER `tbi_pd_edu_forms` BEFORE INSERT
    ON `PD_EDU_FORMS` FOR EACH ROW
    BEGIN
    SET NEW.IS_DELETED = 0;

    SET NEW.CREATED_BY_MYSQL_ACCOUNT = CURRENT_USER();
    SET NEW.CREATION_DATETIME = NOW();

    SET NEW.LAST_MODIFIED_BY_MYSQL_ACCOUNT = CURRENT_USER();
    SET NEW.LAST_MODIFIED_DATETIME = NOW();
    END; |
    DELIMITER;
    захожу в базу под root добавляю запись, потом смотрю на поле CREATED_BY_MYSQL_ACCOUNT, там значение "root@localhos" - все норма

    потом захожу в базу по акаунтом yerke, делаю то же самое, но поле CREATED_BY_MYSQL_ACCOUNT ново созданный записи все ровно содержить значение "root@localhost"


    так вопрос почему функция CURRENT_USER() всегда возвращает "root@hostname"
     
  2. etc

    etc Гость

    Репутация:
    0
    А если просто под акаунтом yerke сделать SELECT CURRENT_USER(); ?
     
  3. yerke

    yerke Well-Known Member

    Репутация:
    0
    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    ну так тож можно

    но хотелось просто автоматизировать процесс сохранения данных об изменениях
    значить никак?
     
  4. etc

    etc Гость

    Репутация:
    0
    имелось ввиду, если выполнить тот запрос, то что выдает? вне тригеров, просто так
     
  5. yerke

    yerke Well-Known Member

    Репутация:
    0
    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    вне тригеров выдает нормальное знаечние
    то есть yerke@localhost под yerke

    а тригере root@localhost под yerke

    ///

    просто хотелось дать поработать самой системе
    щоб она автоматом фиксировала время и автора записи

    а не все эти данные ИНСЕРТИРОВАТЬ в ручную ))




    Добавлено: ___________________________
    а я понял логику системы

    (1) yerke делает инсерт в базу

    (2) а система поднимет тригера под root-ом
    до того как данные yerke инсертится в базу

    (3) тригер перехватыват данные yerke и выполняет свои действия
    и делает оканчательный инсерт (в это время тригер уже запущен под рутом и тек юзер тоже рут)

    так ли это?
     
  6. etc

    etc Гость

    Репутация:
    0
    а если в тригере указать DEFINER = CURRENT_USER
     
  7. yerke

    yerke Well-Known Member

    Репутация:
    0
    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    все решил проблему
    вместо CURRENT_USER() надо использовать USER()
     
  8. vital

    vital Больной Компом Детектед

    Репутация:
    0
    Регистрация:
    29 янв 2006
    Сообщения:
    2.431
    Симпатии:
    40
    Смотрим в ман и видим
    Разницу сами, вы уже вроде как поняли.
     
Загрузка...

Поделиться этой страницей