SQLite NULL 值
SQLite 的 NULL
关键字用来表示一个缺失的值
NULL
值与 0
或 ''
是不同的,理解这点是非常重要的,从 ASCII 字符集上来讲,NULL
值是 0,而 0
值是 48
在 sqlite>
命令行提示符中,NULL
值显示为空白
因此我们知道,如果在创建表结构时若设置某个字段可以为 NULL
或者不添加 NOT NULL
属性,那么它在插入值的时候可以不用传递该参数,SQLite
会默认使用 NULL
关键字填充
如果要在插入或者更新时一定要传递该参数,那么可以设置为 NOT NULL
创建一个 NOT NULL
字段语法
CREATE TABLE tbl_employee ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name CHAR(64) NOT NULL, age INTEGER NOT NULL, city CHAR(64), salary REAL );
范例
比如我们可以使用下面的语句创建一张表 tbl_employee
DROP TABLE tbl_employee; CREATE TABLE tbl_employee ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name CHAR(64) NOT NULL, age INTEGER NOT NULL, city CHAR(64), salary REAL );
id
、name
和 age
是必须传值的,而 city
和 salary
在插入数据的时候是可以不用传值的
id 字段有点特殊,因为它的
AUTOINCREMENT
权重更大,如果没传值,它会自增
然后就可以像下面这样插入数据了
INSERT INTO tbl_employee (name,age,city,salary) VALUES ('张三', 25, 'pek', 102400.00 ), ('李四', 18, 'shanghai', 88888.00 ), ('王五', 22, 'hangzhou', 22000.00 ), ('孙六', 32, 'pek', 32000.00 ), ('钱七', 25, 'shanghai', 25000.00 );
插入数据的时候还可以忽略 name
字段
INSERT INTO tbl_employee (name,age,salary) VALUES ('赵二', 45, 45800.00 ), ('冯九', 37, 15000.00 );
然后我们使用 SELECT * FROM tbl_employee;
语句查看我们插入的数据
sqlite> SELECT * FROM tbl_employee; id name age city salary ---------- ---------- ---------- ---------- ---------- 1 张三 25 pek 102400.0 2 李四 18 shanghai 88888.0 3 王五 22 hangzhou 22000.0 4 孙六 32 pek 32000.0 5 钱七 25 shanghai 25000.0 6 赵二 45 45800.0 7 冯九 37 15000.0
WHERE 子句中的 NULL
实例
WHERE
子句中的 NULL
值时比较特殊的
我们不能使用 = NULL
或 != NULL
在列中查找 NULL
值
sqlite> SELECT * FROM tbl_employee WHERE city=NULL; sqlite>
我们可以发现一条记录都没有选择出来
SQLite 中,NULL
值与任何其它值的比较 ( 即使是 NULL
) 永远返回 false,即 NULL = NULL
返回 false
为了处理这种情况,SQLite 提供了两个运算符用来处理 NULL
值的情况
运算符 | 说明 |
---|---|
IS NULL | 当列的值是 NULL,此运算符返回 true |
IS NOT NULL | 当列的值不为 NULL, 运算符返回 true |
我们可以使用下面的语句查找 city
字段为 NULL
的记录
SELECT * FROM `tbl_employee` WHERE city is NULL;
运行结果如下
id name age city salary ---------- ---------- ---------- ---------- ---------- 6 赵二 45 45800.0 7 冯九 37 15000.0
然后可以使用下面的语句查找 city
不是 NULL
的记录
SELECT * FROM `tbl_employee` WHERE city is NOT NULL;
运行结果如下
id name age city salary ---------- ---------- ---------- ---------- ---------- 1 张三 25 pek 102400.0 2 李四 18 shanghai 88888.0 3 王五 22 hangzhou 22000.0 4 孙六 32 pek 32000.0 5 钱七 25 shanghai 25000.0 4 rows in set (0.00 sec)
注意: 因为
NULL
只有简单的判断操作,所以在日常开发中,创建字段时应该使用NOT NULL
来避免数据为NULL
的情况