Mysql

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

Наш партнер Genesis Hackspace
  1. yerke

    yerke Well-Known Member

    Регистрация:
    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 Гость

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

    yerke Well-Known Member

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

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

    etc Гость

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

    yerke Well-Known Member

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

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

    ///

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

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




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

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

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

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

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

    etc Гость

    а если в тригере указать DEFINER = CURRENT_USER
     
  7. yerke

    yerke Well-Known Member

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

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

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

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