[英]Mysql Trigger not working. Add current date to where clause
我是MySQL触发器的新手。
我考虑了日期,将触发器复制行复制到另一个表。
CREATE 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 = '2013-07-11'
我的员工表start_date
格式为date
。 如何获取当前日期为start_date = '2013-07-12'
?
我在触发器中尝试了start_date = now()
,但未复制任何内容。
我的employee
表结构如下。
CREATE TABLE `employee` (
`id` int(11) DEFAULT NULL,
`first_name` varchar(30) DEFAULT NULL,
`last_name` varchar(15) DEFAULT NULL,
`start_date` date DEFAULT NULL,
`end_date` varchar(10) DEFAULT NULL,
`city` varchar(10) DEFAULT NULL,
`description` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
当向该表中插入记录触发器时,检查start_date
是今天/当前日期,然后将行复制到employee_log
表中。
CREATE TABLE `employee_log` (
`id` int(11) DEFAULT NULL,
`first_name` varchar(50) DEFAULT NULL,
`last_name` varchar(50) DEFAULT NULL,
`start_date` date DEFAULT NULL,
`end_date` date DEFAULT NULL,
`city` varchar(50) DEFAULT NULL,
`description` varchar(50) DEFAULT NULL,
`Lasinserted` time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
尝试这个:
DELIMITER $$
CREATE TRIGGER `employee_new` AFTER INSERT
ON `employee` FOR EACH ROW
BEGIN
IF (new.start_date >= currdate ())
THEN
INSERT INTO employee_log (first_name, last_name)
VALUES
(new.first_name, new.last_name) ;
END IF ;
END $$
DELIMITER ;
使用date_format函数将now()格式化为当前日期
CREATE 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 = DATE_FORMAT(now(),'%Y-%m-%d') /*DATE_FORMAT(now(),'%Y-%m-%d') represents current date as format %Y-%m-%d
如果您想将触发器保持为单陈述式(即不更改定界符并使用BEGIN...END
块),并且仍然可以执行此工作,则可以执行以下操作
CREATE TRIGGER `tg_employee_after_insert`
AFTER INSERT ON `employee`
FOR EACH ROW
INSERT INTO employee_log (id, first_name, last_name, end_date, city, description, Lasinserted)
SELECT NEW.id,
NEW.first_name,
NEW.last_name,
NEW.end_date,
NEW.city,
NEW.description,
NOW()
FROM dual
WHERE NEW.start_date = CURDATE();
这是SQLFiddle演示
您可以检查新添加的start_date
是否为curdate()
。 如果为'true'
则'insert'
到日志表中。
范例 :
delimiter //
CREATE TRIGGER `new` AFTER INSERT ON `employee`
FOR EACH ROW BEGIN
CASE WHEN NEW.start_date = CURRENT_DATE THEN
INSERT
INTO employee_log( first_name, last_name )
VALUES ( NEW.first_name, NEW.last_name );
END CASE;
END;
//
delimiter ;
但是,通过了解表结构及其名称,我假设您要记录employee表的最新添加记录。 为此,您必须包括记录中的所有列。
范例 :
CASE WHEN NEW.start_date = CURRENT_DATE THEN
INSERT
INTO employee_log( id, first_name, last_name,
start_date, end_date,
city, description, Lasinserted )
VALUES ( NEW.id, NEW.first_name, NEW.last_name,
NEW.start_date, NEW.end_date,
NEW.city, NEW.description, NEW.lasinserted );
END CASE;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.