1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Mysql

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

  1. yerke

    yerke Well-Known Member

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

    есть в таблице mySQL такой тригер
    PHP:
    DELIMITER |
    CREATE TRIGGER `tbi_pd_edu_formsBEFORE 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.432
    Симпатии:
    40
    Смотрим в ман и видим
    Разницу сами, вы уже вроде как поняли.
     
Загрузка...

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