Heim  >  Artikel  >  Datenbank  >  Was sind die SQL-Integritätseinschränkungen?

Was sind die SQL-Integritätseinschränkungen?

清浅
清浅Original
2019-05-09 09:50:1917123Durchsuche

Zu den SQL-Integritätseinschränkungen gehören: 1. „NOT NULL“-Nicht-Null-Einschränkung, die angegebene Spalte lässt keine Nullwerte zu. 2. „UNIQUE“-Eindeutigkeitseinschränkung, es gibt keine doppelten Werte in der angegebenen Spalte 3. „PRIMARY“ KEY“-Primärschlüsseleinschränkung, identifiziert jede Zeile der Tabelle eindeutig; 4. „FOREIGN KEY“-Fremdschlüsseleinschränkung; 5. „CHECK“-Bedingungseinschränkung.

Was sind die SQL-Integritätseinschränkungen?

Integritätsbeschränkungen sind ein Mittel, um sicherzustellen, dass von Benutzern vorgenommene Änderungen die Konsistenz der Daten nicht zerstören, und sind ein Mittel, um die Richtigkeit und Kompatibilität der Daten zu schützen Daten.

Fünf allgemeine Einschränkungen:

NOT NULL: Nicht-Null-Einschränkung C, die angegebene Spalte lässt keine Nullwerte zu

UNIQUE: eindeutig Einschränkung U, es gibt keine doppelten Werte in der angegebenen Spalte, oder jeder Wert oder jede Wertegruppe in der Tabelle ist eindeutig

PRIMÄRSCHLÜSSEL: Primärschlüsseleinschränkung P, identifiziert jede Zeile eindeutig Die Tabelle und Nullwerte sind nicht zulässig. Eine Tabelle kann nur eine Primärschlüsseleinschränkung haben.

FÄLLERSCHLÜSSEL: Fremdschlüsseleinschränkung R. Spalten in einer Tabelle verweisen auf Spalten in anderen Tabellen, wodurch Abhängigkeiten bestehen und kann auf Verweise auf sich selbst verweisen.

PRÜFEN: Bedingte Einschränkung C, gibt an, ob die Spalte eine bestimmte Bedingung erfüllt

Nicht-Null-Einschränkung NK

create table member(
    mid number,    
    name varchar2(200) not null
    );

Null-Fehler einfügen:

SQL> insert into member(mid,name) values(1,null);
*
第 1 行出现错误:
ORA-01400: 无法将 NULL 插入 ("SCOTT"."MEMBER"."NAME")

Eindeutige Einschränkung UK

drop table member purge;create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50) unique
    );

Einfügungsfehler

SQL> insert into member(mid,name,email) values (1,'scott','scott@163.com');

1 Zeile wurde erstellt.

SQL> insert into member(mid,name,email) values (2,'jack','scott@163.com');
insert into member(mid,name,email) values (2,'jack','scott@163.com')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C0010891)

Geben Sie einen Namen für die Einschränkung an

Dieser Fehler sagt dem Benutzer nicht genau, welches Feld ein Problem hat, wie bei der vorherigen nicht leeren Einschränkung. Wir können einen angeben Name für diese Einschränkung. Ein Name

create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50),    
    constraint uk_email unique(email)
    );

Primärschlüsseleinschränkung PK

Primärschlüsseleinschränkung = Nicht-Null-Einschränkung + eindeutige Einschränkung

create table member(
    mid number,
    name varchar2(200) not null,
    email varchar2(50),    
    constraint pk_number primary key(mid),    
    constraint uk_email unique(email)
    );

Falsches Einfügen Daten melden einen Fehler:

SQL> insert into member(mid,name,email) values (1,'jack','scott@163.com');

1 Zeile erstellt

SQL> insert into member(mid,name,email) values (1,'jack','jack@163.com');
insert into member(mid,name,email) values (1,'jack','jack@163.com')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_NUMBER)

Beschränkung CK prüfen

create table member(
   mid number,    
   name varchar2(200) not null,    
   age number check(age between 0 and 200),    
   sex varchar2(10),    
   email varchar2(50),    
   constraint pk_number primary key(mid),    
   constraint uk_email unique(email),    
   constraint ck_sex check(sex in('男','女'))    
   );

Fehler beim Einfügen falscher Daten:

SQL> insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','jack@163.com');
insert into member(mid,name,age,sex,email) values (1,'Jack','300','无','jack@163.com')
*
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SCOTT.CK_SEX)

