我试图在MySQL中将日期时间字段的默认值设置为NOW()
,但MySQL错误表明它无效?
/* create the invoice table */
CREATE TABLE IF NOT EXISTS INVOICE
(
LINE_ID INT(9) NOT NULL AUTO_INCREMENT,
INVOICE_ID INT(9) NOT NULL,
QUANTITY INT(9) NOT NULL DEFAULT '1',
INVOICE_DATE DATETIME NOT NULL DEFAULT NOW(),
TO_DELIVER BOOLEAN NOT NULL DEFAULT 0,
CUSTOMER_ID INT(9) NOT NULL,
PRODUCT_ID INT(9) NOT NULL,
PRIMARY KEY (LINE_ID, INVOICE_ID)
);
为datetime字段设置默认值的正确方法是什么?
答案 0 :(得分:1)
如果您使用的是5.6.5版,则可以在日期时间列
上设置默认值你可以这样做
INVOICE_DATE DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
答案 1 :(得分:0)
BEFORE INSERT
触发器可用于为列分配值,包括将当前日期和时间分配给DATETIME列。
DELIMITER $$
CREATE TRIGGER invoice_bi
BEFORE INSERT ON invoice
FOR EACH ROW
BEGIN
IF NEW.invoice_date IS NULL THEN
NEW.invoice_date = NOW();
END IF;
END;
$$
DELIMITER ;
在MySQL 5.6.x之前,可以分配给DATETIME
列的唯一默认值是文字。只能为TIMESTAMP
列分配当前日期和时间的默认值。如果您将列更改为TIMESTAMP
,请注意"自动"初始化和更新行为。要对列进行初始化,并且每当更改行时都不更新它......
invoice_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP