Saya mempunyai jadual yang memerlukan dua masa semasa yang berbeza. Pertama, saya mempunyai prosedur sisipan yang memasukkan nombor tindakan, msgSentFrom_F_ID, msgSentTo_M_ID dan sentDate. Kedua, kemas kini proses kemas kini respondDate. Masalah saya ialah apabila saya mengemas kini respondDate, sentDate dikemas kini pada masa yang sama seperti semasa saya mengemas kini respondDate. Apa yang saya buat salah? (Niat saya ialah saya mahu tarikh yang dihantar ialah masa semasa saya memasukkan, dan masa semasa yang lain apabila saya mengemas kini tarikh respons.)
CREATE TABLE IF NOT EXISTS actions ( actionnumber INT AUTO_INCREMENT PRIMARY KEY, msgSentFrom_F_ID INT, msgSentTo_M_ID INT, sentDate TIMESTAMP, respondDate TIMESTAMP NULL, FOREIGN KEY (msgSentFrom_F_ID) REFERENCES femaleUsers(femaleuserId) FOREIGN KEY (msgSentTo_M_ID) REFERENCES maleUsers(maleuserId) ); DELIMITER // create procedure (param_F_ID INT,param_M_ID INT,Sdate TIMESTAMP) BEGIN INSERT INTO actions (msgSentFrom_F_ID, msgSentTo_M_ID, sentDate) VALUES (param_F_ID,param_M_ID,Now()); END; // DELIMITER ; CALL insert_actions ('5','5',NOW()); DELIMITER // create procedure update_respondDate (param_ActionNum INT, param_respondDate TIMESTAMP) BEGIN UPDATE actions set respondDate = param_respondDate WHERE actionnumber = param_ActionNum; END; // DELIMITER ; CALL update_respondDate('6',NOW());
Bunyi seperti anda melumpuhkan pembolehubah sistem
explicit_defaults_for_timestamp
. Dokumentasi menerangkan keputusan ini: p>Oleh kerana lajur
sentDate
是表中的第一个TIMESTAMP
, setiap kali anda membuat sebarang perubahan pada baris, ia akan ditetapkan secara automatik kepada masa semasa.