찾다
当主键碰到NULLJun 07, 2016 pm 02:58 PM
nulloracle데이터 베이스

主键和Null看似没有多大的关系,因为一般的主键设置都是not null,但是把两者结合起来,会有很多意想不到的情况,说是意想不到是因

主键和Null看似没有多大的关系,因为一般的主键设置都是not null,但是把两者结合起来,会有很多意想不到的情况,说是意想不到是因为结果不在预期范围,但是如果明白了基本的原理,整个过程又在情理之中。

我们先来演示一下问题。

首先创建一个表,创建唯一性索引。

SQL> conn n1/n1
 Connected.
 SQL>
 SQL> select*from cat;

no rows selected

SQL> create table test(x number,y number);

Table created.

SQL> create unique index ind_test on test(x,y);

Index created.

SQL> insert into test values(1,2);

1 row created.
再次插入重复的数据,这个肯定会抛错是毫无疑问的。

SQL> insert into test values(1,2);
 insert into test values(1,2)
 *
 ERROR at line 1:
 ORA-00001: unique constraint (N1.IND_TEST) violated

然后我们开始测试null相关的场景。
SQL> insert into test values(1,null);

1 row created.

SQL> insert into test values(null,1);

1 row created.
插入两个Null值,也是可以的。

SQL> insert into test values(null,null);

1 row created.
再次插入两个null值,还是可以的。
SQL> insert into test values(null,null);

1 row created.
但是反过来再次插入1,null的时候就抛错了。

SQL> insert into test values(1,null);
 insert into test values(1,null)
 *
 ERROR at line 1:
 ORA-00001: unique constraint (N1.IND_TEST) violated

同理,null,1的场景也是如此。
SQL> insert into test values(null,1);
 insert into test values(null,1)
 *
 ERROR at line 1:
 ORA-00001: unique constraint (N1.IND_TEST) violated

再次插入两个null值。
SQL> insert into test values(null,null);

1 row created.
查看表test中的数据,如下:

SQL> select *from test;

        X          Y
 ---------- ----------
          1          2
          1
                    1

 


 6 rows selected.
可以看到有6行。null值列看不到任何显示。
 为了标识,我们打印出rownum来。

SQL> select rownum,x,y from test;

    ROWNUM          X          Y
 ---------- ---------- ----------
          1          1          2
          2          1
          3                    1
          4
          5
          6

6 rows selected.
测试完了null值相关的,我们来看看空串''的情况。
 插入''的时候就会抛错。

SQL> insert into test values(1,'');
 insert into test values(1,'')
 *
 ERROR at line 1:
 ORA-00001: unique constraint (N1.IND_TEST) violated

插入两个空串,和null的效果是一样的。
SQL> insert into test values('','');

1 row created.
 null和空串组合,也没有问题。

SQL> insert into test values(null,'');

1 row created.

SQL> insert into test values('','');

1 row created.
再次查看数据,null值的数据行明显增多。

SQL> select rownum,x,y from test;

    ROWNUM          X          Y
 ---------- ---------- ----------
          1          1          2
          2          1
          3                    1
          4
          5
          6
          7
          8
          9

9 rows selected.

我们可以再进一步,查看null值的长度,使用length()
 SQL> select rownum,x,length(x),y,length(y) from test;

    ROWNUM          X  LENGTH(X)          Y  LENGTH(Y)
 ---------- ---------- ---------- ---------- ----------
          1          1          1          2          1
          2          1          1
          3                                1          1
          4
          5
          6
          7
          8
          9

9 rows selected.
可以看到null值对应的length没有任何显示。
 如果用=来匹配空串,和null的效果一样,匹配不了。

SQL> select *from test where x='';

no rows selected
我们还是来看看dump的信息吧,,对于null列dump的结果就是null

  1* select rownum,x,y,dump(x) from test
 SQL> /

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
深入理解MySQL索引优化器工作原理深入理解MySQL索引优化器工作原理Nov 09, 2022 pm 02:05 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于索引优化器工作原理的相关内容,其中包括了MySQL Server的组成,MySQL优化器选择索引额原理以及SQL成本分析,最后通过 select 查询总结整个查询过程,下面一起来看一下,希望对大家有帮助。

数据库系统的构成包括哪些数据库系统的构成包括哪些Jul 15, 2022 am 11:58 AM

数据库系统由4个部分构成:1、数据库,是指长期存储在计算机内的,有组织,可共享的数据的集合;2、硬件,是指构成计算机系统的各种物理设备,包括存储所需的外部设备;3、软件,包括操作系统、数据库管理系统及应用程序;4、人员,包括系统分析员和数据库设计人员、应用程序员(负责编写使用数据库的应用程序)、最终用户(利用接口或查询语言访问数据库)、数据库管理员(负责数据库的总体信息控制)。

c语言中null和NULL的区别是什么c语言中null和NULL的区别是什么Sep 22, 2023 am 11:48 AM

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

undefined和null是什么意思undefined和null是什么意思Nov 20, 2023 pm 02:39 PM

在JavaScript 中,undefined和null都代表着“无”的概念:1、undefined 表示一个未初始化的变量或一个不存在的属性,当声明了一个变量但没有对其赋值时,这个变量的值就是undefined,访问对象中不存在的属性时,返回的值也是undefined;2、null表示一个空的对象引用,在某些情况下,可以将对象的引用设置为null,以便释放其占用的内存。

数据库的什么是指数据的正确性和相容性数据库的什么是指数据的正确性和相容性Jul 04, 2022 pm 04:59 PM

数据库的“完整性”是指数据的正确性和相容性。完整性是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。完整性对于数据库系统的重要性:1、数据库完整性约束能够防止合法用户使用数据库时向数据库中添加不合语义的数据;2、合理的数据库完整性设计,能够同时兼顾数据库的完整性和系统的效能;3、完善的数据库完整性有助于尽早发现应用软件的错误。

什么时候用null和undefined什么时候用null和undefinedNov 13, 2023 pm 02:11 PM

null和undefined都表示缺少值或未定义的状态,根据使用场景的不同,选择使用null还是undefined有以下一些指导原则:1、当需要明确指示一个变量为空或无效时,可以使用null;2、当一个变量已经声明但尚未赋值时,会被默认设置为undefined;3、当需要检查一个变量是否为空或未定义时,使用严格相等运算符“===”来判断变量是否为null或undefined。

access数据库的结构层次是什么access数据库的结构层次是什么Aug 26, 2022 pm 04:45 PM

结构层次是“数据库→数据表→记录→字段”;字段构成记录,记录构成数据表,数据表构成了数据库。数据库是一个完整的数据的记录的整体,一个数据库包含0到N个表,一个表包含0到N个字段,记录是表中的行。

null和undefined有什么不同null和undefined有什么不同Nov 08, 2023 pm 04:43 PM

null和undefined的区别在:1、语义含义;2、使用场景;3、与其它值的比较;4、与全局变量的关系;5、与函数参数的关系;6、可空性检查;7、性能考虑;8、在JSON序列化中的表现;9、与类型的关系。详细介绍:1、语义含义,null通常表示知道这个变量不会拥有任何有效的对象值,而undefined则通常表示变量未被赋值,或者对象没有此属性;2、使用场景等等。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전