MySQL参数-sql_auto_is_null

sql_auto_is_null

sql_auto_is_null

  • | 属性 | 值 |
    | —————————————————————————————— | ————————— |
    | 系统变量 | sql_auto_is_null |
    | 范围 | 全球会议 |
    | 动态 | 是 |
    | SET_VAR 提示适用 | 是 |
    | 类型 | 布尔型 |
    | 默认值 | OFF |

    如果启用了此变量,则在成功插入自动生成的AUTO_INCREMENT值的语句之后 ,可以通过发出以下形式的语句来找到该值:

    SELECT * FROM tbl_name WHERE auto_col IS NULL

    如果该语句返回一行,则返回的值与调用该LAST_INSERT_ID()函数的值相同。
    有关详细信息,包括在多行插入之后的返回值,请参见第12.15节“信息函数”。如果没有AUTO_INCREMENT成功插入任何
    值,则该SELECT语句不返回任何行。

    某些ODBC程序(例如Access)使用通过比较来 检索AUTO_INCREMENT
    的行为 IS NULL。请参阅 获取自动增量值。可以通过设置sql_auto_is_null为 禁用此行为 OFF

    在此之前的MySQL 8.0.16,改造,以 执行该语句时,才被执行,这样的值
    执行期间确定查询是否转化。在MySQL 8.0.16及更高版本中,转换是在语句准备期间执行的。 WHERE *auto_col* IS NULL``WHERE *auto_col* = LAST_INSERT_ID()``sql_auto_is_null

    默认值 sql_auto_is_nullOFF

实践

  1. 查看当前参数值select @@sql_auto_is_null;
  2. 设置参数为开启set @@sql_auto_is_null=1;
    2.1 创建带自增长主键的表test1 create table test1 (id int primary key auto_increment, name varchar(255));
    2.2 插入数据 insert into test1 set name='booboo';
    2.3 查看id不为null的列 SELECT * FROM fms.test1 WHERE id IS NULL;
  3. 设置参数为关闭set @@sql_auto_is_null=0;
    3.1 插入数据 insert into test1 set name='tom';
    3.2 查看id不为null的列 SELECT * FROM fms.test1 WHERE id IS NULL;
总结

sql_auto_is_null 参数默认值为OFF 关闭 0
某些ODBC程序(例如Access)使用通过比较来 检索AUTO_INCREMENT值 的行为 [IS NULL]
在参数值为ON的情况下,可执行select * from table where id is null;
不建议开启。

mysql>select @@sql_auto_is_null;
+------------------------------+
| @@sql_auto_is_null |
+------------------------------+
| 0 |
+------------------------------+
返回行数:[1],耗时:5 ms.
mysql>set @@sql_auto_is_null=1;
执行成功,耗时:7 ms.
mysql>create table test1 (id int primary key auto_increment, name varchar(255));
执行成功,耗时:113 ms.
mysql>insert into test1 set name='booboo'
影响行数:[1],耗时:86 ms.
mysql>select * from test1;
+--------------+----------------+
| id | name |
+--------------+----------------+
| 1 | booboo |
+--------------+----------------+
返回行数:[1],耗时:6 ms.
mysql>select @@sql_auto_is_null;
+------------------------------+
| @@sql_auto_is_null |
+------------------------------+
| 1 |
+------------------------------+
返回行数:[1],耗时:4 ms.
mysql>SELECT * FROM fms.test1 WHERE id IS NULL
+--------------+----------------+
| id | name |
+--------------+----------------+
| 1 | booboo |
+--------------+----------------+
返回行数:[1],耗时:16 ms.
mysql>set @@sql_auto_is_null=0;
执行成功,耗时:5 ms.
mysql>insert into test1 set name='tom'
影响行数:[1],耗时:11 ms.
mysql>SELECT * FROM fms.test1 WHERE id IS NULL
+--------------+----------------+
| id | name |
+--------------+----------------+
返回行数:[0],耗时:4 ms.