Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 默认日期(触发器)触发器插入日期_Mysql_Date_Triggers - Fatal编程技术网

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放在一起要优雅得多。谢谢!