mysqlnull和空的区别 mysql中的null值和空
mysql ifnull() 返回的仍然为空值null,怎么办?
->ifnull()
mysqlnull和空的区别 mysql中的null值和空
mysqlnull和空的区别 mysql中的null值和空
-> 1
你的第二个参数设置有误。
你可以这样试试:
MySQL ifnull()函数和nvl()函数类似,但是也有所不同,下面就为您详细介绍MySQLifnull()函数 ,希望可以让您对MySQL ifnull()函数有更深的认识。
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
mysql> select IFNULL(1,0);
mysql> select IFNULL(0,10);
-> 0
mysql> select IFNULL(1/0,10);
-> 10
mysql> select IFNULL(1/0,'yes');
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。
mysql> select IF(1>2,2,3);
-> 3
mysql> select IF(1<2,'yes','no');
mysql> select IF(strcmp('test','test1'),'yes','no');
-> 'no'
expr1作为整数值被计算,它意味着如果你正在测试浮点或字符串值,你应该使用一个比较作来做。
mysql> select IF(0.1,1,0);
-> 0
mysql> select IF(0.1<>0,1,0);
在上面的种情况中,IF(0.1)返回0,因为0.1被变换到整数值, 导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
个版本返回result,其中value=compare-value。第二个版本中如果个条件为真,返回result。如果没有匹配的result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。
mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END;
mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;
-> "true"
mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;
-> NULL
对于已存在的行,ifnull(参数0,参数1)函数对于参数0的值会进行判断。如果值为空,则返回参数1的值。
对于不存在的行,ifnull函数的结果总是null。
拿以下数据来举个例子:
|id|name|age|
|2 |小明 |7 |
|3 |小华 |null|
执行sql
select ifnull(age,0) from table_name where id=3;
将会返回0。
而执行sql
select ifnull(age,0) from table_name where id=4;
将会返回null。
要保证ifnull起作用,你必须保证你的查询结果是存在的。
select ifnull((select age from table_name where id=4),0);
mysql中一个数据表只可以定一个非空字段吗
创建表时可以使用 NOT NULL 关键字设置非空约束,具体的语法格式如下:
例 1
创建数据表 tb_dept4,指定部门名称不能为空,SQL 语句和运行结果如下所示。
mysql> CREATE TABLE tb_dept4
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) NOT NULL,
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_dept3;
+----------+-------------+------+-----+---------+-------+
+----------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.06 sec)
在修改表时添加非空约束
如果在创建表时忘记了为字段设置非空约束,也可以通过修改表进行非空约束的添加。
修改表时设置非空约束的语法格式如下:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名>
例 2
修改数据表 tb_dept4,指定部门位置不能为空,S如果一定要求sql有非空返回值,可以使用子查询:QL 语句和运行结果如下所示。
mysql> ALTER TABLE tb_dept4
-> CHANGE COLUMN location
Query OK, 0 rows affected (0.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept4;
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | NO | | NULL | |
删除非空约束
修改表时删除非空约束的语法规则如下:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;
mysql> ALTER TABLE tb_dept4
-> CHANGE COLUMN location
-> location VARCHAR(50) NULL;
Query OK, 0 rows affected (0.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC tb_dept4;
| Field | Type | Null | Key | Default | Extra |
| id | int(11) | NO | PRI | NULL | |
| name | varchar(22) | NO | | NULL | |
| location | varchar(50) | YES | | NULL | NULLIF(expr1,expr2) |
mysql中一个数据表只可以定一个非空字段参考以下原因
在MySQL中,可以在创建数据表时指定数据表的某个字段或某些字段的值不能为空。如果将某个字段或某些字段设置为非空约束条件,则在向数据表插入数据时,必须为这些字段指定相应的值,否则MySQL会报错。
mysql中一个数据表可以定一个非空字段,也可以定不连续的字段。
mysql中一个数据表只可以定一个非空字段吗?
如下:是的,方法如下,具体作步骤是,一抓住重点 二 围绕中心点 三 概括全部简单总结
mysql 怎么判断select 是否为空
如果参数不相等,则如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
<字段名> <数据类型> NOT NULL;IFNULL(expr1,expr2)
如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
SELECT ifnull(字段名,0) as 字段名 FROM 表名
SELECT if(字段名==NULL,0,字段名) as 字段名 FROM 表名
mysql 怎么样把空值或null查询出来
例 3null表示的含义是未知,即不知道有没有。 和‘’空字符串不等,因为空字符串相当于没有值。 null代表的是不知道有没有值。 所以在数据查询中如果字段默认值是null,想查询出不等于某个条件的一定要加上——字段名 is null 或者字段名 is not null来...
条件用 columnName = '' 3 rows in set (0.00 sec)or columnName is null
select from 表 where 列名=null or 列名=""
MySql判断是否为null或空字符串
-> "one"判断方法: if ISNULL(aBegBalRule) || LENGTH(trim(aBegBalRule))<1 THEN ELSE END IF; NULL值可能令人感到奇怪直到你习惯它。概念上,NULL意味着“没有值”或“未知值”,且它被看作与众不同的值。为了测试NULL,你不能使用算术比较 作符例如=、<或!=。为了说明它,试试下列查询: mysql> SELECT 1 = NULL, 1 <> NUIFNULL(NULL,10);LL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ 返回信鸽网顶部| NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+ 很显然你不能通过这些比较得到有意义的结果。相反使用IS NULL和IS NOT NULL作符: mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+ 请注意在MySQL中,0或 NULL意味着而其它值意味着真。布尔运算的默认真值是1。 返回信鸽网顶部对NULL的特殊处理即是在前面的章节中,为了决定哪个动物不再是活着的,使用death IS NOT NULL而不使用death != NULL的原因。 在GROUP BY中,两个NULL值视为相同。 执行ORDER BY时,如果运行 ORDER BY ... ASC,则NULL值出现在最前面,若运行ORDER BY ... DESC,则NULL值出现在面。 NULL作的常见错误是不能在定义为NOT NULL的列内插入0或空字符串,但事实并非如此。在NULL表示"没有数值"的地方有数值。
MySQL处理空值时需要注意的两个问题
修改数据表 tb_dept4,将部门位置的非空约束删除,SQL 语句和运行结果如下所示。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关键字
lishixinzhi/Article/pronull=空;gram/MySQL/201311/29455
mysql 为什么我设置一个表的字段not null,为什么还可以插空?
的用法:空格,空字符串("")和null是不同的,请检查插入的内容是不是null
-> location VARCHAR(50) NOT NULL;MYSQL没SQLSERVER那么严格,大部分时候插入空值是不会报错的。
varchar类型的字段设置not null后,不能存入null 但是可以存储一个"" 空字符串的
MySQL中有性约束的列能否为空
IF(expr1,expr2,expr3)键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。
你可以自己实验一下是否允许插入重复空值。
可以的例如:给mysql> create database dbtest;Query OK row affected ( sec)mysql> use dbtest;Database changedmysql> create table t_old > ( > id serial > content varchar( ) not null > `desc` varchar( ) not null) > engine innodb;Query OK rows affected ( sec)mysql> show create table t_old;+ + +| Table | Create Table |+ + +| t_old | CREATE TABLE `t_old` (`id` bigint( ) unsigned NOT NULL auto_increment `content` varchar( ) NOT NULL `desc` varchar( ) NOT NULL UNIQUE KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin |+ + + row in set ( sec)resource_name和resource_type添加联合约束ALTER TABLE table_name ADD UNIQUE KEY(resource_name, resource_type)。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是的 RDBMS (Relational Database Mament System,关系数据库管理系统) 应用软件。
EXAMPLE 存储引擎是一个不做任何事情的存根引擎。它的目的是作为 MySQL 源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE 存储引擎不支持编索引。
数据库建字段,默认值空和empty string有什么区别
|1 |小强 |8 |Empty String 插入(insert)时,可以不指定列,如果是默认值空会报 Field 'xxx' doesn't he a default value,太深入的我也不知道
别不是很大,不填存储时占很小很小的空白字节,而empty string存储为0个字节,应该是。
mysql学的不精,但null很tmp明显不等于空值。。。null是一个未确定的值,或者说你绝不可能使用一个变量来等于null
首先,要区分开
empty string=空字符串。可以了解为零字节长度的字符串。
另外,要注意一点,就是sql查询的时候要是空的字符串会查询出为空,要是null的话,会提示sql语句有错。
那这样的话,好像是数据库校对字符集的问题。。。
MySQL中两种快速创建空表的方式的区别
在MySQL中有两种方法
create table t_name select create tabl->e t_name like
种会取消掉原来表的有些定义 +----------+-------------+------+-----+----------+-------+且引擎是系统默认引擎
手册上是这么讲的 Some conversion of data types might occur For example the AUTO_INCREMENT attribute is not preserved and VARCHAR columns can bee CHAR columns
第二种就完全原表
先建立测试表:
种方式
mysql> create table t_select select from t_old where = ;Query OK rows affected ( sec)Records: Duplicates: Warnings: mysql> show create table t_select;+ + +| Table | Create Table + + +| t_select | CREATE TABLE `t_select` (`id` bigint( ) unsigned NOT NULL default `content` varchar( ) NOT NULL `desc` varchar( ) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin |+ + + row in set ( sec)
第二种方式
lishixinzhi/Article/program/MySQL/201311/29611
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。