Mysql 默认日期(触发器)触发器插入日期
这是作业。Mysql 默认日期(触发器)触发器插入日期,mysql,date,triggers,Mysql,Date,Triggers,这是作业。 我正在尝试创建一个将来具有默认日期值的表,并找到了一个很好的解决方案。这个答案表示,如果INSERT语句中给出了日期,它将覆盖触发器。但是,当我尝试用一些旧数据(包括日期)填充表时,触发器会对日期进行重击。我觉得我错过了一些明显的东西 create table member ( member_id int not null primary key auto_increment, last_name varchar(25) not null, first_nam
我正在尝试创建一个将来具有默认日期值的表,并找到了一个很好的解决方案。这个答案表示,如果INSERT语句中给出了日期,它将覆盖触发器。但是,当我尝试用一些旧数据(包括日期)填充表时,触发器会对日期进行重击。我觉得我错过了一些明显的东西
create table member (
member_id int not null primary key auto_increment,
last_name varchar(25) not null,
first_name varchar(25),
address varchar(100),
city varchar(30),
phone varchar(15),
join_date datetime not null);
create trigger setJoinDate
before insert on member
for each row
set NEW.join_date = curdate();
因此,当我插入一些数据时:
insert into member
set
first_name = 'Midori',
last_name = 'Nagayama',
address = '68 Via Centrale',
city = 'Sao Paolo',
phone = '254-852-5764',
join_date = '1991-6-17';
日期被覆盖:
mysql> select first_name,join_date from member;
+------------+---------------------+
| first_name | join_date |
+------------+---------------------+
| Midori | 2012-03-18 00:00:00 |
+------------+---------------------+
您需要向触发器添加一个条件 例如:
create trigger setJoinDate
before insert on member
for each row
set NEW.join_date = IFNULL(NEW.join_date, CURDATE());
也许我应该弄清楚如何把一个条件放进去……你完全正确,这比我把if.。then放在一起要优雅得多。谢谢!