日期类型区别及用途
MySQL 的日期类型有5个,分别是: date、time、year、datetime、timestamp。
将在
“菜鸟教程”
和百度获取的资料,整理成如下表格:
类型
|
字节
|
格式
|
用途
|
是否支持设置系统默认值
|
date
|
3
|
YYYY-MM-DD
|
日期值
|
不支持
|
time
|
3
|
HH:MM:SS
|
时间值或持续时间
|
不支持
|
year
|
1
|
YYYY
|
年份
|
不支持
|
datetime
|
8
|
YYYY-MM-DD HH:MM:SS
|
日期和时间混合值
|
不支持
|
timestamp
|
4
|
YYYYMMDD HHMMSS
|
混合日期和时间,可作时间戳
|
支持
|
日期类型的 default 设置
关于 default 设置,通常情况下会使用当前时间作为默认值。
Example:
ts_time timestamp NOT NULL DEFAULT NOW();
ts_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP();
根据上表可知,除了 timestamp 类型支持系统默认值设置,其他类型都不支持。
如果建表语句中有:
ts_time1 time NOT NULL DEFAULT NOW();
ts_time3 yearNOT NULL DEFAULT NOW();
ts_time2 date NOT NULL DEFAULT CURRENT_TIMESTAMP();
ts_time2 datetime NOT NULL DEFAULT CURRENT_TIMESTAMP();
都会报错。所以想要设置某个日期列的默认值为当前时间,只能使用 timestamp 类型,并设置 DEFAULT NOW() 或 DEFAULT CURRENT_TIMESTAMP() 作为默认值。
date 类型默认值使用 current_date() 创建失败
date 类型默认值使用 now() 创建失败
date 类型默认值使用 current_timestamp() 创建失败
datetime 类型默认值使用 current_timestamp() 创建失败
datetime 类型默认值使用 now() 创建失败
timestamp 类型默认值使用 now() 创建成功
常见的日期获取函数
MySQL中有一些日期函数可供我们使用,我们可以使用 ” select 函数名() ; ” 的 sql 查看它们的返回值。同时也可以使用 “select 自定义函数名();”,调用我们自己定义的函数。
Eample:
select current_timestamp();
select current_date();
select current_time();
select now();
参照
“w3School相关内容”
,其他常见的日期函数如下
函数
|
描述
|
NOW()
|
返回当前的日期和时间
|
CURDATE()
|
返回当前的日期
|
CURTIME()
|
返回当前的时间
|
DATE()
|
提取日期或日期/时间表达式的日期部分
|
EXTRACT()
|
返回日期/时间按的单独部分
|
DATE_ADD()
|
给日期添加指定的时间间隔
|
DATE_SUB()
|
从日期减去指定的时间间隔
|
DATEDIFF()
|
返回两个日期之间的天数
|
DATE_FORMAT()
|
用不同的格式显示日期/时间
|
其他的内容
更多的MySQL Date 类型或 Date 处理函数,请移步:
MySQL 数据类型 – 菜鸟教程网
SQL Date 函数 – W3School
MySQL日期时间函数大全 – zeroone
MySQL
设置当前
时间
为默认值的问题我们经常会遇到,下面就为您介绍
MySQL
设置当前
时间
为默认值的实现全步骤,希望对您能有所启迪。数据库:test_db1创建表:test_ta1两个字段:id (自增 且为主键),createtime 创建日期(默认值为当前
时间
)
方法一、是用alert table语句: 代码如下:use test_db1; create table test_ta1( id mediumint(8) unsigned not nulll auto_increment, createtime datetime, primary key (id) )e
修改
日期类
型
为
timestamp
并允许空,如下:
CREATE TABLE dutest (aaaa varchar(50) NOT NULL,createday
timestamp
NULL DEFAULT
CURRENT_
TIMESTAMP
ON UPDATE CURRENT_
TIMESTAMP
) ENGINE=InnoDB DEFAULT
CHARSET=utf8;
如果是在navicat下操作的话,zhi设置dao字段的
类型
为
timestamp
,默认值写上CURRENT_
TIMESTAMP
CREATE TABLE `table1` (
`id` int(11) NOT NULL,
`createtime`
timestamp
NULL default CURRENT_
TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
若是手动...
1.DEFAULT CURRENT_
TIMESTAMP
()
create table `new`(
`id` int(4) primary key auto_increment,
`create_date`
TIMESTAMP
DEFAULT CURRENT_
TIMESTAMP
()
2.DEFAULT CURRENT_
TIMESTAMP
create table `new`(
`id` int(4) prim
环境
MySQL
5.1 + 命令行工具 问题
MySQL
表字段设置默认值 解决 代码如下: –SQL: CREATE TABLE test( i_a int NOT NULL DEFAULT 1, ts_b
timestamp
NOT NULL DEFAULT NOW(), c_c char(2) NOT NULL DEFAULT ‘1’ ); –以下SQL不合法 –time_d time NOT NULL DEFAULT CURTIME(), –date_e date NOT NULL DEFAULT CURDATE(), –datetime_f datetime NOT NULL DE
所以以 代码如下:create_time datetime default now() 的形式设置默认值是不可能的。 代替的方案是使用
TIMESTAMP
类型
代替DATETIME
类型
。 CURRENT_
TIMESTAMP
:当我更新这条记录的时候,这条记录的这个字段不会改变。 CURRENT_
TIMESTAMP
ON UPDATE CURRENT_
TIMESTAMP
:当我更新这条记录的时候,这条记录的这个字段将会改变。即
时间
变为了更新时候的
时间
。(注意一个UPDATE设置一个列为它已经有的值,这将不引起
TIMESTAMP
列被更新,因为如果你设置一个列为它当前的值,
MySQL
为了效率而忽略更改
先看一下最简单的例子,在test中,添加一个字段,字段名为birth,
类型
为date
类型
。
mysql
> alter table test add column birth date;
Query OK, 0 rows affected (0.36 sec)
Records: 0 Duplicates: 0 Warnings: 0
查询一下数据,看看结果:
mysql
> select * from test;
+——+——–+———————————-+————+——-+
| t_id | t_name | t_password | t_birth
`holiday_date` date NOT NULL DEFAULT '1992-09-09' COMMENT '节日的
时间
'
date格式的设置默认值,current_date,current_
timestamp
等方法好像都不可以的,需要用字符串设置一个默认的日期。