2013-07-11 2 views
1

Я пробовал следующий пример. Но он не вставляет. любая проблема в том, где статьяMySQL Триггер для автоматической вставки на основе даты

CREATE DEFINER = `root`@`localhost` TRIGGER `new` AFTER INSERT ON `employee` 
FOR EACH 
ROW INSERT INTO employee_log(first_name, last_name) 
SELECT first_name, last_name 
FROM employee 
WHERE start_date = now() 
+0

Триггеры выполняются, когда что-то происходит Вставка/удаление или заявления обновления, например, если вы хотите что-то происходят в зависимости от времени вы можете запланировать событие –

+0

да мы вставляя данные...! таблица daily_plan. на основе строки даты необходимо скопировать таблицу today_plan также – 9pixle

+0

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

ответ

1

Я не уверен, если это может быть сделано с триггерами. Но вы можете сделать скрипт, и выполнить команды MySQL

test.sh:

#!/bin/bash 
#delete everything from today_plan 
mysql -e "DELETE FROM today_plan" --user=user_name --password=your_password db_name 
#insert only todays plans to today_plan 
mysql -e "INSERT INTO today_plan (pjtno, pattern, itemno, belt, kiln, qty, lnusr, distant, remark, decww, plandate, nowdate, shipment) SELECT pjtno, pattern, itemno, belt, kiln, qty, lnusr, distant, remark, decww, plandate, nowdate, shipment FROM daily_plan WHERE plandate=NOW()" --user=user_name --password=your_password db_name 
exit 

затем добавить выполнение скрипта как хрон в /etc/crontab как:

0 6 * * * root php /path/to/script/./test.sh 

Что будет выполнять его каждое утро в 6:00

пс. Это лишь одна идея о том, как сделать это: D

редактировать: Или вы можете сделать mysql event

+1

Я бы даже запланировать событие в mysql (убедитесь, что event_scheduler = 1). Затем вся логика может быть помещена в это событие или даже назначить ему процедуру хранения, поэтому вам не придется постоянно изменять это событие. –

+0

Я добавила его, чтобы ответить после прочтения: D – mirkobrankovic

+0

: D, теперь это событие, много всего происходит, если только есть триггер для чего-то в ответном сообщении hehe –

1

«Триггер представляет собой именованный объект базы данных, который связан с таблицей, и активирует когда происходит определенное событие для таблицы "

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

Создание хранимой процедуры

CREATE PROCEDURE yourdatabase.sp_plandate_process() 

    BEGIN 
    // here you write the code to process the data 
    END 

Создать событие

CREATE EVENT mysql.name_of_event 
ON SCHEDULE 
    EVERY 24 HOUR STARTS '2013-07-10 06:00:00' 
COMMENT 'Write comment' 
DO 
CALL sp_plandate_process(); 

Убедитесь, что переменная event_scheduler = 1, если множество ее до 0, вы можете просто сделать

SET event_scheduler=1; 

И это запустит соединение для планировщика событий ,

Поскольку вы изменили этот вопрос я снова редактировать

Новый ответ:

Вероятно потому, что сейчас() теперь должно быть() не то же самое значение, как это было, когда он был вставлен. Триггер запускается один раз после того, как был вставлен сотрудник hsa . значение теперь (0 изменяется, вероятно, на miliseconds, но оно не будет таким же. Если вы не используете сортировку desc в своем предложении where, вы можете использовать значение new.id(). Вы действительно читали о триггерах в качестве рекомендаций? - Кей Нельсон 41 сек назад

Смежные вопросы