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
进行赋值时,已经默认应用本地时间进行赋值了
总结:不同版本有不同的特性,需要我们去关注、学习、探索
本篇文章采用 署名 4.0 国际 (CC BY 4.0) 许可协议进行许可。