MySQL timestamp NOT NULL插入NULL的问题

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
+关注继续查看



explicit_defaults_for_timestamp


MySQL 5.6版本引入

explicit_defaults_for_timestamp

来控制对timestamp NULL值的处理

 

如果该参数不开启,则对timestamp NOT NULL插入NULL值,不报错,无warning,插入后的值为当前时间

如果在my.cnf中explicit_defaults_for_timestamp=1

那么插入该值的时候会报错提示该列can not be null

建议开启该值

mysql> show variables like '%explicit_defaults_for_timestamp%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF   |
+---------------------------------+-------+
1 row in set (0.00 sec)


mysql> show create table helei\G
*************************** 1. row ***************************
       Table: helei
Create Table: CREATE TABLE `helei` (
  `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.08 sec)

mysql> select * from helei;
Empty set (0.03 sec)

mysql> insert into helei values(NULL);
Query OK, 1 row affected (0.39 sec)

mysql> select * from helei;
+---------------------+
| a                   |
+---------------------+
| 2016-05-26 11:44:24 |
+---------------------+
1 row in set (0.03 sec)

可以看到

explicit_defaults_for_timestamp

插入的NULL值变为当前时间,并没有被NOT NULL所限制


且该值是无法动态修改的,必须重启库才可以变更

mysql> set global explicit_defaults_for_timestamp=0;

ERROR 1238 (HY000): Variable 'explicit_defaults_for_timestamp' is a read only variable



我们在my.cnf修改该参数后并重启库后,可以看到null值已经不被允许插入了

mysql> select * from helei;
+---------------------+
| a                   |
+---------------------+
| 2016-05-26 11:44:24 |
| 2016-05-26 11:45:46 |
+---------------------+
2 rows in set (0.00 sec)

mysql> insert into helei values(null);
ERROR 1048 (23000): Column 'a' cannot be null

mysql> insert into helei values(NULL);
ERROR 1048 (23000): Column 'a' cannot be null





explicit_defaults_for_timestamp = 0

1
2
3
4
5
6
7
8
CREATETABLE `helei` (
`id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
`t1`  timestamp NULL DEFAULT NULL COMMENT 'null' ,
`t2`  timestamp NOT NULL COMMENT 'not null' ,
`t3`  timestamp NOT NULL ON UPDATECURRENT_TIMESTAMP COMMENT 'not null update' ,
PRIMARYKEY (`id`)
)
;


insert into helei(t1,t2,t3) values(null,null,null);

mysql> select * from helei;
+------+------+---------------------+---------------------+
| id   | t1   | t2                  | t3                  |
+------+------+---------------------+---------------------+
|    2 | NULL | 2016-06-27 09:33:00 | 2016-06-27 09:33:00 |


t2虽然没有ON UPDATECURRENT_TIMESTAMP ,但由于explicit_defaults_for_timestamp没有开启,插入NULL不报错,且也插入了当前的时间




explicit_defaults_for_timestamp = 1

insert into helei(t1,t2,t3) values(null,null,null);

[SQL]insert into helei(t1,t2,t3) values(null,null,null)

[Err] 1048 - Column 't2' cannot be null

这才是我想要的





 本文转自 dbapower 51CTO博客,原文链接:http://blog.51cto.com/suifu/1783400,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MYSQL——Split字符串并且插入值
MYSQL——Split字符串并且插入值
104 0
|
12月前
|
存储 关系型数据库 MySQL
MySQL InnoDB的插入缓冲Insert Buffer
MySQL InnoDB的插入缓冲Insert Buffer
100 0
MySQL InnoDB的插入缓冲Insert Buffer
|
12月前
|
SQL 关系型数据库 MySQL
MySQL插入Emoji表情
MySQL插入Emoji表情
MySQL插入Emoji表情
|
关系型数据库 MySQL 数据库
mysql插入表时报错ERROR 1067 (42000): Invalid default value for ‘end_time‘
mysql插入表时报错ERROR 1067 (42000): Invalid default value for ‘end_time‘
|
SQL 关系型数据库 MySQL
MySQL中的批量操作(修改,插入)
在平常的项目中,我们会需要批量操作数据库的时候,例如:批量修改,批量插入,那我们不应该使用 for 循环去操作数据库,这样会导致我们反复与数据库发生连接和断开连接,影响性能和增加操作时间
353 0
|
Java 关系型数据库 MySQL
mybatis -plus插入mysql数据,数据库时间比系统时间差8小时
mybatis -plus插入mysql数据,数据库时间比系统时间差8小时
mybatis -plus插入mysql数据,数据库时间比系统时间差8小时
|
关系型数据库 MySQL 测试技术
软件测试mysql面试题:mysql、表“test”,两个字段 id 和 uid。查看数据表结构、插入一条记录、删除一条记录。
软件测试mysql面试题:mysql、表“test”,两个字段 id 和 uid。查看数据表结构、插入一条记录、删除一条记录。
84 0
|
关系型数据库 MySQL
mysql中插入语句ON DUPLICATE KEY用法
ON DUPLICATE KEY是mysql中特有用法
319 0
|
关系型数据库 MySQL 数据库
MySQL:load data local infile快速插入大批量数据
MySQL:load data local infile快速插入大批量数据
365 0
|
存储 SQL NoSQL
推荐文章
更多