使用null值时,请记住它们是未知值。 它们不是空字符串或零,它们是有效值。 在表创建中,列规范允许将它们设置为接受空值,或拒绝它们。 只需使用null或not null子句。 这在缺少记录信息(如id号)的情况下具有应用。
用户定义的变量的值为null,直到显式赋值。 存储的例程参数和局部变量允许将值设置为null。 当局部变量没有默认值时,它的值为null。
null不区分大小写,并具有以下别名 -
标准比较运算符不能与null(例如,=,>,> =,<=,<或或!=)一起使用,因为所有与null值的比较都返回null,而不是true或false。 与null或可能包含它的比较必须使用“<=>”(null-safe)运算符。
其他可用的运营商有 -
is null - 它测试null值。
is not null - 它确认不存在null值。
isnull - 在发现null值时返回值1,在不存在时返回0。
coalesce - 返回列表的第一个非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值的函数。 他们是 -
ifnull() - 如果第一个表达式不为null,它返回它。 当它求值为null时,它返回第二个表达式。
nullif() - 当比较的表达式相等时,它返回null,否则返回第一个表达式。
像sum和avg的函数忽略null值。
在声明为not null的列中插入null值时,会发生错误。 在默认sql模式下,not null列将根据数据类型插入一个默认值。
当字段是timestamp,auto_increment或虚拟列时,mariadb会以不同方式管理null值。 插入在auto_increment列中会导致序列中的下一个数字插入到其位置。 在timestamp字段中,mariadb分配当前时间戳。 在虚拟列中,本教程后面讨论的主题将分配默认值。
unique索引可以包含许多null值,但是,主键不能为null。
当您使用alter命令修改列时,如果没有null规范,mariadb会自动分配值。