menu HCG_Sky's Blog
more_vert
chevron_right 首页 » 学习笔记,随笔,Linux,Windows,Java » MySQL 8.0 TIMESTAMP 默认赋值问题
MySQL 8.0 TIMESTAMP 默认赋值问题
2022-03-16 | 学习笔记,随笔,Linux,Windows,Java | 暂无评论 | 332 次阅读 | 470字

TIMESTAMP 没有 TIME??? TIMESTAMP默认值设置问题

前言

 今天在学习MySQL的DML(增删改表的数据)时,在跟着视频学习时,老师说了TIMESTAMP这个数据类型如果不为null,则默认使用当前的系统时间,来自动赋值,但是在实际操作时并没有,而是默认为null,思考了一下可能是版本的问题(我使用的是8.0,视频教学中使用的是5.7),因此我在搜寻、探索一番后得到了解决的方案,在此记录一下

首先我们创建一个含有TIMESTAMP类型数据的表 Test

CREATE TABLE Test(
  string VARCHAR(20),
  insert_time TIMESTAMP
);

接着我们查看一下表的数据结构,确认没有问题

DESC Test;

然后我们按照教学中所说的只为string这个列进行赋值,按理说insert_time会自动应用本地时间进行赋值

INSERT INTO Test(string) VALUES('张三');        # 赋值
SELECT * FROM Test;        # 查看表的内容

 可以看到并没有自动应用本地时间进行赋值,而且值为NULL,就很难受,时间戳没有时间哈哈哈哈

解决方法

方法一:
我们可以在赋值时顺便给insert_time赋值CURRENT_TIMESTAMP,即可解决,但是这样失去灵魂,所以有方法二
方法二:
在建表时我们在数据类型后加上一句NOT NULL DEFAULT CURRENT_TIMESTAMP修改默认值即可


下面是方法一的演示,语句按顺序执行

INSERT INTO Test(string,insert_time) VALUES('张三',CURRENT_TIMESTAMP);        # 赋值
SELECT * FROM Test;        # 查看表的内容

 可以看到已经默认应用本地时间进行赋值了,但这样时间戳失去了点灵魂,所以我们看看方法二

下面是方法二的演示,语句按顺序执行

CREATE TABLE Test(
  string VARCHAR(20),
  insert_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
DESC Test;        #查看表的数据结构
INSERT INTO Test(string) VALUES('张三');        # 赋值
SELECT * FROM Test;        # 查看表的内容

 可以看到在我们没有对insert_time进行赋值时,已经默认应用本地时间进行赋值了

总结:不同版本有不同的特性,需要我们去关注、学习、探索

发表评论
暂无评论
textsms
account_circle
email
link


arrow_back 上一篇
七牛云 腾讯云 阿里云 百度统计 TrustAsia 安全签章 MySSL 安全签章