如何更新mysql数据库中datetime类型的字段

--比如datetime字段为:sj

update表名setsj=now()where条件;//now()是当前本地年月日时分秒

update表名setsj='2014-10-1012:00:00'where条件;

mysql 建表时设置默认当前时间

MySQL 里面.

默认值, 不允许使用 函数

下面是 例子

mysql> CREATE TABLE test_wang (

->IDINT,

->date1 VARCHAR(20),

->date2 VARCHAR(20)

Query OK, 0 rows affected (0.01 sec)

-- 对列插入 随机数. 确认 数据是可以存储的.

mysql> insert into test_wang values (1, rand(), rand());

Query OK, 1 row affected (0.00 sec)

mysql> select * from test_wang;

+------+-------------------+-------------------+

| ID| date1| date2|

+------+-------------------+-------------------+

|1 | 0.770875269333716 | 0.351427750989262 |

+------+-------------------+-------------------+

1 row in set (0.00 sec)

-- 这里尝试 设置 列 默认值 为 随机数, 结果失败了.

mysql> ALTER TABLE test_wang

->MODIFY COLUMN date1

->VARCHAR(20)

->DEFAULT RAND() ;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your

MySQL server version for the right syntax to use near 'RAND()' at line 4

-- 设置默认值 为 固定值, 是成功的.

mysql> ALTER TABLE test_wang

->MODIFY COLUMN date1

->VARCHAR(20)

->DEFAULT '123' ;

Query OK, 0 rows affected (0.02 sec)

Records: 0 Duplicates: 0 Warnings: 0

DROP TABLE test_wang;

-- 如果是 日期的话, 尝试使用 TIMESTAMP 数据类型

-- 来实现这个功能.

mysql> CREATE TABLE test_wang (

->id INT UNSIGNED AUTO_INCREMENT,

->date1 TIMESTAMP,

->date2 TIMESTAMP,

->PRIMARY KEY(id)

Query OK, 0 rows affected (0.02 sec)

mysql> insert into test_wang(date1) VALUES (null);

Query OK, 1 row affected (0.00 sec)

mysql> select * from test_wang;

+----+---------------------+---------------------+

| id | date1| date2|

+----+---------------------+---------------------+

| 1 | 2011-10-12 11:30:26 | 0000-00-00 00:00:00 |

+----+---------------------+---------------------+

1 row in set (0.00 sec)默认为当前时间可以,不过只有timestamp类型可以alter table tablename modify field timestamp not null default current_timestamp;

mysql中如何设置默认时间为当前时间?

MySQL 中,默认值无法使用函数

也就是你无法 设置某一列,默认值是 NOW () 这样的处理

假如需要 某列的默认值为 当前数据库时间,那么可以使用 TIMESTAMP 数据类型。插入的时候,忽略该列 即可。

dt TIMESTAMP

dt TIMESTAMP default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

create table testB (

idint PRIMARY KEY,

val varchar(10),

dt TIMESTAMP

INSERT INTO testB(id, val) VALUES(1, 'A');

INSERT INTO testB(id, val) VALUES(2, 'B');

SELECT

testB;

+----+------+---------------------+

| id | val | dt|

+----+------+---------------------+

| 1 | A| 2013-03-21 14:24:20 |

| 2 | B| 2013-03-21 14:24:21 |

+----+------+---------------------+

2 rows in set (0.00 sec)

UPDATE

testB

val = 'C'

WHERE

id = 1;

SELECT

testB;

+----+------+---------------------+

| id | val | dt|

+----+------+---------------------+

| 1 | C| 2013-03-21 14:28:02 |

| 2 | B| 2013-03-21 14:24:21 |

+----+------+---------------------+

2 rows in set (0.00 sec)

假如仅仅需要 插入时记录时间, 更新的时候不需要, 那么需要修改表定义方式:

TIMESTAMP not null default CURRENT_TIMESTAMP

create table testC (

idint PRIMARY KEY,

val varchar(10),

dt TIMESTAMP not null default CURRENT_TIMESTAMP

INSERT INTO testC(id, val) VALUES(1, 'A');

INSERT INTO testC(id, val) VALUES(2, 'B');

SELECT

testC;

+----+------+---------------------+

| id | val | dt|

+----+------+---------------------+

| 1 | A| 2013-03-21 14:35:12 |

| 2 | B| 2013-03-21 14:35:13 |

+----+------+---------------------+

2 rows in set (0.00 sec)

UPDATE

testC

val = 'CC'

WHERE

id = 1;

SELECT

testC;

+----+------+---------------------+

| id | val | dt|

+----+------+---------------------+

| 1 | CC| 2013-03-21 14:35:12 |

| 2 | B| 2013-03-21 14:35:13 |

+----+------+---------------------+

2 rows in set (0.00 sec)-- 方法一:

由于mysql目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的。代替的方案是使用timestamp类型代替datetime类型。

timestamp列类型自动地用当前的日期和时间标记insert或update的操作。如果有多个timestamp列,只有第一个自动更新。

自动更新第一个timestamp列在下列任何条件下发生:

1.列值没有明确地在一个insert或load data infile语句中指定。

2.列值没有明确地在一个update语句中指定且另外一些的列改变值。(注意一个update设置一个列为它已经有的值,这将不引起timestamp列被更新,因为如果你设置一个列为它当前的值,mysql为了效率而忽略更改。)

3.你明确地设定timestamp列为null.

4.除第一个以外的timestamp列也可以设置到当前的日期和时间,只要将列设为null,或now()。

所以把日期类型 选择成timestamp 允许空就可以了

create table test (

uname varchar(50) not null,

updatetime timestamp null defaultcurrent_timestamp on update current_timestamp

) engine=innodb default charset=utf8;

如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上current_timestamp即可哦 ,明白你的意思了,把日期类型 选择成timestamp 允许空 就可以了

CREATE TABLE `dtal` (

`uname` varchar(50) NOT NULL,

`udate` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

) ENGINE=InnoDB DEFAULT CHARSET=utf8;