mysql sql中的一些问题,Null与空字符
mysql中的空值,NULL,空字符
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。这跟其他数据库的显示方式也是不同的。
一是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
平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解。注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效率的事情的发生。
eg:
ERROR 1048 (23000): Column 'c' cannot be null
+-----------+-----------+
| length(b) | length(c) |
+-----------+-----------+
| 2 | 0 |
| 0 | 0 |
| NULL | 0 |
| NULL | 0 |
| 4 | 2 |
+-----------+-----------+
5 rows in set (0.00 sec)
+----------+----------+
| count(b) | count(c) |
+----------+----------+
| 3 | 5 |
+----------+----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.07 sec)
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| testbb | CREATE TABLE `testbb` (
`a` int(11) NOT NULL,
`b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Query OK, 1 row affected, 1 warning (0.00 sec)
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'b' at row 1 |
+---------+------+----------------------------------------+
+---+---------------------+
| a | b |
+---+---------------------+
| 1 | 2014-08-15 14:32:10 |
| 2 | 0000-00-00 00:00:00 |
+---+---------------------+
2 rows in set (0.00 sec)
转载于:https://www.cnblogs.com/fnlingnzb-learner/p/6519731.html
mysql sql中的一些问题,Null与空字符相关推荐
- 空字符python_Python中的None与 NULL(即空字符)的区别详解
1.首先要了解Python的对象的概念: Python中,万物皆对象,所有的操作都是针对对象的,那什么是对象,5是一个int对象,'oblong'是一个str对象,异常也是一个对象,抽象一点是,人,猫 ...
- mysql 语句中 sum函数求和 null 变 0
在SQL语句中使用集合函数count(),返回结果肯定为非负整数,这也是用来判断数据有无的一个很有效的方法: 然后在用sum()进行集合相加的时候,如果sum()的对象没有记录,那么不会返回0,而返回 ...
- SQL中的空值、NULL以及类型转换那些坑
我们平常写SQL中遇到过滤空值或者NULL值的处理,尤其是在非关系型数据库中没有唯一键和默认值的约束要求,很容易出现NULL值或者空值.很多时候我们总是会出现困扰,到底是该使用=' ' 还是用 is ...
- Sql 中 不等于''与 NULL
SQL 中 [不等于]使用'<>',此时要注意此条件会将字段为null的数据也当做满足不等于的条件而将数据筛选掉. 要查出含有'null'只需将SQL 改为 :select * from ...
- python的none是什么-Python中的None与Null(空字符)的区别
首先了解python对象的概念 python中,万物皆对象,所有的操作都是针对对象的. 那什么是对象?5是一个int对象,"oblong'是一个str对象,异常也是一个对象,抽象一点是,人, ...
- 在MySQL中 NULL的含义是_null有哪些常见的意思?(如何正确理解 SQL 中的 NULL)
SELECT * FROM SOME_TABLEWHERE SOME_COLUMN IS NULL 或者这样写: 复制代码WHERE SOME_COLUMN = 1 正确的写法应该是第二种(WHER ...
- 下列有关mysql数据库中的null值_MySQL数据库中与 NULL值有关的问题
对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串"相同的事.情况并非如此.例如,下述语句是完全不同的: mysql> INSERT INTO my_ta ...
- mysql sql先后执行_MySQL中SQL语句执行顺序
(7) SELECT (8) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) ...
- mysql替换sql中rank函数_MySQL sql Rank()函数实现
一字符串类 Ø Concat函数:连接字符串 Ø Instr函数:返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) Ø 字符串大小写转换[upper().u ...
- mysql语句中怎么去重复_mysql中删除重复记录sql语句
在sql中我们经常会碰到有重复的一些数据,下面我来介绍在mysql中删除重复记录的多种方法,有需要的朋友可参考参考. 删除重复记录方法一: 1. 新建一个临时表 代码如下 复制代码 create ta ...
最新文章
- java修炼手册3.8_Java修炼手册
- Centos6.5环境中安装vsftp服务
- 认识Java中volatile关键字
- ipvs,ipvsadm的安装及使用
- 像聊天机器人一样的c语言程序,示例:聊天机器人
- 运行c_const 并不能加快 C 代码的运行速度?
- 【校招面试 之 C/C++】第33题 C++ 11新特性(四)之STL容器
- [HDU5739]Fantasia(圆方树DP)
- 那些盒模型在IE6中的BUG们,工程狮的你可曾遇到过?
- 编程基本功:作为程序员,你有过写优美代码的体验吗
- wps vba6.3 宏插件下载
- Android应用分类
- 执行python generate_tfrecord.py 出现 utf-8‘ codec can‘t decode
- 大数据的应用场景你知道哪些?
- Dracula PRO 2021 零售版
- Kali信息收集学习笔记
- abb机器人开机后加载模块_ABB机器人外部启动配置说明
- QQ空间小秘书 V1.30 贺岁最新版~~ 天空原创软件
- 解决电脑浏览器突然无法打开网页
- OpenCV人脸识别(3)提取面部特征
热门文章
- 机器学习知识体系 (强烈推荐)
- 微服务架构实战(二):使用API Gateway
- 张同学会是男版李子柒吗?
- 有钱人也开始消费降级了!
- windows操作系统_windows下用深度系统安装器安装深度操作系统实现双系统分别运行...
- HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)
- JavaWeb--HttpSession案例
- Axis2 生成客户端
- BZOJ:1816 [Cqoi2010]扑克牌 (贪心或二分答案)
- Activity的任务栈Task以及启动模式与Intent的Flag详解