数据库中 ’’ 和 NULL的区别
MySQL的空值和NULL区别

MySQL的空值和NULL区别从本质上区别:1、空值不占空间2、null值占空间通俗的讲:空值就像是⼀个真空转态杯⼦,什么都没有,⽽null值就是⼀个装满空⽓的杯⼦,虽然看起来都是⼀样的,但是有着本质的区别。
例⼦:创建⼀个test表,colA是不可以存放null值的,colB是能存放null值的。
1 CREATE TABLE `test` (2 `colA` varchar(255) NOT NULL,3 `colB` varchar(255) DEFAULT NULL4 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;插⼊⼀个null值试试,会发⽣什么情况?1 INSERT INTO `test`(`colA`, `colB`) VALUES (NULL, NULL);//出现报错,原因是colA是不能插⼊null值。
那么如果两个字段同时插⼊空值,会怎么样。
1 INSERT INTO `test`(`colA`, `colB`) VALUES ('', '');插⼊成功,说明字段即使设置为null值的时候,是可以插⼊空值的---------------------------------------------------------------查询---------------------------------------------------------现在表⾥有三条数据接下来我们使⽤ is not null 和 <> 检索数据表⾥的数据1、使⽤IS NOT NULL 的查询1 SELECT * FROM `test` WHERE colA IS NOT NULL1 SELECT * FROM `test` WHERE colB IS NOT NULL结论:使⽤ IS NOT NULL 查询不会过滤空值,但是会过滤掉NULL。
C#中DBNull.Value和Null的用法和区别

C#中DBNull.Value和Null的⽤法和区别
DBNull.Value,, 是适⽤于向数据库的表中插⼊空值。
⽽ null,是指在程序中表⽰空引⽤。
或者对象为空。
就是没有实例化。
row[column]的值为DBNull.Value的话,⾄少说明它是从数据库中取到值了,对应了数据库中的空值;但如果row[column]的值为null的话,说明没有从数据库中取到值。
DBNull.Value是⼀个有着内存地址的具体类型的值,映射了数据库中的null值;⽽NULL则是空指向,不存在对应的内存地址。
任何对象赋值为null后,内存就释放了。
举个例⼦:从数据库读数据返回 DataTable 值。
var data = conn.ExecuteDataTable(sql, "Datatable");
如果A列在数据库中为 null 值
if( data.Rows[0]["A"] == null )这⾥就会报错。
正确的应该是 if(data.Rows[0]["A"] == DBNull.Value) 。
可以对 data.Rows[0]["A"] 添加监视可以看到类型为 Object[DBNull.Value]。
Access 2010数据库应用:Access 2010中空值(Null)和空字符串有何区别?

《Access2据表
Access 2010中空值(Null) 和空字符串有何区别?
2
《Access2010数据库应用》
Null值和空字符串是两种不同类型的空值, 空值Null表示某个字段的值为未知值,意味着 “不知道或不确定”,可以能是因为该字段的 值目前无法获得,或者字段不适用于某一特定 的记录。
4
《Access2010数据库应用》
3
而空符串("",不带空格的双引号)是长 度为0的字符串,表示某一个字段的值确实为 空,意味着“知道其没有值”。
例如在“读者信息”表中某位读者的移动 电话为Null 值,意味着“目前不知其移动电 话”,或者是没有手机,或者有手机但不知道 其号码;如果移动电话是空字符串,则意味着 “确定没有移动电话”。
SQL空和NULL的区别

SQL空和NULL的区别1.NULL意思为缺失的值(missing value).2.三值逻辑(three-valued-logic: TRUE,FALSE,UNKNOWN). 在SQL中有三个逻辑谓词:TURE,FALSE,UNKNOWN.在⼤多数的编程中只有TRUE和FALSE,⽽在SQL中独有UNKNOWN,之所有存在与NULL有关. ⽐如做如下⽐较: NULL>32;NULL=NULL;X+NULL>Y;NULL<>NULL.其计算结果均为UNKNOWN. 可能会有些迷惑,于⼆值逻辑不同(NOT TURE=FALUSE;NOT FALSE=TRUE)的是NOT UNKNOWN=UNKNOWN.3.UNKNOWN作为FALSE时的处理. 在SQL中查询过滤时(ON,WHERE,HAVING)会把UNKNOWN作为FALSE处理,这样就不会把计算值为UNKNOWN的⾏添加到下⼀个结果集中.4.UNKNOWN作为TRUE时的处理. 在CHECK约束中UNKNOWN却作为TRUE来处理.5.再谈NULL与NULL的⽐较,上⾯已经讲过(NULL=NULL;NULL<>NULL),即NULL与NULL的⽐较均为UNKNOWN. 但是对于UNIOUE约束,集合操作(如UNION,EXCEPT),排序,分组时,NULL与NULL为认为是等值的.关于SQL Server的Null值的⽐较运算的。
⼀般情况下我们查询空值或者⾮空值的时候,⽤的是is null/is not null,⽽很少⽤=/<>。
但是在我的这个程序中,没有⽤is这样的关键字,⽽是⽤=/<>这样的⽐较元算符号,这就碰到了⼀些问题。
问题起源于⼀个Web查询页⾯,因为问题⽐较复杂的,所以简化⼀下来说明。
在页⾯上⽤户可以⾃由选择数据表的某些字段,填写该字段的查询条件,先是选择⽐较运算符号(=,<>等),然后填写值。
数据库技术三级考试知识点总结

数据库技术三级考试知识点总结一、数据库基础。
1. 数据库系统概述。
- 数据库(DB)、数据库管理系统(DBMS)和数据库系统(DBS)的概念。
数据库是长期存储在计算机内、有组织、可共享的数据集合;DBMS是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据;数据库系统是由数据库、数据库管理系统、应用程序、数据库管理员(DBA)等组成的人机系统。
- 数据库系统的特点,如数据结构化(整体结构化,数据不再针对某一应用,而是面向全组织)、数据的共享性高、冗余度低且易扩充、数据独立性高(包括物理独立性和逻辑独立性)等。
2. 数据模型。
- 概念模型:用于信息世界的建模,是现实世界到机器世界的一个中间层次。
常用的概念模型是实体 - 联系模型(E - R模型),其中包括实体(客观存在并可相互区别的事物)、属性(实体所具有的某一特性)和联系(实体之间的联系有一对一、一对多和多对多等类型)。
- 数据模型的组成要素:数据结构(描述数据库的组成对象以及对象之间的联系)、数据操作(对数据库中各种对象的实例允许执行的操作的集合,包括操作及有关的操作规则)和数据的完整性约束条件(一组完整性规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容)。
- 常见的逻辑数据模型:- 层次模型:用树形结构表示实体及其之间的联系,有且只有一个根结点,根结点以外的其他结点有且只有一个父结点。
- 网状模型:用网状结构表示实体及其之间的联系,允许一个以上的结点无双亲,一个结点可以有多于一个的双亲。
- 关系模型:以二维表的形式组织数据,关系模型中的数据结构是关系(二维表),关系操作包括查询(选择、投影、连接等)和更新(插入、删除、修改)操作,关系的完整性约束包括实体完整性(主关键字不能取空值)、参照完整性(外键要么取空值,要么取对应主键的值)和用户定义的完整性。
3. 数据库系统结构。
mysql null判断函数

mysql null判断函数MySQL中的NULL判断函数是用来判断一个字段是否为NULL值的函数。
在MySQL中,NULL表示一个字段的值为空,即没有值。
在数据库中,NULL并不等同于0或空字符串,它表示缺少一个实际的值。
在MySQL中,我们经常需要对字段进行NULL值的判断,以便进行相应的处理。
下面将介绍一些常用的MySQL NULL判断函数。
1. IS NULL函数IS NULL函数用于判断一个字段是否为NULL值。
使用该函数时,如果字段的值为NULL,则返回true;否则,返回false。
例如,判断一个字段col是否为NULL可以使用以下语句:```SELECT col IS NULL FROM table;```2. IS NOT NULL函数IS NOT NULL函数用于判断一个字段是否不为NULL值。
使用该函数时,如果字段的值不为NULL,则返回true;否则,返回false。
例如,判断一个字段col是否不为NULL可以使用以下语句:```SELECT col IS NOT NULL FROM table;```3. IFNULL函数IFNULL函数用于判断一个字段是否为NULL值,并在字段为NULL 时返回指定的默认值。
使用该函数时,如果字段的值为NULL,则返回默认值;否则,返回字段的值。
例如,判断一个字段col是否为NULL,并在字段为NULL时返回0可以使用以下语句:```SELECT IFNULL(col, 0) FROM table;```4. COALESCE函数COALESCE函数用于从多个字段中选择第一个非NULL值。
使用该函数时,它会按顺序检查每个字段的值,返回第一个非NULL值。
例如,从字段col1、col2和col3中选择第一个非NULL值可以使用以下语句:```SELECT COALESCE(col1, col2, col3) FROM table;```5. NULLIF函数NULLIF函数用于将两个字段的值进行比较,如果相等则返回NULL;否则,返回第一个字段的值。
空值和空字符串

空值和空字符串
在编程和数据库中,空值(NULL)和空字符串('')是两个不同的概念。
空值是一种特殊的数据值,表示没有明确的值或缺失值。
它不同于空字符串,空字符串是一个明确的字符串,它包含零个字符。
在编程中,空值通常用于表示变量或对象没有被初始化或没有被赋值。
例如,在某些编程语言中,当一个变量没有被赋值时,它可能被默认为空值。
而空字符串则是一个明确的字符串,它可以被赋值给变量或作为参数传递给函数。
在数据库中,空值和空字符串也有不同的含义。
空值通常用于表示某个列中没有值,而空字符串则表示一个明确的空字符串值。
在数据库查询中,对空值和空字符串的处理方式也可能不同。
需要注意的是,在具体的编程语言或数据库系统中,对空值和空字符串的处理方式可能会有所差异。
因此,在使用时需要根据具体情况进行处理。
总而言之,空值和空字符串是两个不同的概念,它们在编程和数据库中具有不同的含义和用法。
理解它们之间的区别对于正确处理数据和进行编程操作非常重要。
oracle 中的空 值技巧

漫谈oracle 中的空值---- 在数据库中,空值用来表示实际值未知或无意义的情况。
在一个表中,如果一行中的某列没有值,那么就称它为空值(NULL)。
任何数据类型的列, 只要没有使用非空(NOT NULL)或主键(PRIMARY KEY)完整性限制,都可以出现空值。
在实际应用中,如果忽略空值的存在,将会造成造成不必要的麻烦。
---- 例如,在下面的雇员表(EMP)中,雇员名(ENAME)为KING 的行,因为KING 为最高官员(PRESIDENT),他没有主管(MGR),所以其MGR 为空值。
因为不是所有的雇员都有手续费(COMM),所以列COMM 允许有空值,除300、500、1400、0 以外的其它各行COMM 均为空值。
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---- -------- -------- --------- -------- ------ ---------7369 SMITH CLERK 7902 17-DEC-80 800 207499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 307521 WARD SALESMAN 7698 22-FEB-81 1250 500 307566 JONES MANAGER 7839 02-APR-81 2975 207654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 307698 BLAKE MANAGER 7839 01-MAY-81 2850 307782 CLARK MANAGER 7839 09-JUN-81 2450 107788 SCOTT ANALYST 7566 09-DEC-82 3000 207839 KING PRESIDENT 17-NOV-81 5000 107844 TURNER SALESMAN 7698 08-SEP-81 1500 0 307876 ADAMS CLERK 7788 12-JAN-83 1100 207900 JAMES CLERK 7698 03-DEC-81 950 307902 FORD ANALYST 7566 03-DEC-81 3000 207934 MILLER CLERK 7782 23-JAN-82 1300 10---- 本文将以上述EMP 表为例,具体讨论一下空值在日常应用中所具有的一些特性。
数据库符号表

数据库符号表
数据库符号表通常指的是数据库中用于表示数据和数据关系的符号或标记的集合。
这些符号可以用来表示数据类型、关系、约束、函数等。
符号表可以是可视化的,如 E-R 图中的实体-关系模型,也可以是文本格式的,如 SQL 语句中的语法元素。
在数据库设计中,符号表是一种非常重要的工具,用于描述和组织数据库的结构和语义。
通过符号表,开发人员可以更直观地理解和管理数据库的复杂性,并确保数据的完整性和一致性。
常见的数据库符号表包括:
1. 数据类型符号:表示数据元素的类型,如整数、字符串、日期等。
2. 关系符号:表示表之间的关系,如主键-外键关系、一对一关系、一对多关系等。
3. 约束符号:表示数据元素的约束条件,如唯一性约束、非空约束等。
4. 函数符号:表示数据处理的函数,如聚合函数、转换函数等。
5. 视图符号:表示数据库中的视图,用于简化复杂的查询操作。
这些符号可以根据具体的数据库管理系统有所不同,但它们通常都是为了方便开发人员理解和操作数据库而设计的。
空值与NULL的区别

空值与NULL的区别附:左连接+右连接+内连接空值与NULL的区别 我们先来理解mysql中空值与NULL的区别是什么吧 ⼀些刚刚接触MySQL的孩⼦,经常会错误的认为NULL与空字符串’ ’是相同的。
这看似是⼀件不重要的事情,但是在MySQL中,这两者是完全不同的。
NULL是指没有值,⽽”则表⽰值是存在的,只不过是个空值。
这就相当于⼚⼦给职⼯分房⼦,⼀共只有⼀套,⽼张和⽼李都想要,可是经理告诉⽼张,下次有您的房⼦,可是⽼李压根就没⼈搭理他。
所以⽼张的房⼦是“空”的,因为这是空⽩⽀票,不过毕竟经理张⼝了,⽽⽼李的房⼦就是NULL的,因为根本就没有⼈考虑过他。
⼀些根本不懂空值和NULL有什么区别,误导初学者。
所谓的NULL就是什么都没有,连都没有,在字符串中是结束符,但是在物理内存是占空间的,等于⼀个字节,⽽NULL 就是连这⼀个字节都没有。
在数据库⾥是严格区分的,任何数跟NULL进⾏运算都是NULL, 判断值是否等于NULL,不能简单⽤=,⽽要⽤IS关键字, Mysql3.23.0或以后⽀持⽤ <=> ⽤来⽐较两个NULL值是否相等, 即 select * from table where id <=> NULL. 为什么会出现NULL?这是来源于数据库的左右连接,不是凭空想出来的(下⾯有脑补环节)。
⽐如: A(ID, Name), B(ID, Address) 1, Name1 1, Shanghai 2, Name2 3, Beijing 当A左连接B则得到: 1, Name1, Shanghai 2, Name2, NULL 当A右连接B则得到: 1, Name1, Shanghai 3, NULL, Beijing 数据库的字段ID设为NOT NULL, 仅仅说明该字段不能为NULL, 也就是说只有在 INSERT INTO table(ID) VALUES(NULL); 这种情况下数据库会报错,⽽ INSERT INTO table(ID) VALUES( ‘ ‘); 这不能说明是NULL, 数据库系统会根据ID设的缺省值填充,或者如果是⾃增字段就⾃动加⼀ 等缺省操作。
null和空的区别

null和空的区别python中None和Null的区别⾸先了解python对象的概念python中,万物皆对象,所有的操作都是针对对象的。
那什么是对象?5是⼀个int对象,‘oblong’是⼀个str对象,异常也是⼀个对象,抽象⼀点是,⼈,猫,够也是⼀个对象那对于⼀个对象,它就有包括两⽅⾯的特征:属性:去描述它的特征⽅法:它所具有的⾏为所以,对象=属性+⽅法(其实⽅法也是⼀种属性,⼀种区别于数据属性的可调⽤属性)类:把具有相同属性和⽅法的对象就可以归为⼀类,即class。
使⽤⼀个类可以创建多个对象实例,即⼈,猫,狗都属于哺乳动物类。
类是对象的抽象化,对象是类的实例化。
类不代表具体的事物,⽽对象表⽰具体的事物类也是有属性和⽅法的。
数据类型也是对象实际上Pyhton在⾯向对象程序设计时,才会有对象这个概念,⽽在⾯向过程型程序设计时,我们讨论最多的就是数据类型。
Python提供的基本数据类型主要有:布尔类型、整型、浮点型、字符串、列表、元组、集合、字典等。
整个数据类型也可以看做是⼀个”类“ 。
每⼀种数据类型都是⼀个对象,也具有其⾃⼰的属性和⽅法了解以上概念,就不难理解None 与Null的区别1)是不同的数据类型In[3]: type(None)Out[3]: NoneType表⽰该值是⼀个空对象,空值是Python⾥⼀个特殊的值,⽤None表⽰。
None不能理解为0,因为0是有意义的,⽽None是⼀个特殊的空值。
可以将None赋值给任何变量,也可以给None值变量赋值In[4]: type('')Out[4]: str字符型2)判断的时候均是False,没有打印a = Noneif a:print(1)b = ''if b:print(1)3)属性不同使⽤dir()函数返回参数的属性、⽅法列表。
如果参数包含⽅法dir(),该⽅法将被调⽤。
如果参数不包含dir(),该⽅法将最⼤限度地收集参数信息。
SQL中空值与NULL区别

