如何更新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;