- MariaDB 教程
- MariaDB - 首页
- MariaDB - 简介
- MariaDB - 安装
- MariaDB - 管理
- MariaDB - PHP 语法
- MariaDB - 连接
- MariaDB - 创建数据库
- MariaDB - 删除数据库
- MariaDB - 选择数据库
- MariaDB - 数据类型
- MariaDB - 创建表
- MariaDB - 删除表
- MariaDB - 插入查询
- MariaDB - 选择查询
- MariaDB - WHERE 子句
- MariaDB - 更新查询
- MariaDB - 删除查询
- MariaDB - LIKE 子句
- MariaDB - ORDER BY 子句
- MariaDB - 连接
- MariaDB - 空值
- MariaDB - 正则表达式
- MariaDB - 事务
- MariaDB - ALTER 命令
- 索引和统计表
- MariaDB - 临时表
- MariaDB - 表克隆
- MariaDB - 序列
- MariaDB - 管理重复项
- MariaDB - SQL 注入防护
- MariaDB - 备份方法
- MariaDB - 备份加载方法
- MariaDB - 有用函数
- MariaDB 有用资源
- MariaDB - 快速指南
- MariaDB - 有用资源
- MariaDB - 讨论
MariaDB - 空值
在处理 NULL 值时,请记住它们是未知值。它们不是空字符串或零,空字符串和零是有效值。在创建表时,列规范允许将其设置为接受空值或拒绝空值。只需使用 NULL 或 NOT NULL 子句即可。这适用于缺少记录信息(如 ID 号)的情况。
用户定义变量在显式赋值之前其值为 NULL。存储例程参数和局部变量允许设置为 NULL 值。当局部变量没有默认值时,其值为 NULL。
NULL 不区分大小写,并且具有以下别名:
- UNKNOWN(布尔值)
- \N
NULL 运算符
标准比较运算符不能与 NULL 一起使用(例如,=、>、>=、<=、< 或 !=),因为所有与 NULL 值的比较都返回 NULL,而不是 true 或 false。与 NULL 或可能包含 NULL 的值的比较必须使用“<=>” (NULL 安全) 运算符。
其他可用的运算符为:
IS NULL - 它测试 NULL 值。
IS NOT NULL - 它确认不存在 NULL 值。
ISNULL - 在发现 NULL 值时返回 1,在不存在 NULL 值时返回 0。
COALESCE - 它返回列表中的第一个非 NULL 值,或者在不存在非 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 会自动分配值。