经过研究与分析 发现原因如下:
一. 空值在SQL中不占内存空间,而NULL值会分配内存空间
二.SQL中Count()求和,对NULL值会自动忽略而空值会记录一笔资料.
CREATE TABLE #temp ( name VARCHAR(50) )
填充三条资料 如下:
INSERT INTO #temp VALUES ( NULL ) INSERT INTO #temp VALUES ( 'Tom' ) INSERT INTO #temp VALUES ( '' )
使用如下语法查询
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 人都有过这样的问题吧 在SQL中填充空值与NULL有什么区别
现在我以一个实例给大家分享一下自己的想法 恳请大家给予批评也指正 谢谢
创建一个监时表
NULL,0,00的区别

NULL,0,00的区别如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是⼀样的,只不过表现的形式不⼀样:1、NULL; NULL 即空指针,在C和C++中的形式不⼀样,msdn上有如下的内容那个:#if !defined(NULL)&&defined(__NEEDS_NULL)#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endifNULL 在c中⽤(void*)0表⽰,在c++中⽤0表⽰。
2、'\0':'\0'表⽰字符串结束,它在ASCII中的值为0(数值0,⾮字符‘0’)所以在数值上NULL,'\0',0是⼀样的,都是0,但'0'就不同了,在ASCII码中编码为48,所以字符0和上述三个值不同。
在内存中NULL 和'\0' 和'0'都是⼀个8位的char类型,NULL 和'\0' 值⼀样,都是0,以数字⽅式读取就是0,以字符串读取时就是'\0'或者null(和编译器有关),⽽‘0’在内存存储着48,以字符读取就是'0',以数字读取就是48,⾄于0,可能是char ,int ,float,double等类型,但是值和NULL 和'\0'⼀样,都是0printf("%d",'0');==>48printf("%c",'0');==>0printf("%c",0);==>空(即NULL)printf("%d",0);==>0那么0+'0',0+'\0'分别是什么呢?printf("%c",0+'\0');==>空(NULL) 先转换成int,然后ASCII编码相加为0,%c输出,转换成char,所以输出NULLprintf("%d",0+'\0');==>0 先转换成int,然后ASCII编码相加为0,%d输出,不⽤转换,输出数字0printf("%c",0+'0');==>0printf("%d",0+'0');==>48。
mysql中null(IFNULL,COALESCE和NULLIF)相关知识点总结

