mysql - update - syntax error or access violation 1067 invalid default value for created_at




將NOW()設置為datetime數據類型的默認值? (8)

EUREKA!

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

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

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

重要更新

這個答案很早就發布了。 那時候,它對我的(可能是最新的)MySQL安裝起了作用,我覺得分享它。 在您決定立即使用此解決方案之前,請閱讀下面的評論。

我在表用戶中有兩列,分別是由datetime數據類型組成的registerDate and lastVisitDate 。 我想要做以下事情。

  1. 將registerDate默認值設置為MySQL NOW()
  2. 將lastVisitDate默認值設置為0000-00-00 00:00:00而不是默認使用的null。

因為表已經存在並且有現有的記錄,所以我想使用修改表。 我試過使用下面的兩段代碼,但都不起作用。

ALTER TABLE users MODIFY registerDate datetime DEFAULT NOW()
ALTER TABLE users MODIFY registerDate datetime DEFAULT CURRENT_TIMESTAMP;

它給我錯誤: ERROR 1067 (42000): Invalid default value for 'registerDate'

我可以在MySQL中將默認的日期時間值設置為NOW()嗎?



在MySQL 5.6.5及更新版本上,您可以使用精確的日期時間並設置默認值。 雖然有一點細微之處,那就是將精度值傳遞給datetime和NOW()函數調用。

這個例子工作:

    ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW(6);

此示例不起作用:

    ALTER TABLE my_table MODIFY created datetime(6) NOT NULL DEFAULT NOW();

從MySQL 5.6.5開始,您可以使用具有動態默認值的DATETIME類型:

CREATE TABLE foo (
    creation_time      DATETIME DEFAULT   CURRENT_TIMESTAMP,
    modification_time  DATETIME ON UPDATE CURRENT_TIMESTAMP
)

或者甚至結合兩個規則:

modification_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

參考:
http://dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
http://optimize-this.blogspot.com/2012/04/datetime-default-now-finally-available.html

在5.6.5之前,您需要使用TIMESTAMP數據類型,該類型在記錄被修改時自動更新。 不幸的是,每個表只能存在一個自動更新的TIMESTAMP字段。

CREATE TABLE mytable (
  mydate TIMESTAMP
)

請參閱: http://dev.mysql.com/doc/refman/5.1/en/create-table.html : http://dev.mysql.com/doc/refman/5.1/en/create-table.html

如果您想阻止MySQL更新UPDATE上的時間戳值(因此它只在INSERT觸發),則可以將定義更改為:

CREATE TABLE mytable (
  mydate TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)

我的解決方案

ALTER TABLE `table_name` MODIFY COLUMN `column_name` TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP;

最好的辦法是做一個觸發器:

/************ 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();

這對我有用,使用MySQL:

ALTER TABLE `table_name` MODIFY `column_name` datetime NOT NULL DEFAULT NOW();

ALTER TABLE table_name
  CHANGE COLUMN date_column_name date_column_name DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

最後,這對我有用!





mysql-error-1067