数据库中字段设计与NULL值操作

简介:
    NULL值作为数据库中的一个特殊操作值,在日常的操作中要尤其留意。如果使用不当,会在某些特定条件下,导致SQL执行的结果集有错误。但是这种错误并非数据库本身造成的,而是在设计中对NULL处理不当的造成的。
      一次在检查数据库运行报告时看到了一句SQL,和相关的研发人员沟通后知道,其需要的功能是显示最新时间配置的某些数据。那么我通过一个小小的模型来再现这个问题。
      首先建立一个张名为larrytest的表,有两个字段C1和C2。建表SQL如下。
     
SQL>  create  table larrytest(c1 number  not  null,c2 date);

Table created

     然后向该表插入必要的数据:

SQL>  insert  into larrytest  values(100,to_date( '20100402', 'yyyymmdd'));

1 row inserted

SQL>  insert  into larrytest  values(101,to_date( '20100403', 'yyyymmdd'));

1 row inserted

SQL>  insert  into larrytest  values(102, null);

1 row inserted

SQL>  insert  into larrytest  values(103,to_date( '20100404', 'yyyymmdd'));

1 row inserted

SQL>  commit;

Commit complete

      这时根据需要,执行显示C2字段时间最新(后)的C1字段数据。原本是想得到2010年4月4日对应的数据103数据。但是看执行的结果。
 
SQL>  select c1  from ( select row_number()  over    ( order  by c2  desc) r,c1  from larrytest)  where r=1
    2    ;

                C1
         ----------
             102

      事实上却是102,即在排序中, NULL被倒序排在了第一个 ,而且无论在有什么新日期的数据被插入,这个NULL值对应的行都会永远排在最前面。就是说执行的SQL检索的结果集都会是错的,只要表中排序的字段有空(NULL)数据进入。多么灾难呀。
      对与数据库中表的设计还是遵循尽可能少的使用NULL字段,相对严谨的NOT NULL要求会避免不必要的错误出现。当然使用默认值有时是一个不错的选择。另外非空(NOT NULL)会带来较好的性能。

      空与非空是在数据库设计中是非常小的一个问题,但是如果不加注意,却会带来较大的问题。

本文转自Be the miracle!博客51CTO博客,原文链接http://blog.51cto.com/miracle/305150如需转载请自行联系原作者


Larry.Yue

相关文章
|
1月前
|
SQL 关系型数据库 MySQL
MySQL| 数据库的管理和操作【操作数据库和操作表】【附练习】
MySQL | 数据库的基本操作和表的基本操作【附练习】
|
1月前
|
关系型数据库 MySQL 数据库
往数据库的字段varchar 或datetime里存时间值
往数据库的字段varchar 或datetime里存时间值
67 0
|
1月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
113 0
|
1月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(一)
MySQL | 数据库的管理和操作【表的增删改查】
|
30天前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(二)
MySQL | 数据库的管理和操作【表的增删改查】(二)
|
1天前
|
SQL 数据库管理
sqlite语句order by两个字段同时排序处理
sqlite语句order by两个字段同时排序处理
9 0
|
2天前
|
SQL Java 关系型数据库
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
33 0
|
16天前
|
存储 SQL 数据库连接
连接并操作数据库:Python 数据库案例
数据库是一种用于存储和管理数据的工具,它以一种有组织的方式将数据存储在文件或内存中,以便于检索和处理。数据库系统通常使用 SQL(Structured Query Language)语言来进行数据的操作,包括数据的插入、查询、更新和删除等。
|
16天前
|
前端开发 数据库连接 数据库
ASP.NETMVC数据库完整CRUD操作示例
ASP.NETMVC数据库完整CRUD操作示例
19 0
|
22天前
|
SQL Oracle 关系型数据库
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
39 1

热门文章

最新文章