mysql中null(IFNULL,COALESCE和NULLIF)相关知识点总结本⽂实例讲述了mysql中null(IFNULL,COALESCE和NULLIF)相关知识点。
分享给⼤家供⼤家参考,具体如下:在MySQL中,NULL值表⽰⼀个未知值,它不同于0或空字符串'',并且不等于它⾃⾝。
我们如果将NULL值与另⼀个NULL值或任何其他值进⾏⽐较,则结果为NULL,因为⼀个不知道是什么的值(NULL值)与另⼀个不知道是什么的值(NULL值)⽐较,其值当然也是⼀个不知道是什么的值(NULL值)。
然⽽我们通常,使⽤NULL值来表⽰数据丢失,未知或不适⽤的情况。
例如,潜在客户的电话号码可能为NULL,并且可以稍后添加。
所以我们创建表时,可以通过使⽤NOT NULL约束来指定列是否接受NULL值。
接下来,我们来创建⼀张leads表,并且以此为依据来具体了解下:CREATE TABLE leads (id INT AUTO_INCREMENT PRIMARY KEY,first_name VARCHAR(50) NOT NULL,last_name VARCHAR(50) NOT NULL,source VARCHAR(255) NOT NULL,email VARCHAR(100),phone VARCHAR(25));我们可以看出来,id是主键列,它不接受任何NULL值,然后first_name,last_name和source列使⽤NOT NULL约束,因此,不能在这些列中插⼊任何NULL值,⽽email和phone列则可接受NULL值。
所以,我们可以在insert语句中使⽤NULL值来指定数据丢失。
例如,以下语句将⼀⾏插⼊到线索表中。
因为电话号码丢失,所以使⽤NULL值:INSERT INTO leads(first_name,last_name,source,email,phone)VALUE('John','Doe','WebSearch','*******************',NULL);因为email列的默认值为NULL,可以按照以下⽅式在INSERT语句中省略电⼦邮件:INSERT INTO leads(first_name,last_name,source,phone)VALUES('Lily','Bush','Cold Calling','(408)-555-1234'),('David','William','Web Search','(408)-888-6789');完事如果我们要将列的值设置为NULL,可以使⽤赋值运算符(=)。
MySql里的IFNULL、NULLIF和ISNULL用法

