Heim Datenbank MySQL-Tutorial 当主键碰到NULL

当主键碰到NULL

Jun 07, 2016 pm 02:58 PM
null oracle 数据库

主键和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> /

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

MySQL: Eine Einführung in die beliebteste Datenbank der Welt MySQL: Eine Einführung in die beliebteste Datenbank der Welt Apr 12, 2025 am 12:18 AM

MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

Was tun, wenn das Orakel nicht geöffnet werden kann Was tun, wenn das Orakel nicht geöffnet werden kann Apr 11, 2025 pm 10:06 PM

Lösungen für Oracle können nicht geöffnet werden, einschließlich: 1. Starten Sie den Datenbankdienst; 2. Starten Sie den Zuhörer; 3.. Hafenkonflikte prüfen; 4. Umgebungsvariablen korrekt einstellen; 5. Stellen Sie sicher, dass die Firewall- oder Antivirus -Software die Verbindung nicht blockiert. 6. Überprüfen Sie, ob der Server geschlossen ist. 7. Verwenden Sie RMAN, um korrupte Dateien wiederherzustellen. 8. Überprüfen Sie, ob der TNS -Dienstname korrekt ist. 9. Netzwerkverbindung prüfen; 10. Oracle Software neu installieren.

Warum MySQL verwenden? Vorteile und Vorteile Warum MySQL verwenden? Vorteile und Vorteile Apr 12, 2025 am 12:17 AM

MySQL wird für seine Leistung, Zuverlässigkeit, Benutzerfreundlichkeit und Unterstützung der Gemeinschaft ausgewählt. 1.MYSQL bietet effiziente Datenspeicher- und Abruffunktionen, die mehrere Datentypen und erweiterte Abfragevorgänge unterstützen. 2. Übernehmen Sie die Architektur der Client-Server und mehrere Speichermotoren, um die Transaktion und die Abfrageoptimierung zu unterstützen. 3. Einfach zu bedienend unterstützt eine Vielzahl von Betriebssystemen und Programmiersprachen. V.

So lösen Sie das Problem des Schließens von Oracle Cursor So lösen Sie das Problem des Schließens von Oracle Cursor Apr 11, 2025 pm 10:18 PM

Die Methode zur Lösung des Oracle Cursor Closeure -Problems umfasst: explizit den Cursor mithilfe der Close -Anweisung schließen. Deklarieren Sie den Cursor in der für Aktualisierungsklausel so, dass er nach Beendigung des Umfangs automatisch schließt. Deklarieren Sie den Cursor in der Verwendung der Verwendung so, dass er automatisch schließt, wenn die zugehörige PL/SQL -Variable geschlossen ist. Verwenden Sie die Ausnahmebehandlung, um sicherzustellen, dass der Cursor in jeder Ausnahmesituation geschlossen ist. Verwenden Sie den Verbindungspool, um den Cursor automatisch zu schließen. Deaktivieren Sie die Automatikübermittlung und Verzögerung des Cursors Schließen.

So erstellen Sie Cursor in Oracle Loop So erstellen Sie Cursor in Oracle Loop Apr 12, 2025 am 06:18 AM

In Oracle kann die For -Loop -Schleife Cursors dynamisch erzeugen. Die Schritte sind: 1. Definieren Sie den Cursortyp; 2. Erstellen Sie die Schleife; 3.. Erstellen Sie den Cursor dynamisch; 4. Führen Sie den Cursor aus; 5. Schließen Sie den Cursor. Beispiel: Ein Cursor kann mit dem Zyklus für Kreislauf erstellt werden, um die Namen und Gehälter der Top 10 Mitarbeiter anzuzeigen.

So stoppen Sie die Oracle -Datenbank So stoppen Sie die Oracle -Datenbank Apr 12, 2025 am 06:12 AM

Führen Sie die folgenden Schritte aus, um eine Oracle -Datenbank zu stoppen: 1. Eine Verbindung zur Datenbank herstellen; 2. Sofort herunterfahren; 3.. Herunterfahren vollständig.

So erstellen Sie Oracle Dynamic SQL So erstellen Sie Oracle Dynamic SQL Apr 12, 2025 am 06:06 AM

SQL -Anweisungen können basierend auf der Laufzeiteingabe erstellt und ausgeführt werden, indem die dynamische SQL von Oracle verwendet wird. Zu den Schritten gehören: Vorbereitung einer leeren Zeichenfolgenvariable zum Speichern von dynamisch generierten SQL -Anweisungen. Verwenden Sie die sofortige Ausführung oder Vorbereitung, um dynamische SQL -Anweisungen zu kompilieren und auszuführen. Verwenden Sie die Bind -Variable, um die Benutzereingabe oder andere dynamische Werte an dynamische SQL zu übergeben. Verwenden Sie sofortige Ausführung oder führen Sie aus, um dynamische SQL -Anweisungen auszuführen.

Welche Schritte sind erforderlich, um CentOs in HDFs zu konfigurieren Welche Schritte sind erforderlich, um CentOs in HDFs zu konfigurieren Apr 14, 2025 pm 06:42 PM

Das Erstellen eines Hadoop -verteilten Dateisystems (HDFS) auf einem CentOS -System erfordert mehrere Schritte. Dieser Artikel enthält einen kurzen Konfigurationshandbuch. 1. Bereiten Sie sich auf die Installation von JDK in der frühen Stufe vor: Installieren Sie JavadevelopmentKit (JDK) auf allen Knoten, und die Version muss mit Hadoop kompatibel sein. Das Installationspaket kann von der offiziellen Oracle -Website heruntergeladen werden. Konfiguration der Umgebungsvariablen: Bearbeiten /etc /Profildatei, setzen Sie Java- und Hadoop -Umgebungsvariablen, damit das System den Installationspfad von JDK und Hadoop ermittelt. 2. Sicherheitskonfiguration: SSH-Kennwortfreie Anmeldung zum Generieren von SSH-Schlüssel: Verwenden Sie den Befehl ssh-keygen auf jedem Knoten

See all articles