精华内容
下载资源
问答
  • MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中,空值就不一定...

    陷阱一:空值不一定为空

    空值是一个比较特殊的字段。在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。这跟其他数据库的显示方式也是不同的。

    一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用空值的数据,需要使用特殊的关键字。其中前者表示这个字段为空,后者表示这个字段为非空。在Select语句的查询条件中这两个关键字非常的有用。如需要查询所有电话号码为空的用户(需要他们补充电话号码信息),就可以在查询条件中加入is not null关键字。

    二是Count等统计函数,在空值上也有特殊的应用。如现在需要统计用户信息表中有电话号码的用户数量,此时就可以使用count函数、同时将电话号码作为参数来使用。因为在统计过程中,这个函数会自动忽略空值的数据。此时统计出来的就是有电话号码的用户信息。如果采用的是空字符的数据,则这个函数会将其统计进去。统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可见系统自动将Null值的数据忽略掉了。

    判断NULL用is null  或者 is not null。 sql语句里可以用ifnull函数来处理

    判断空字符串‘’,要用 ='' 或者 <>''。sql语句里可以用if(col,col,0)处理,即:当col为true时(非null,及非'')显示,否则打印0

    展开全文
  • 要检查NULL,请使用IS NULL。对于空值,您需要检查一个空字符串。现在,我们将看到一个示例。让我们首先创建一个表-mysql>createtableDemoTable691(PlayerIdintNOTNULLAUTO_INCREMENTPRIMARYKEY,...

    要检查NULL,请使用IS NULL。对于空值,您需要检查一个空字符串。现在,我们将看到一个示例。

    让我们首先创建一个表-mysql> create table DemoTable691(

    PlayerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,

    PlayerName varchar(100),

    PlayerScore int

    );

    使用插入命令在表中插入一些记录-mysql> insert into DemoTable691(PlayerName,PlayerScore) values('Robert',56);

    mysql> insert into DemoTable691(PlayerName,PlayerScore) values('David',89);

    mysql> insert into DemoTable691(PlayerName,PlayerScore) values('',98);

    mysql> insert into DemoTable691(PlayerName,PlayerScore) values(null,71);

    使用select语句显示表中的所有记录-mysql> select *from DemoTable691;

    这将产生以下输出-+----------+------------+-------------+

    | PlayerId | PlayerName | PlayerScore |

    +----------+------------+-------------+

    |        1 | Robert     | 56          |

    |        2 | David      | 89          |

    |        3 |            | 98          |

    |        4 | NULL       | 71          |

    +----------+------------+-------------+

    4 rows in set (0.00 sec)

    以下是MySQL查询,以一起显示空值和NULL值-mysql> select *from DemoTable691 where PlayerName IS NULL OR PlayerName='';

    这将产生以下输出-+----------+------------+-------------+

    | PlayerId | PlayerName | PlayerScore |

    +----------+------------+-------------+

    |        3 |            |          98 |

    |        4 | NULL       |          71 |

    +----------+------------+-------------+

    2 rows in set (0.00 sec)

    展开全文
  • 日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符。空字符('')和空值(null)表面上看都是空,其实存在一些差异:定义:空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是...

    日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符。

    空字符('')和空值(null)表面上看都是空,其实存在一些差异:

    定义:

    空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是占用存储空间的

    空字符串('')的长度是0,是不占用空间的

    通俗的讲:

    空字符串('')就像是一个真空转态杯子,什么都没有。

    空值(NULL)就像是一个装满空气的杯子,含有东西。

    二者虽然看起来都是空的、透明的,但是有着本质的区别。

    区别:

    在进行count()统计某列时候,如果用null值系统会自动忽略掉,但是空字符会进行统计。

    不过count(*)会被优化,直接返回总行数,包括null值。

    判断null用is null或is not null,SQL可以使用ifnull()函数进行处理;判断空字符用=''或者!=''进行处理。

    对于timestamp数据类型,插入null值会是当前系统时间;插入空字符,则出现0000-00-00 00:00:00

    实例:

    新建一张表test_ab,并插入4行数据。

    CREATE TABLE test_ab (id int,

    col_a varchar(128),

    col_b varchar(128) not null

    );

    insert test_ab(id,col_a,col_b) values(1,1,1);

    insert test_ab(id,col_a,col_b) values(2,'','');

    insert test_ab(id,col_a,col_b) values(3,null,'');

    insert test_ab(id,col_a,col_b) values(4,null,1);

    mysql> select * from test_ab;

    +------+-------+-------+

    | id | col_a | col_b |

    +------+-------+-------+

    | 1 | 1 | 1 |

    | 2 | | |

    | 3 | NULL | |

    | 4 | NULL | 1 |

    +------+-------+-------+

    4 rows in set (0.00 sec)

    首先比较一下,空字符('')和空值(null)查询方式的不同:

    mysql> select * from test_ab where col_a = '';

    +------+-------+-------+

    | id | col_a | col_b |

    +------+-------+-------+

    | 2 | | |

    +------+-------+-------+

    1 row in set (0.00 sec)

    mysql> select * from test_ab where col_a is null;

    +------+-------+-------+

    | id | col_a | col_b |

    +------+-------+-------+

    | 3 | NULL | |

    | 4 | NULL | 1 |

    +------+-------+-------+

    2 rows in set (0.00 sec)

    由此可见,null和''的查询方式不同。而且比较字符 ‘=’’>’ ‘’不能用于查询null,

    如果需要查询空值(null),需使用is null 和is not null。

    第二种比较,参与运算

    mysql> select col_a+1 from test_ab where id = 4;

    +---------+

    | col_a+1 |

    +---------+

    | NULL |

    +---------+

    1 row in set (0.00 sec)

    mysql> select col_b+1 from test_ab where id = 4;

    +---------+

    | col_b+1 |

    +---------+

    | 2 |

    +---------+

    1 row in set (0.00 sec)

    由此可见,空值(null)不能参与任何计算,因为空值参与任何计算都为空。

    所以,当程序业务中存在计算的时候,需要特别注意。

    如果非要参与计算,需使用ifnull函数,将null转换为''才能正常计算。

    第三种比较,统计数量

    mysql> select count(col_a) from test_ab;

    +--------------+

    | count(col_a) |

    +--------------+

    | 2 |

    +--------------+

    1 row in set (0.00 sec)

    mysql> select count(col_b) from test_ab;

    +--------------+

    | count(col_b) |

    +--------------+

    | 4 |

    +--------------+

    1 row in set (0.00 sec)

    由此可见,当统计数量的时候。空值(null)并不会被当成有效值去统计。

    同理,sum()求和的时候,null也不会被统计进来,这样就能理解,

    为什么null计算的时候结果为空,而sum()求和的时候结果正常了。

    结论:

    所以在设置默认值的时候,尽量不要用null当默认值,如果字段是int类型,默认为0;如果是varchar类型,默认值用空字符串('')会更好一些。带有null的默认值还是可以走索引的,只是会影响效率。当然,如果确认该字段不会用到索引的话,也是可以设置为null的。

    在设置字段的时候,可以给字段设置为 not null ,因为 not null 这个概念和默认值是不冲突的。我们在设置默认值为('')的时候,虽然避免了null的情况,但是可能存在直接给字段赋值为null,这样数据库中还是会出现null的情况,所以强烈建议都给字段加上 not null。

    类似这样的:

    mysql> alter table test_ab modify `col_b` varchar(128) NOT NULL DEFAULT '';

    Query OK, 0 rows affected (0.00 sec)

    Records: 0 Duplicates: 0 Warnings: 0

    mysql> desc test_ab;

    +-------+--------------+------+-----+---------+-------+

    | Field | Type | Null | Key | Default | Extra |

    +-------+--------------+------+-----+---------+-------+

    | id | int | YES | | NULL | |

    | col_a | varchar(128) | YES | | NULL | |

    | col_b | varchar(128) | NO | | | |

    +-------+--------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    尽管在存储空间上,在索引性能上可能并不比空字符差,但是为了避免其身上特殊性,给项目带来不确定因素,因此建议默认值不要使用 NULL。

    ----by 钢铁 648403020@qq.com 09.30.2020

    展开全文
  • 使用SETWHERE将空值转换为NULL很容易。让我们首先创建一个表-mysql>createtableDemoTable1315->(->CountryNamevarchar(10)->);使用insert命令在表中插入一些记录。我们也在这里设置了一些空值-mysql&...

    使用SET和WHERE将空值转换为NULL很容易。让我们首先创建一个表-mysql> create table DemoTable1315

    -> (

    -> CountryName varchar(10)

    -> );

    使用insert命令在表中插入一些记录。我们也在这里设置了一些空值-mysql> insert into DemoTable1315 values('US');

    mysql> insert into DemoTable1315 values('');

    mysql> insert into DemoTable1315 values('UK');

    mysql> insert into DemoTable1315 values('');

    mysql> insert into DemoTable1315 values('');

    mysql> insert into DemoTable1315 values('AUS');

    使用select语句显示表中的所有记录-mysql> select *from DemoTable1315;

    输出结果+-------------+

    | CountryName |

    +-------------+

    | US          |

    |             |

    | UK          |

    |             |

    |             |

    | AUS         |

    +-------------+

    6 rows in set (0.00 sec)

    这是将空值转换为NULL的查询-mysql> update DemoTable1315 set CountryName=NULL where CountryName='';

    Rows matched: 3 Changed: 3 Warnings: 0

    让我们再次检查表记录-mysql> select *from DemoTable1315;

    输出结果+-------------+

    | CountryName |

    +-------------+

    | US          |

    | NULL        |

    | UK          |

    | NULL        |

    | NULL        |

    | AUS         |

    +-------------+

    6 rows in set (0.00 sec)

    展开全文
  • MySQL数据库中,在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段...
  • MySQL空值和NULL区别

    2021-04-19 05:41:05
    从本质上区别:1、空值不占空间2、null值占空间通俗的讲:空值就像是一个真空转态杯子,什么都没有,而null值就是一个装满空气的杯子,虽然看起来都是一样的,但是有着本质的区别。例子:创建一个test表,colA是不...
  • 1.查询空值 SELECT * FROM `bill` WHERE buy_day IS NULL 查询结果: 2.查询空值 SELECT * FROM `bill` WHERE buy_day IS NOT NULL 查询结果:
  • MySQL IS NULL空值查询

    2021-01-19 00:54:41
    MySQL 提供了IS NULL关键字,用来判断字段的值是否为空值(NULL)。空值不同于 0,也不同于空字符串。如果字段的值是空值,则满足查询条件,该记录将被查询出来。如果字段的值不是空值,则不满足查询条件。使用 IS ...
  • 前言最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值。以下带来示例给大家进行讲解。建表create table test (colA varchar(10) not ...
  • MySQL 多字段组合唯一索引中,有一列字段可能会出现空值业务场景:**用户行为记录表,**防止用户数据重复插入表中。也防止尴尬。。。直接上SQL,已优化CREATE TABLE `user_behavior` (`behavior_id` bigint(20) NOT ...
  • 让我们首先创建一个表-mysql>createtableDemoTable839(StudentFirstNamevarchar(100),StudentLastNamevarchar(100));使用插入命令在表中插入一些记录-mysql>insertintoDemoTable839values('Chris','Brown');...
  • 本篇文章给大家带来的内容是关于MySQL空值和NULL有什么区别?(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。从本质上区别:1、空值不占空间2、null值占空间通俗的讲:空值就像是一个...
  • 从现实项目需求出发;有一张城市表;里面有北京、上海、广州、...mysql>select*frombjy_order;+----+------+|id|city|+----+------+|1|北京||2|上海||3|广州||4|河北||5|天津||6|河南|+----+------+要求是让上海...
  • mysqlnull 空值排序

    2021-01-19 05:02:01
    【sqlserver】:sqlserver 认为 null 最小。升序排列:null 值默认排在最前。要想排后面,则:order by case when col is null then 1 else 0 end ,col降序排列:null 值默认排在最后。要想排在前面,则:orderby ...
  • 背景:今天因为MySQLNULL和空值的区分错误,解决一个很简单的数据库查询问题花了一个小时,很是懊悔,所以开始正文吧!区别详细:1 空值和NULL为两个概念空值MySQL中不占空间,NULL在mysql中占有空间。2 空值不...
  • mysql-从查询中过滤NULL

    千次阅读 2021-03-14 22:04:37
    在下面的查询中,我只想看到风险列中没有NULL值的行SELECT table1.id, table1.name,CASEWHEN table1.event = 'r' AND table1.name = 'jones' THEN 'very high'WHEN table1.event = 't' AND table1.name = 'smith' ...
  • 前言最近发现带的小伙伴写sql对于空值的判断方法不正确,导致程序里面的数据产生错误,在此进行一下整理,方便大家以后正确的判断空值。以下带来示例给大家进行讲解。建表create table test (colA varchar(10) not ...
  • mysql 查询判断空值

    千次阅读 2021-01-18 23:27:06
    car_area为空串的时候显示 0 否则显示1 case when 字段=条件 then 赋值 else 赋值 end select IFNULL(b.tobranchID,9999) from t_base_task b 当tobranchID为null时显示 9999 否则显示数据库值 IFNULL(字段,赋值...
  • 在详细讲解null之前,我们先看一个例子表数据如下:3306>select * from t1;+------+-------+| id | name |+------+-------+| 1 | chen || 2 | zhang || 3 | NULL |+------+-------+3 rows in set (0.00 sec)然后...
  • MySQL数据库中空值null空字符串("")的区别,你不会不知道吧!一、空值null空字符串("")二、区别2.1占用空间区别2.2插入/查询方式区别2.3COUNT IFNULL函数2.4索引字段说明三、总结 一、空值null...
  • 日常开发中,一般都会涉及到数据库增删改查,那么不可避免会遇到Mysql中的NULL和空字符。空字符('')和空值(null)表面上看都是空,其实存在一些差异:定义:空值(NULL)的长度是NULL,不确定占用了多少存储空间,但是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,140
精华内容 20,456
关键字:

mysql查询空值和null

mysql 订阅