MySql⾥的IFNULL、NULLIF和ISNULL⽤法今天⽤到了MySql⾥的isnull才发现他和MSSQL⾥的还是有点区别,现在简单总结⼀下:mysql中isnull,ifnull,nullif的⽤法如下:isnull(expr) 的⽤法:如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。
mysql> select isnull(1+1);-> 0mysql> select isnull(1/0);-> 1使⽤= 的null 值对⽐通常是错误的。
isnull() 函数同 is null⽐较操作符具有⼀些相同的特性。
请参见有关is null 的说明。
IFNULL(expr1,expr2)的⽤法:假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1;否则其返回值为 expr2。
IFNULL()的返回值是数字或是字符串,具体情况取决于其所使⽤的语境。
mysql> SELECT IFNULL(1,0);-> 1mysql> SELECT IFNULL(NULL,10);-> 10mysql> SELECT IFNULL(1/0,10);-> 10mysql> SELECTIFNULL(1/0,'yes');-> 'yes'IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通⽤”的⼀个,顺序为STRING、 REAL或INTEGER。
假设⼀个基于表达式的表的情况,或MySQL必须在内存储器中储存⼀个临时表中IFNULL()的返回值:CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;在这个例⼦中,测试列的类型为 CHAR(4)。
NULLIF(expr1,expr2) 的⽤法:如果expr1= expr2 成⽴,那么返回值为NULL,否则返回值为 expr1。
null的数据类型

