MariaDB Null值
在处理NULL值时,请记住它们是未知值。它们不是空字符串或零,这些是有效值。在表创建中,列的规范允许设置它们接受空值或拒绝它们。只需使用NULL或NOT NULL子句。这在缺失记录信息(如ID号)的情况下有应用。
用户定义的变量在明确赋值之前具有NULL值。存储过程参数和局部变量可以设置为NULL值。当局部变量没有默认值时,它具有NULL值。
NULL不区分大小写,并且具有以下别名−
- UNKNOWN(布尔值)
\N
NULL运算符
标准比较运算符不能与NULL一起使用(例如,=,>,>=,<=,<或!=),因为与NULL值的所有比较都返回NULL,而不是true或false。与NULL或可能包含NULL的比较必须使用“<=>”(NULL-SAFE)运算符。
其他可用的运算符包括−
- IS NULL − 它测试NULL值。
-
IS NOT NULL − 它确认没有NULL值。
-
ISNULL − 它在发现NULL值时返回1,在未发现时返回0。
-
COALESCE − 它返回列表中第一个非NULL值,如果没有则返回NULL值。
排序NULL值
在排序操作中,NULL值具有最低的值,因此DESC顺序会将NULL值排在底部。MariaDB允许为NULL值设置较高的值。
有两种方法可以实现此目的,如下所示−
SELECT column1 FROM product_tbl ORDER BY ISNULL(column1), column1;
另一种方式 –
SELECT column1 FROM product_tbl ORDER BY IF(column1 IS NULL, 0, 1), column1 DESC;
NULL 函数
通常情况下,当任何参数为NULL时,函数的输出值为NULL。然而,有些函数专门用于处理NULL值。它们包括:
- IFNULL() - 如果第一个表达式不为NULL,则返回该表达式的值;如果该表达式为NULL,则返回第二个表达式的值。
-
NULLIF() - 当比较的两个表达式相等时返回NULL,否则返回第一个表达式的值。
SUM和AVG等函数会忽略NULL值。
插入NULL值
在声明为NOT NULL的列中插入NULL值会导致错误。在默认的SQL模式下,NOT NULL列会插入一个基于数据类型的默认值。
当字段是TIMESTAMP,AUTO_INCREMENT或虚拟列时,MariaDB会以不同的方式处理NULL值。在AUTO_INCREMENT列中插入值会导致该序列中的下一个数字被插入到该位置。在TIMESTAMP字段中,MariaDB会分配当前时间戳。在虚拟列中(本教程稍后会讨论),会分配默认值。
UNIQUE索引可以包含多个NULL值,但主键不能为NULL。
NULL值和Alter命令
当使用ALTER命令修改列时,在没有指定NULL规格的情况下,MariaDB会自动分配值。