1)"隐式"写入空值其实就是在追加记录时,不向需写入空值的字段输入任何数据。注意,前提是相应字段未设置有"默认值",否则数据库引擎会在未输入字段值时自动输入有关“默认值”;
2)“显式”写入空值就是指明将关键字null写入目标字段。
下面举例说明,假设有数据表
学生表(学号 主键,姓名 非空,性别 非空,住址,电话)
--隐式插入空值(null)示例
insert into 学生表(学号,姓名,性别) values("001","张三","男")
因为未向住址、电话这两个字段写入任何值而该两个字段也未有“默认值”上述语句运行后,空值(null)就自然被“输入”到住址、电话这两个字段里。
--显示式插入空值(null)示例
insert into 学生表(学号,姓名,性别,住址,电话) values("001","张三","男",null,null)
***附带提示一下,空值(null)与空字符串("")也称作零长度字符串在概念上是不一样的。尽管两者的外观看起来一样,都没东西,但是前者的数据类型为未知,而后者的数据类型则是明确的,那就是“字符型”。存储空字符串("")是要占用磁盘空间的,而空值(null)则不占用磁盘空间。我们使用数据库时要留意两者之间的区别。
使用Variant数据异常。如果需要使用空值,请使用Variant数据类型,使用Nz()函数指定要用于Null的值。
在VBA中,唯一可以包含Null的数据类型是Variant。当字段的值分配给非变量时,都必须考虑该字段可能为空的可能性。
空值和Null值,两者是同一个东西。前者是后者的中文说法。
我想楼主实际是想搞清楚 空字符串(我们也可以称之为0长度字符串)与Null值(空值)的区别。
尽管这两者在外观上看起来都是没东西,但是这两者有很大的区别:
1)空字符串(0长度字符串)在代码中用一对没有间隔的英文双引号表示-->"" (外层有双引号的情况下用一对英文单引号表示-->'')其数据类型是明确的,即为字符型。存储“空字符串”是要占据物理磁盘空间的;
2)Null值(空值)在代码中用关键字 "Null" 表示,代表没东西,其数据类型未知,它不占用物理磁盘空间。
为了进一步讲清楚这两者的区别,下面举一个数据表来说明
新建学生表 Students(ID 数字,Name 文本,Tel 文本)暂时不添加除数据类型外的任何约束
分别运行下列SQL动作查询,插入4条记录
a) insert into Students(ID,Name) values(1,"张三")
b) insert into Students(ID,Name,Tel) values(2,"李四",Null)
c) insert into Students(ID,Name,Tel) values(3,"王五","3348912")
d) insert into Students(ID,Name,Tel) values(4,"陈六","")
运行选择查询
select ID,Name,Tel,IIf(IsNull(Tel),"Null",IIf(Tel="","''",Tel)) as Tel的实际存储值 from Students
返回下列记录
注意因为空字符串和Null值的外观看起来都是空白的,故我用表达式IIf(IsNull(Tel),"Null",IIf(Tel="","''",Tel)) 将Tel字段实际存储的值显示出来
查出电话为空值(Null)的记录
select * from Students where Tel is Null
查出电话不为为空值(Null)的记录
select * from Students where Tel is not Null
查出电话为空字符串的记录
select * from Students where Tel=""
查出有电话的记录
select * from Students where Tel is not Null and Tel<>""
通过上面的解释应该比较清楚空字符串与NUll值的区别了。
如果一定要确保有学生的电话资料,我们应在数据表设计视图将Tel字段的”必填字段“属性设置为”是“同时还要将”允许空字符串“属性设置为”否“,如果这样设置后上述四条 *** 作查询语句里只有c才能被执行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)