null的数据类型Oracle的NULL代表的含义是不确定,那么不确定的东西也会有确定的数据类型吗?或者换个说法,NULL在Oracle中的默认数据类型是什么,下⾯就来探讨这个问题。
⾸先公布答案,NULL的默认类型是字符类型,具体是VARCHAR2还是CHAR,这个并不清楚,不过我个⼈怀疑是VARCHAR2的可能性更⼤⼀些。
我们知道⼀个字段不管是何种类型的,都可以插⼊NULL值,也就是说,NULL可以随意的转换为任意的类型。
⽽且,绝⼤部分的函数输⼊值为NULL,返回的结果也为NULL,这就阻⽌了我们通过函数的返回结果判断NULL的类型的企图。
我们最常⽤来分析数据的DUMP函数,这回也实效了:SQL> SELECT DUMP(NULL) FROM DUAL;DUMP----NULL⽽且试图通过CREATE TABLE AS来判定NULL的类型也是不可能的:SQL> CREATE TABLE T AS SELECT TNAME, NULL COL1 FROM TAB;CREATE TABLE T AS SELECT TNAME, NULL COL1 FROM TAB*ERROR 位于第 1 ⾏:ORA-01723: 不允许长度为 0 的列可能有⼈会产⽣疑问,既然各种⽅法的⾏不通,你是怎么得到NULL的默认类型的?也许还有⼈会想,既然NULL可以隐式的转化为任意的类型,讨论NULL 的默认类型是否有意义呢?下⾯就是我发现NULL的数据类型的例⼦,同时说明了如果不注意NULL的数据类型可能会出现的问题。
由于原始的SQL过于复杂,我这⾥给出⼀个简化的例⼦。
SQL> create table t (id number);表已创建。
SQL> insert into t values (1);已创建 1 ⾏。
SQL> insert into t values (8);已创建 1 ⾏。
关于NULL与NOT

