本文介紹了MySQL 5.7參照時間戳生成日期列的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我的表中有一個created_at
列,希望添加一個類型為DATE
的created_at_day
列。
created_at_day
列應使用當前日期進行初始化。
我嘗試的方法是使用生成的列,因為沒有DEFAULT CURRENT DATE
或類似的列。
問題是,我在插入新記錄時出錯:
Error executing INSERT statement. Data truncation: Incorrect date value: '0000-00-00' for column 'created_at_day' at row 1 - Connection: Localhost: 48ms
我發現了兩種可能的解決方案,但都有缺點。
一是將TIMESTAMP
改為DATETIME
。由于某種原因,具有DEFAULT CURRENT_TIMESTAMP
的DATETIME
列有效,但我不希望將我的每一列都更改為DATETIME
。
另一個有效的方法是在SQL模式下禁用NO_ZERO_DATE
。由于某些原因,當我禁用它時,Date列甚至被初始化為正確的值,而不是0000-00-00
。但這感覺像是一種變通辦法,而不是解決方案,可能會導致未來的問題。
是否有其他簡單的方法可以創建使用當前日期初始化的DATE
列?
以下是生成錯誤的示例代碼:
create table test(
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_at_day DATE AS (DATE(created_at))
);
insert into test values();
推薦答案
在MySQL8.0中,您只需:
create table test(
created_at_day date as (current_date)
);
在MySQL5.7中,我認為這不能僅通過表定義來完成。您需要觸發器:
create table test(
created_at_day date
);
delimiter //
create trigger trg_test_created_at_day
before insert on test
for each row
begin
if (new.created_at_day is null) then
set new.created_at_day = current_date;
end if;
end//
delimiter ;
這篇關于MySQL 5.7參照時間戳生成日期列的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,