ฉันไม่สามารถตั้งCurrent_timestamp
เป็นค่าเริ่มต้นได้ ฉันรุ่นMysql
5.5.47
ข้อความค้นหาคือ
ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
mysql V5.6.56
ในขณะที่มันทำงานได้ดีบนฐานข้อมูลท้องถิ่นของฉันด้วย
ฉันไม่สามารถตั้งCurrent_timestamp
เป็นค่าเริ่มต้นได้ ฉันรุ่นMysql
5.5.47
ข้อความค้นหาคือ
ALTER TABLE `downloads` ADD `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;
mysql V5.6.56
ในขณะที่มันทำงานได้ดีบนฐานข้อมูลท้องถิ่นของฉันด้วย
คำตอบ:
จากคู่มือMySQL 5.5 :
คุณไม่สามารถตั้งค่าเริ่มต้นสำหรับคอลัมน์วันที่ให้เป็นค่าของฟังก์ชันเช่น NOW () หรือ CURRENT_DATE ข้อยกเว้นคือคุณสามารถระบุ CURRENT_TIMESTAMP เป็นค่าเริ่มต้นสำหรับคอลัมน์ TIMESTAMP
ดังนั้นสิ่งที่คุณต้องการบรรลุจะทำงานใน MySQL 5.5 หากคุณเพิ่มTIMESTAMP
คอลัมน์แทนDATE
คอลัมน์
การเปลี่ยนแปลงใน 5.6.x ที่อนุญาตการทำงานมีการจัดทำเป็นเอกสารไว้ที่นี่และฉันจะอ้างอิงข้อสรุปที่เกี่ยวข้องเพื่อความครบถ้วน:
ในฐานะของ MySQL 5.6.5 คอลัมน์ TIMESTAMP และ DATETIME สามารถเริ่มต้นได้โดยอัตโนมัติและอัปเดตเป็นวันที่และเวลาปัจจุบัน (นั่นคือเวลาประทับปัจจุบัน) ก่อน 5.6.5 นี่เป็นความจริงเฉพาะกับ TIMESTAMP และอย่างน้อยหนึ่งคอลัมน์ TIMESTAMP ต่อตาราง
ตรวจสอบคำตอบนี้
ตัวเลือกของคุณคือ:
เปลี่ยนประเภทคอลัมน์เป็น TIMESTAMP เช่นเดียวกับใน:
ALTER TABLE `downloads` ADD `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;
สร้างทริกเกอร์ที่อัปเดตคอลัมน์โดยอัตโนมัติ:
ALTER TABLE `downloads` ADD `date` DATETIME NULL; -- date must allow
-- NULLs or default
-- to a special value
DROP TRIGGER IF EXISTS downloads_BI;
DELIMITER //
CREATE TRIGGER downloads_BI
BEFORE INSERT ON downloads FOR EACH ROW
BEGIN
IF (NEW.date IS NULL) THEN -- change the isnull check for the default used
SET NEW.date = now();
END IF;
END//
DELIMITER ;
คุณอาจต้องการสร้างค่าอัปเดตเช่นกันหากต้องอัปเดตโดยอัตโนมัติในการอัปเดตหรือต้องการป้องกันค่า Null
mysql> INSERT INTO downloads (i) VALUES (1); -- I do not set date
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM downloads;
+------+---------------------+
| i | date |
+------+---------------------+
| 1 | 2016-03-22 09:27:52 |
+------+---------------------+
1 row in set (0.00 sec)