关于NULL与NOT NULL一个字段如果设为“NULL”,表示如果这个字段的值为空时,自动插入一个“NULL”值。
一个字段如果设为“NOT NULL”,表示如果这个字段的值为空时,不自动插入“NULL”值(任其无值)。
所以,设为“NULL”的意思反而是“不能无值”(由MYSQL自动赋“NULL”值),而设为“N OT NULL”是“可以无值”。
其实要证明这一点很简单,建一个测试表,两个字段(VC型),一个设为“NULL”,一个设为“NOT NULL”,两个都插入空值,看看结果就明白了。
NULL 不是 '' 也不是 0。
你的字段定义为 not null,但是却赋值了一个 null,那么数据库系统会按照该字段类型选择一个默认的值放进去,比如 char 就是用空字符串。
但注意,空字符串其实已经是一个确定的值了,就是一个长度为 0 的字符串!至于 NULL 值,给你一个正确的理解:把 NULL 理解为 UNKNOWN。
主要意思是'不知道',就是它可能是任何值;另外一层意思是'信息缺失',比如某个存储姓名信息的字段值是 NULL,代表姓名信息缺失。
所以 NULL 值不是任意一个确定的值!举例来说,逻辑与/或运算会的吧?与运算:true and true = true, true and false = false, false and true = false, false and false = false[code]mysql> select true and null, false and null, null and null;+---------------+----------------+---------------+| true and null | false and null | null and null |+---------------+----------------+---------------+| NULL | 0 | NULL |+---------------+----------------+---------------+[/code]第一个 true and null,它的结果完全靠 null 确定。
数据库的几个概念:主键,外键,索引,唯一索引