Primäre Fremdschlüsseleinschränkung FK

create table member(
    mid number,
    name varchar2(200) not null,    
    constraint pk_mid primary key(mid)
    );    
create table advice(
       adid number,
       content clob not null,
       mid number,       
       constraint pk_adid primary key(adid),       
       constraint fk_mid foreign key(mid) references member(mid)
       );

Daten korrekt einfügen, Mid existiert bereits in der angehängten Tabelle

insert into member(mid,name) values (1,'Scott');
insert into member(mid,name) values (2,'Jack');
insert into advice(adid,content,mid) values (1,'test',1);
insert into advice(adid,content,mid) values (2,'test',2);
commit;

Fügen Sie Mid-Daten ein, die nicht vorhanden sind in der übergeordneten Tabelle

SQL> insert into advice(adid,content,mid) values (3,'test',3);
insert into advice(adid,content,mid) values (3,'test',3)
*
第 1 行出现错误:
ORA-02291: 违反完整约束条件 (SCOTT.FK_MID) - 未找到父项关键字

Die Verwendung von Primär- und Fremdschlüsseleinschränkungen führt zu neuen Problemen beim Löschen von Tabellen und Daten

Um die übergeordnete Tabelle zu löschen, müssen Sie zuerst die untergeordnete Tabelle löschen

SQL> drop table member;drop table member           
*
第 1 行出现错误:
ORA-02449: 表中的唯一/主键被外键引用

Löschen Sie die übergeordnete Tabelle zwangsweise, sodass Sie die Löschoption nicht verwenden können und die Primär- und Fremdschlüsseleinschränkungen in der Worttabelle nicht mehr vorhanden sind

SQL> drop table member cascade constraint;
表已删除。
SQL> insert into advice(adid,content,mid) values (3,'test',3);

1 Zeile wurde erstellt

An Löschen Sie die Daten der übergeordneten Tabelle und löschen Sie zuerst die Daten in der Worttabelle

SQL> delete from member where mid=1;
delete from member where mid=1
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.FK_MID) - 已找到子记录

Zusätzlich zu dieser Methode können Sie auch die Kaskadenoperationsklausel

auf Löschkaskade

create table advice(
       adid number,
       content clob not null,
       mid number,       
       constraint pk_adid primary key(adid),       
       constraint fk_mid foreign key(mid) references member(mid) on delete cascade
       );

In diesem Fall werden durch das Löschen der angehängten Tabellendaten die Wörter gelöscht. Die Daten in der Tabelle werden ebenfalls gelöscht.

Beim Löschen auf Null setzen

create table advice(       
adid number,       
content clob not null,       
mid number,       
constraint pk_adid primary key(adid),       
constraint fk_mid foreign key(mid) references member(mid) on delete set null      
 );

Durch das Löschen der Daten in der übergeordneten Tabelle werden die entsprechenden zugehörigen Felder in der untergeordneten Tabelle auf null gesetzt

SQL> delete from member where mid=1;

已删除 1 行。

SQL> select * from advice;

      ADID CONTENT         MID
---------- ---------- ----------
    test
    test            2

Einschränkungen anzeigen

SQL>  select constraint_name,constraint_type,table_name  from user_constraints; 

CONSTRAINT_NAME            C   TABLE_NAME
------------------------------ - ------------------------------
FK_DEPTNO                  R       EMP
PK_EMP                     P       EMP
PK_DEPT                    P       DEPT

R Fremdschlüsseleinschränkungen, C Prüfeinschränkungen, Q Eindeutigkeitseinschränkungen, P Primärschlüsseleinschränkungen

Einschränkungen ändern

Einschränkungen hinzufügen

alter table member add constraint pk_mid primary key(mid);
alter table member add constraint ck_age check(age between 0 and 200);
alter table member modify (name varchar2(50) not null);

Es ist zu beachten, dass Nicht-Null-Einschränkungen die Änderungsmethode verwenden

Einschränkungen deaktivieren/aktivieren

Nicht- Fremdschlüssel

alter table member disable constraint ck_age;
alter table member enable constraint ck_age;

Fremdschlüssel

alter table member disable constraint pk_mid cascade;

Einschränkung löschen

alter table member drop constraint pk_mid cascade;
alter table member drop constraint ck_age;

Das obige ist der detaillierte Inhalt vonWas sind die SQL-Integritätseinschränkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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