2012-03-19 52 views
1

這是功課...
我試圖創建一個在未來有一個默認的日期值的表,發現一個很好的解決方案here。這個答案說如果在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 | 
+------------+---------------------+ 
+0

也許我應該弄清楚如何獲得有條件進入它... – Ken 2012-03-19 02:35:59

回答

0

你需要一個條件添加到觸發器。

例如:

create trigger setJoinDate 
    before insert on member 
    for each row 
    set NEW.join_date = IFNULL(NEW.join_date, CURDATE()); 
+0

你是絕對正確的,這是很多比我就把if..then事情更優雅一起。謝謝! – Ken 2012-03-19 02:51:35

+0

不客氣! – Timeout 2012-03-19 02:55:21