欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql datetime 默認值的設置實現(xiàn)

 更新時間:2025年08月11日 12:04:16   作者:alden_ygq  
在MySQL中,DATETIME類型用于存儲包含日期和時間部分的值,設置默認值的方式因 MySQL 版本而異,下面就來介紹一下,感興趣的可以了解一下

在 MySQL 中,DATETIME 類型用于存儲包含日期和時間部分的值。設置默認值的方式因 MySQL 版本而異,以下是詳細介紹和最佳實踐。

一、基本語法與默認行為

1. 不指定默認值

  • 如果未顯式設置 DEFAULT,且列定義為 NOT NULL,則插入時必須提供值。
  • 如果列允許 NULL,則默認值為 NULL。

2. 顯式設置默認值

CREATE TABLE table_name (
    column_name DATETIME DEFAULT default_value,
    ...
);

二、常用默認值設置方法

1. 固定默認值(特定日期時間)

CREATE TABLE logs (
    id INT PRIMARY KEY,
    event_time DATETIME DEFAULT '2023-01-01 00:00:00'
);

2. 當前時間戳(插入時自動記錄)

  • MySQL 5.7 及以下:

    CREATE TABLE logs (
        id INT PRIMARY KEY,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    
  • MySQL 8.0+:推薦使用 TIMESTAMP 類型配合 DEFAULT CURRENT_TIMESTAMP,因為 DATETIME 默認不支持自動更新時間戳:

    CREATE TABLE logs (
        id INT PRIMARY KEY,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
    

3. 自動更新時間戳(記錄修改時間)

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
  • 當行數據更新時,updated_at 會自動更新為當前時間。

三、MySQL 版本差異

1. MySQL 5.7

  • DATETIME 支持 DEFAULT CURRENT_TIMESTAMP。
  • 每個表最多允許一個 DATETIME 列使用 ON UPDATE CURRENT_TIMESTAMP

2. MySQL 8.0

  • 增強了對 DATETIME 默認值的支持。
  • 支持多個 DATETIME 列使用 ON UPDATE CURRENT_TIMESTAMP。
  • 推薦使用 TIMESTAMP 類型處理自動更新需求,因為 TIMESTAMP 會自動轉換時區(qū)(存儲 UTC,顯示會話時區(qū))。

四、特殊場景處理

1. 設置 NULL 為默認值

CREATE TABLE events (
    id INT PRIMARY KEY,
    start_time DATETIME NULL  -- 默認值為 NULL
);

2. 使用函數生成默認值(需 MySQL 8.0+)

CREATE TABLE appointments (
    id INT PRIMARY KEY,
    -- 默認值為當前時間加 1 小時
    scheduled_time DATETIME DEFAULT (NOW() + INTERVAL 1 HOUR)
);

3. 設置特定時區(qū)的默認值

CREATE TABLE logs (
    id INT PRIMARY KEY,
    -- 使用 UTC 時間作為默認值
    event_time DATETIME DEFAULT (CONVERT_TZ(NOW(), 'SYSTEM', 'UTC'))
);

五、最佳實踐

  • 優(yōu)先使用 TIMESTAMP 存儲時間戳

    • TIMESTAMP 自動處理時區(qū)轉換(存儲 UTC,顯示會話時區(qū))。
    • TIMESTAMP 范圍為 1970-01-01 00:00:01 到 2038-01-19 03:14:07。
  • 使用 DATETIME 存儲固定日期時間

    • 如生日、預約時間等不需要時區(qū)轉換的值。
    • DATETIME 范圍為 1000-01-01 00:00:00 到 9999-12-31 23:59:59。
  • 避免使用 CURRENT_TIMESTAMP() 函數

    • 直接使用 CURRENT_TIMESTAMP 或 NOW() 即可。
  • 明確列是否允許 NULL

    • 若不允許 NULL,必須設置默認值或確保插入時提供值。

六、常見錯誤與解決方案

1. 錯誤:DATETIME 列不允許默認值為 0000-00-00 00:00:00

  • 原因:MySQL 5.7+ 默認啟用 NO_ZERO_DATE 模式。
  • 解決方案:
    -- 修改表,允許 NULL
    ALTER TABLE table_name MODIFY column_name DATETIME NULL;
    
    -- 或設置合理的默認值
    ALTER TABLE table_name MODIFY column_name DATETIME DEFAULT '1970-01-01 00:00:00';
    

2. 錯誤:多個 DATETIME 列使用 ON UPDATE CURRENT_TIMESTAMP

  • 原因:MySQL 5.7 限制每個表只能有一個 DATETIME 列使用 ON UPDATE。
  • 解決方案:升級到 MySQL 8.0,或使用觸發(fā)器實現(xiàn)多列自動更新。

七、示例:完整表定義

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    last_login DATETIME DEFAULT NULL
);

通過合理設置 DATETIME 默認值,可以簡化應用層代碼,確保數據的完整性和一致性。根據業(yè)務需求選擇合適的默認值策略,并注意 MySQL 版本差異帶來的限制。

到此這篇關于mysql datetime 默認值的設置實現(xiàn)的文章就介紹到這了,更多相關mysql datetime 默認值內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL主從復制原理詳情

    MySQL主從復制原理詳情

    這篇文章主要介紹了MySQL主從復制原理詳情,MySQL?主從復制是指數據可以從一個MySQL數據庫服務器主節(jié)點復制到一個或多個從節(jié)點,文章圍繞主題展開詳細的內容介紹。感興趣的小伙伴可以參考一下
    2022-06-06
  • Mysql修改字段類型、長度及添加刪除列實例代碼

    Mysql修改字段類型、長度及添加刪除列實例代碼

    在MySQL中可以使用ALTER?TABLE語句來修改表結構,包括添加自增屬性,下面這篇文章主要給大家介紹了關于Mysql修改字段類型、長度及添加刪除列的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • 深入探討:MySQL數據庫MyISAM與InnoDB存儲引擎的比較

    深入探討:MySQL數據庫MyISAM與InnoDB存儲引擎的比較

    本篇文章是對MySQL數據庫MyISAM與InnoDB存儲引擎的比較進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 完美解決mysql客戶端授權后連接失敗的問題

    完美解決mysql客戶端授權后連接失敗的問題

    下面小編就為大家?guī)硪黄昝澜鉀Qmysql客戶端授權后連接失敗的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • MySQL 自動清理binlog日志的方法

    MySQL 自動清理binlog日志的方法

    這篇文章主要介紹了MySQL 自動清理binlog日志的方法,需要的朋友可以參考下
    2016-10-10
  • 一篇文章學會SQL中的遞歸用法(Mysql)

    一篇文章學會SQL中的遞歸用法(Mysql)

    這篇文章主要給大家介紹了關于如何一篇文章學會SQL中的遞歸用法,眾所周知目前的mysql版本中并不支持直接的遞歸查詢,但是通過遞歸到迭代轉化的思路,還是可以在一句SQL內實現(xiàn)樹的遞歸查詢的,需要的朋友可以參考下
    2023-10-10
  • 在mac上如何使用終端打開XAMPP自帶的MySQL

    在mac上如何使用終端打開XAMPP自帶的MySQL

    本文給大家介紹在mac上如何使用終端打開XAMPP自帶的MySQL,解決方法非常簡單,需要的朋友參考下吧
    2016-12-12
  • Mysql聚合函數的使用介紹

    Mysql聚合函數的使用介紹

    今天的章節(jié)我們將要來學習一下 “聚合函數” ;首先我們需要學習聚合函數對數據進行統(tǒng)計分析,比如說求最大值、最小值、平均值之類的場景。但是單純的使用聚合函數,只能做全表范圍的統(tǒng)計分析
    2022-10-10
  • Mysql數據庫事務的臟讀幻讀及不可重復讀詳解

    Mysql數據庫事務的臟讀幻讀及不可重復讀詳解

    這篇文章主要為大家介紹了Mysql數據庫事務的臟讀幻讀及不可重復讀詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • mysql 控制臺程序的提示符 prompt 字符串設置

    mysql 控制臺程序的提示符 prompt 字符串設置

    mysql 控制臺程序的提示符 prompt 字符串設置,學習mysql的朋友可以參考下。
    2011-08-08

最新評論