山那边是海 发表于 2015-1-16 22:14:16

MYSQL教程之MySQL处置空值时你必要注重的两个成绩

用户时常会发现其实自己并不是第一个选用MySQL数据库的先驱者。”  MySQL数据库是一个基于布局化数据的开源数据库。SQL语句是MySQL数据库中中心言语。不外在MySQL数据库中实行SQL语句,必要当心两个圈套。
  圈套一:空值纷歧定为空
  空值是一个对照特别的字段。在MySQL数据库中,在分歧的情况下,空值常常代表分歧的寄义。这是MySQL数据库的一种特征。如在一般的字段中(字符型的数据),空值就是暗示空值。可是假如将一个空值的数据拔出到TimesTamp范例的字段中,空值就纷歧定为空。此时为呈现甚么情形呢(以下图)?
  

  我先创立了一个表。在这个表中有两个字段:User_id(其数据范例是int)、Date(其数据范例是TimesTamp)。如今往这个表中拔出一笔记录,个中往Date字段中拔出的是一个NULL空值。但是当我们查询时,其了局显现的倒是拔出纪录确当前工夫。这是怎样一回事呢?实在这就是在MySQL数据库中实行SQL语句时常常会碰到的一个圈套:空值纷歧定为空。在操纵时,明显拔出的是一个空值的数据,可是最初查询失掉的却不是一个空值。
  在MySQL数据库中,NULL关于一些特别范例的列来讲,其代表了一种特别的寄义,而不单单是一个空值。关于这些特别范例的列,列位读者次要是要记着两个。一个就是笔者下面举的TimesTamp数据范例。假如往这个数据范例的列中拔出Null值,则其代表的就是体系确当前工夫。别的一个是具有auto_increment属性的列。假如往这属性的列中拔出Null值的话,则体系会拔出一个正整数序列。而假如在其他数据范例中,如字符型数据的列中拔出Null的数据,则其拔出的就是一个空值。
  圈套二:空值纷歧定即是空字符
  在MySQL中,空值(Null)与空字符(’’)不异吗?谜底是不是定的。请人人先来看下图的演示。
  

  在统一个数据库表中,同时拔出一个Null值的数据和一个’’空字符的数据,然后使用Select语句举行查询。最初显现的了局如上图所示。明显其显现的了局是不不异的。从这个了局中就能够看出,空值不即是空字符。这就是在MySQL中实行SQL语句碰到的第二个圈套。在实践事情中,空值数据与空字符常常暗示分歧的寄义。数据库办理员能够依据实践的必要来举行选择。如关于德律风号码等字段,能够默许设置为空值(暗示基本不晓得对方的德律风号码)大概设置为空字符(暗示厥后作废了这个号码)等等。因为他们在数据库中会有分歧的体现情势,以是数据库办理员必要区分看待。笔者加倍喜好利用空值,而不是空字符。这次要是由于针对空值这个数据范例有几个对照特别的运算字符。假如某个字段是空字符,数据库中是使用字段称号来取代。相反,假如拔出的是空值,则间接显现的是NULL。这跟其他数据库的显现体例也是分歧的。
  一是ISNULL和ISNOTNULL关头字。假如要判别某个字段是不是含用空值的数据,必要利用特别的关头字。个中前者暗示这个字段为空,后者暗示这个字段为非空。在Select语句的查询前提中这两个关头字十分的有效。如必要查询一切德律风号码为空的用户(必要他们增补德律风号码信息),就能够在查询前提中到场isnotnull关头字。
  

  二是Count等统计函数,在空值上也有特别的使用。如如今必要统计用户信息表中有德律风号码的用户数目,此时就能够利用count函数、同时将德律风号码作为参数来利用。由于在统计过程当中,这个函数会主动疏忽空值的数据。此时统计出来的就是有德律风号码的用户信息。假如接纳的是空字符的数据,则这个函数会将其统计出来。以下图所示,统计方才创建的两笔记录时,体系统计的了局是1,而不是2。可见体系主动将Null值的数据疏忽失落了。
<Pstyle="TEXT-INDENT:2em">
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。

精灵巫婆 发表于 2015-1-19 05:52:46

从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。

冷月葬花魂 发表于 2015-1-25 10:57:42

只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。

老尸 发表于 2015-2-2 21:52:23

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

再见西城 发表于 2015-2-8 07:48:19

大侠们有推荐的书籍和学习方法写下吧。

兰色精灵 发表于 2015-2-25 01:58:48

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

再现理想 发表于 2015-3-7 15:43:18

原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。

不帅 发表于 2015-3-15 09:04:20

其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。

简单生活 发表于 2015-3-21 23:22:40

备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
页: [1]
查看完整版本: MYSQL教程之MySQL处置空值时你必要注重的两个成绩