update - mysql workbench default datetime




你如何設置MySQL日期時間列的默認值? (16)

MySQL( 版本5.6.5之前 )不允許將函數用於默認的DateTime值。 由於其奇怪的行為,TIMESTAMP不適用,不建議用作輸入數據。 (請參閱MySQL數據類型默認值 。)

也就是說,你可以通過創建一個觸發器來實現這一點。

我有一個類型為DateTime的DateCreated字段的表。 我在該表上創建了一個觸發器“Before Insert”和“ SET NEW.DateCreated=NOW() ”,它的工作效果很好。

我希望這有助於某人。

你如何設置MySQL日期時間列的默認值?

在SQL Server中它是getdate() 。 什麼是MySQL的等價物? 如果這是一個因素,我使用MySQL 5.x。



你可以使用觸發器來做這種類型的東西。

CREATE TABLE `MyTable` (
`MyTable_ID`  int UNSIGNED NOT NULL AUTO_INCREMENT ,
`MyData`  varchar(10) NOT NULL ,
`CreationDate`  datetime NULL ,
`UpdateDate`  datetime NULL ,
PRIMARY KEY (`MyTable_ID`)
)
;

CREATE TRIGGER `MyTable_INSERT` BEFORE INSERT ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the creation date
    SET new.CreationDate = now();

        -- Set the udpate date
    Set new.UpdateDate = now();
END;

CREATE TRIGGER `MyTable_UPDATE` BEFORE UPDATE ON `MyTable`
FOR EACH ROW BEGIN
        -- Set the udpate date
    Set new.UpdateDate = now();
END;

使用下面的代碼

DELIMITER $$

    CREATE TRIGGER bu_table1_each BEFORE UPDATE ON table1 FOR EACH ROW
    BEGIN
      SET new.datefield = NOW();
    END $$

    DELIMITER ;


如果你已經創建了表格,那麼你可以使用

將默認值更改為當前日期時間

ALTER TABLE <TABLE_NAME> 
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

要將默認值更改為'2015-05-11 13:01:01'

ALTER TABLE <TABLE_NAME> 
CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> DATETIME NOT NULL DEFAULT '2015-05-11 13:01:01';

如果您試圖將默認值設置為NOW(),我不認為MySQL支持該值。 在MySQL中,除了TIMESTAMP數據類型列之外,您不能將函數或表達式用作任何類型列的默認值,您可以將CURRENT_TIMESTAMP指定為默認值。


對我來說,觸發器方法運行得最好,但是我發現了這種方法的障礙。 考慮插入時將日期字段設置為當前時間的基本觸發器:

CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
    FOR EACH ROW SET NEW.dateAdded = NOW();

這通常很棒,但是你可以說你想通過INSERT語句手動設置這個域,如下所示:

INSERT INTO tblMyTable(name, dateAdded) VALUES('Alice', '2010-01-03 04:30:43');

會發生什麼是觸發器會立即覆蓋您為該字段提供的值,因此設置非當前時間的唯一方法是跟進UPDATE語句 - yuck! 要在提供值時覆蓋此行為,請嘗試使用IFNULL運算符稍微修改此觸發器:

CREATE TRIGGER myTable_OnInsert BEFORE INSERT ON `tblMyTable`
    FOR EACH ROW SET NEW.dateAdded = IFNULL(NEW.dateAdded, NOW());

這給了兩全其美:您可以為您的日期列提供一個值,然後它將採用,否則它將默認為當前時間。 它仍然是貧民區,相對於表格定義中的DEFAULT GETDATE()乾淨,但我們正在接近!


對於所有那些試圖在MySQL中設置默認DATETIME值的人來說,我完全知道你的感受/感受。 所以這裡是:

ALTER TABLE  `table_name` CHANGE `column_name` DATETIME NOT NULL DEFAULT 0

仔細觀察我沒有0周圍添加單引號/雙引號

在解決這個問題之後,我正在跳躍:D


您可以使用now()設置日期時間列的值,但請記住,您不能將其用作默認值。


我正在運行MySql Server 5.7.11和這句話:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '0000-00-00 00:00:00'

工作。 但以下幾點:

ALTER TABLE table_name CHANGE date_column datetime NOT NULL DEFAULT '1000-01-01 00:00:00'

只是工作

作為旁注 ,它在mysql文檔中提到:

DATE類型用於包含日期部分但不包含時間部分的值。 MySQL以'YYYY-MM-DD'格式檢索並顯示DATE值。 支持的範圍是'1000-01-01'到'9999-12-31'。

即使他們也說:

無效的DATE,DATETIME或TIMESTAMP值將轉換為相應類型('0000-00-00'或'0000-00-00 00:00:00')的“零”值。


我能夠解決這個問題,在我的表上有兩個日期時間字段的alter語句。

ALTER TABLE `test_table`
  CHANGE COLUMN `created_dt` `created_dt` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
  CHANGE COLUMN `updated_dt` `updated_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

這可以像你期望now()函數一樣工作。 插入空值或忽略created_dt和updated_dt字段會在兩個字段中產生完美的時間戳值。 該行的任何更新都會更改updated_dt。 如果通過MySQL查詢瀏覽器插入記錄,則需要多一個步驟,以新的時間戳處理created_dt的觸發器。

CREATE TRIGGER trig_test_table_insert BEFORE INSERT ON `test_table`
    FOR EACH ROW SET NEW.created_dt = NOW();

觸發器可以是任何你想要的,我只是喜歡命名約定[trig] _ [my_table_name] _ [insert]


這是我的觸發器例子:

/************ ROLE ************/
drop table if exists `role`;
create table `role` (
    `id_role` bigint(20) unsigned not null auto_increment,
    `date_created` datetime,
    `date_deleted` datetime,
    `name` varchar(35) not null,
    `description` text,
    primary key (`id_role`)
) comment='';

drop trigger if exists `role_date_created`;
create trigger `role_date_created` before insert
    on `role`
    for each row 
    set new.`date_created` = now();



雖然您無法在默認定義中使用DATETIME進行此操作,但您可以簡單地在您的插入語句中加入select語句,如下所示:

INSERT INTO Yourtable (Field1, YourDateField) VALUES('val1', (select now()))

請注意桌子周圍缺乏引號。

對於MySQL 5.5


CREATE TABLE `testtable` (
    `id` INT(10) NULL DEFAULT NULL,
    `colname` DATETIME NULL DEFAULT '1999-12-12 12:12:12'
)

在上面的查詢中創建'testtable',我使用'1999-12-12 12:12:12'作為DATETIME列colname默認值





datetime