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
);

idnameage 是必须传值的,而 citysalary 在插入数据的时候是可以不用传值的

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 的情况

SQLite 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.