mysql变量

变量1.explicit_defaults_for_timestamp

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

[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

其原因是从 5.6开始,timestamp 的默认行为已经是 deprecated 了。

在MySQL 5.6.6之前,TIMESTAMP的默认行为:

•TIMESTAMP列如果没有明确声明NULL属性,默认为NOT NULL。(而其他数据类型,如果没有显示声明为NOT NULL,则允许NULL值。)设置TIMESTAMP的列值为NULL,会自动存储为当前timestamp。 •表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。 •表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,默认自动分配‘0000-00-00 00:00:00′。插入行时没有指明改列的值,该列默认分配‘0000-00-00 00:00:00′,且没有警告。

要关闭警告,需要加入下面的参数:

[mysqld] explicit_defaults_for_timestamp=true

重启MySQL后错误消失,这时TIMESTAMP的行为如下:

•TIMESTAMP如果没有显示声明NOT NULL,是允许NULL值的,可以直接设置改列为NULL,而没有默认填充行为。 •TIMESTAMP不会默认分配DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP属性。 •声明为NOT NULL且没有默认子句的TIMESTAMP列是没有默认值的。往数据表中插入列,又没有给TIMESTAMP列赋值时,如果是严格SQL模式,会抛出一 个错误,如果严格SQL模式没有启用,该列会赋值为‘0000-00-00 00:00:00′,同时出现一个警告。(这和MySQL处理其他时间类型数据一样,如DATETIME)

也就是 explicit_defaults_for_timestamp 关闭了 timestamp 类型字段锁拥有的一些会让人感到奇怪的默认行为,加入了该参数之后,如果还需要为 timestamp类型的字段指定默认行为,那么就需要显示的在创建表时显示的指定。explicit_defaults_for_timestamp 也就是这个意思:显示指定默认值为timestamp类型的字段。

时间: 2024-12-29 12:19:08

mysql变量的相关文章

mysql变量修改及生效

使用过mysql的人都知道我们对mysql设置变量是在my.cnf文件里,平时修改一次变量后需要重启mysql的服务,但是在实际生产服务器中这样是不允许的,我们可以通过这个语句查询mysql的全部变量 mysql> show global variables; 如果mysql中开启了慢查询日志分析,查看慢查询的设定默认时间及要调整默认时间就 mysql> show global variables like "%_time"; +----------------------

性能测试关注的mysql变量

MySQL变量很多,其中有一些MySQL变量非常值得我们注意,下面就为您介绍一些值得我们重点学习的MySQL变量,供您参考. 1 Threads_connected 首先需要注意的,想得到这个变量的值不能show variables like 'Threads_connected';而是show status like 'Threads_connected'(下面的变值也是这样的);意思:变量的值是表示当前有多少个客户连接该mysql服务器引申:连接数是否过多,网络时候存在问题!特别是在pcon

mysql变量使用总结

set语句的学习: 使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: select @VAR:=(select sum(amount) from penalties); 我这样改,虽然是可以的.但是,对比的书中的答案,发现这样的方式太蹩脚了.说明没有很好地理解select定义变量的本质.在select中,发现有一个用户变量,如果没有定义,那么就会初始化.select子句原来的

Mysql 变量讲解

set语句的学习: 使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: select @VAR:=(select sum(amount) from penalties); 我这样改,虽然是可以的.但是,对比的书中的答案,发现这样的方式太蹩脚了.说明没有很好地理解select定义变量的本质.在select中,发现有一个用户变量,如果没有定义,那么就会初始化.select子句原来的

MySQL服务 - MySQL变量类型及变量设置

一.MySQL变量类型: MySQL通过变量来定义当前服务器的特性,保存状态信息等.我们可以通过手动更改变量的值来配置MySQL,也可以通过变量获得MySQL的当前状态信息.MySQL的变量类型可以从变量的修改方式和变量的生效范围划分. 1.根据变量修改的方式: 动态变量:可以在MySQL运行时调整其指,并立即生效: 静态变量:需要在配置文件中修改,重启服务后生效: 2.根据变量的生效范围: 全局变量:服务级别的设定,对整个服务生效: 会话变量:仅对当前会话生效,其他会话和新会话不受影响:会话结

mysql变量使用总结(转)

set语句的学习: 使用select定义用户变量的实践将如下语句改成select的形式: set @VAR=(select sum(amount) from penalties);我的修改: select @VAR:=(select sum(amount) from penalties); 我这样改,虽然是可以的.但是,对比的书中的答案,发现这样的方式太蹩脚了.说明没有很好地理解select定义变量的本质.在select中,发现有一个用户变量,如果没有定义,那么就会初始化.select子句原来的

linux下面MySQL变量修改及生效

今天在访问mysql项目的时候突然报500错误,没有找到连接,因此想到mysql的连接时间. mysql> show global variables; 主要就是连接时间是28800(8小时),而且任务调度也没打开,因此想到修改全局变量的值. 1.修改任务调度装: 1.1具体的查看任务调度的状态:show variables like '%event%';  1.2修改任务打开状态:set global event_scheduler=on; 2.修改数据库连接时间: 2.1查看连接时间:sho

Mysql变量简介

一.mysql变量分为三类 1.全局变量(内置变量):mysql数据库内置的变量 (所有连接都起作用) a.查看所有全局变量: show variables; b.查看某个全局变量: select @@变量名; c.修改全局变量: set 变量名=新值;(没有该变量,会自己创建) 2.会话变量: 只存在于当前客户端与数据库服务器端的一次连接当中. a.查看会话变量: select @变量; b.修改会话变量: set @变量=值;(没有该变量,会自己创建) 3.局部变量: 在存储过程中使用的变量

MySQL变量的使用

在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量. 但根据实际应用又被细化为四种类型,即局部变量.用户变量.会话变量和全局变量. 一.局部变量 mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块. 其作用域仅限于该语句块. -- declare语句专门用于定义局部变量,可以使用default来说明默认值 declare age int default 0; -- 局部变量的赋值方式一 set age=18; -- 局部变量的赋值方

MYSQL变量和状态

mysql设置变量是在my.cnf文件里,修改配置文件后需要重启mysql的服务,才能生效.但是在线上服务器是不允许随便重启的,我们可以用命令直接修改变量值,使其生效.然后再修改配置文件中的值,以防止重启时还用旧值. show  variables like "slow%" #查询慢查询相关的变量 slow_launch_time 表示如果建立线程花费了比这个值更长的时间,slow_launch_threads 计数器将增加 mysql> set global long_quer