数据库的几个概念:主键,外键,索引,唯一索引主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型;外键:定义数据表假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。
用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。
在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。
很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。
这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。
首先我们来创建 parts 表:CREATE TABLE parts (... 字段定义 ...,model VARCHAR(20) NOT NULL,... 字段定义 ...);接下来是Pc表:CREATE TABLE pc (... 字段定义 ...,cpumodel VARCHAR(20) NOT NULL,... 字段定义 ...};设置索引若要设置外键,在参照表(referencing table,即Pc表) 和被参照表(referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。
对Parts表:ALTER TABLE parts ADD INDEX idx_model (model);这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。
对Pc表也类似:ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);事实上这两个索引可以在创建表的时候就设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库中’’和NULL的区别
✧null不是对象,''是对象
●空字符串'',表示一个长度为零的字符串。
在存储上已经分配存储空间,但是
是空内容。
●空(NULL)值,表示没有赋过值,是空的,未知的,他不属于任何数据类型。
✧空(NULL) 值表示实际值未知或无意义的情况。
因为空值表示缺少数据,
所以空值和其它值没有可比性,即不能用等于、不等于、大于或小于和其它数值比较。
空值不同于空白或零值。
没有两个相等的空值。
比较两个空值或将空值与任何其它数值相比均返回未知,这是因为每个空值均为未知。
✧在写入数据的时候,空字符串' '也是一个确定的值,所以就算你定义了
NOT NULL 也可以被写入。
✧在定义中说,空(NULL)值不与任何值相等。
因此不能使用= null 做
判断。
在Sql语句中,唯一可以使用= null的就是update语句中的赋值语句,其他地方都不可以使用。
✧空(NULL)值的判断不能简单的用=或!= 只能使用IS (NOT)NULL
来判断.所以is not null 和!=null的结果是完全不同的.虽然!=null编译不会报错,但是没有人这样来判断某个字段为null
✧空字符串‘’的判断,要用='' 或者<>''。