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

mysql datetime 默認(rèn)值的設(shè)置實(shí)現(xiàn)

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

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

一、基本語(yǔ)法與默認(rèn)行為

1. 不指定默認(rèn)值

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

2. 顯式設(shè)置默認(rèn)值

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

二、常用默認(rèn)值設(shè)置方法

1. 固定默認(rèn)值(特定日期時(shí)間)

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

2. 當(dāng)前時(shí)間戳(插入時(shí)自動(dòng)記錄)

  • MySQL 5.7 及以下:

    CREATE TABLE logs (
        id INT PRIMARY KEY,
        created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    
  • MySQL 8.0+:推薦使用 TIMESTAMP 類型配合 DEFAULT CURRENT_TIMESTAMP,因?yàn)?nbsp;DATETIME 默認(rèn)不支持自動(dòng)更新時(shí)間戳:

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

3. 自動(dòng)更新時(shí)間戳(記錄修改時(shí)間)

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
  • 當(dāng)行數(shù)據(jù)更新時(shí),updated_at 會(huì)自動(dòng)更新為當(dāng)前時(shí)間。

三、MySQL 版本差異

1. MySQL 5.7

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

2. MySQL 8.0

  • 增強(qiáng)了對(duì) DATETIME 默認(rèn)值的支持。
  • 支持多個(gè) DATETIME 列使用 ON UPDATE CURRENT_TIMESTAMP。
  • 推薦使用 TIMESTAMP 類型處理自動(dòng)更新需求,因?yàn)?nbsp;TIMESTAMP 會(huì)自動(dòng)轉(zhuǎn)換時(shí)區(qū)(存儲(chǔ) UTC,顯示會(huì)話時(shí)區(qū))。

四、特殊場(chǎng)景處理

1. 設(shè)置 NULL 為默認(rèn)值

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

2. 使用函數(shù)生成默認(rèn)值(需 MySQL 8.0+)

CREATE TABLE appointments (
    id INT PRIMARY KEY,
    -- 默認(rèn)值為當(dāng)前時(shí)間加 1 小時(shí)
    scheduled_time DATETIME DEFAULT (NOW() + INTERVAL 1 HOUR)
);

3. 設(shè)置特定時(shí)區(qū)的默認(rèn)值

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

五、最佳實(shí)踐

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

    • TIMESTAMP 自動(dòng)處理時(shí)區(qū)轉(zhuǎn)換(存儲(chǔ) UTC,顯示會(huì)話時(shí)區(qū))。
    • TIMESTAMP 范圍為 1970-01-01 00:00:01 到 2038-01-19 03:14:07。
  • 使用 DATETIME 存儲(chǔ)固定日期時(shí)間

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

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

    • 若不允許 NULL,必須設(shè)置默認(rèn)值或確保插入時(shí)提供值。

六、常見(jiàn)錯(cuò)誤與解決方案

1. 錯(cuò)誤:DATETIME 列不允許默認(rèn)值為 0000-00-00 00:00:00

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

2. 錯(cuò)誤:多個(gè) DATETIME 列使用 ON UPDATE CURRENT_TIMESTAMP

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

七、示例:完整表定義

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
);

通過(guò)合理設(shè)置 DATETIME 默認(rèn)值,可以簡(jiǎn)化應(yīng)用層代碼,確保數(shù)據(jù)的完整性和一致性。根據(jù)業(yè)務(wù)需求選擇合適的默認(rèn)值策略,并注意 MySQL 版本差異帶來(lái)的限制。

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

相關(guān)文章

  • MySQL主從復(fù)制原理詳情

    MySQL主從復(fù)制原理詳情

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

    Mysql修改字段類型、長(zhǎng)度及添加刪除列實(shí)例代碼

    在MySQL中可以使用ALTER?TABLE語(yǔ)句來(lái)修改表結(jié)構(gòu),包括添加自增屬性,下面這篇文章主要給大家介紹了關(guān)于Mysql修改字段類型、長(zhǎng)度及添加刪除列的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • 深入探討:MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較

    深入探討:MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較

    本篇文章是對(duì)MySQL數(shù)據(jù)庫(kù)MyISAM與InnoDB存儲(chǔ)引擎的比較進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 完美解決mysql客戶端授權(quán)后連接失敗的問(wèn)題

    完美解決mysql客戶端授權(quán)后連接失敗的問(wèn)題

    下面小編就為大家?guī)?lái)一篇完美解決mysql客戶端授權(quán)后連接失敗的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • MySQL 自動(dòng)清理binlog日志的方法

    MySQL 自動(dòng)清理binlog日志的方法

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

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

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

    在mac上如何使用終端打開(kāi)XAMPP自帶的MySQL

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

    Mysql聚合函數(shù)的使用介紹

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

    Mysql數(shù)據(jù)庫(kù)事務(wù)的臟讀幻讀及不可重復(fù)讀詳解

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

    mysql 控制臺(tái)程序的提示符 prompt 字符串設(shè)置

    mysql 控制臺(tái)程序的提示符 prompt 字符串設(shè)置,學(xué)習(xí)mysql的朋友可以參考下。
    2011-08-08

最新評(píng)論