學習視頻: https://www.bilibili.com/video/BV1tJ411r7EC?p=35 數據的完整性:保證插入表格的數據必須正確。包括實體完整性、區域完整性、引用完整性、自定義完整性。 約束:約束的作用是為了保證數據的完整性,類型包括主鍵約束(PK)、唯一約束()、檢查約束、外 ...
學習視頻: https://www.bilibili.com/video/BV1tJ411r7EC?p=55
數據的完整性:保證插入表格的數據必須正確。包括實體完整性、區域完整性、引用完整性、自定義完整性。
約束:約束的作用是為了保證數據的完整性,類型包括主鍵約束(PK)、唯一約束()、檢查約束、外鍵約束。主鍵和唯一約束的區別是主鍵不能為空。命名規則:約束類型_約束名。
列級約束:針對某一列設置的約束。表級約束和列級約束區別相關瞭解:https://blog.csdn.net/hanxuemin12345/article/details/7828206
--設置主鍵的簡潔寫法 create table user1( id number(5) primary key, name varchar2(20) ) --設置主鍵的完整寫法 create table user1( id number(5) constraint pk_id primary key, name varchar2(20) ) --添加主鍵約束、唯一約束、非空約束 create table user3( id number(3) constraint pk_user3_id primary key, name varchar2(20) constraint uq_user3_name unique, age number(3) constraint nn_user3_age not null ) insert into user3 values(1,'bibi',34); insert into user3 values(2,'bibiiii',34); insert into user3 values(3,'bibi',null);
檢查約束:
alter table user3 add salary number(8,2); alter table user3 add constraint ck_user3_salary check (salary between 5000 and 20000);
表級約束:在定義表格的某些列之後,再為某些列添加約束。非空約束只能是列級約束。
create table user3( id number(3) , name varchar2(20) , age number(3) not null, constraint pk_user3_id primary key (id), constraint uq_user3_name unique (name) ) create table user3( id number(3) , name varchar2(20) , age number(3) not null, constraint uq_user3_name unique (id,name) )View Code
表定義之後,添加、移除約束:
alter table user3 add constraint pk_usesr3_id primary key (id); alter table user3 drop constraint pk_user3_id;
外鍵約束:本表這列的值取決於另一個表的主鍵。刪除主表關聯數據是,必須先把從表的外鍵關聯數據刪除或者置空。刪除主表之前必須先把從表刪除掉或者主表切斷所有關聯的外鍵。
create table user8 ( id number(3) primary key, name varchar2(20) not null ); insert into user8 values(1,'bb'); insert into user8 values(2,'bbb'); insert into user8 values(3,'bbbb'); create table order8 ( id number(10) primary key, user_id number(3) constraint fk_order8_userid references user8(id), --外鍵,引用user8表的id info varchar2(500) ); insert into order8 values(1,1,null); insert into order8 values(1,5,null);
create table user8 ( id number(3) primary key, name varchar2(20) not null ); insert into user8 values(1,'bb'); insert into user8 values(2,'bbb'); insert into user8 values(3,'bbbb'); create table order8 ( id number(10) primary key, user_id number(3) constraint fk_order8_userid references user8(id), --外鍵,引用user8表的id info varchar2(500) ) insert into order8 values(1,1,null); insert into order8 values(2,2,null); insert into order8 values(3,3,null); --刪除關聯數據 方法一,不常用 delete from order8; delete from user8; --方法二 置空 update order8 set user_id=null; delete from user8; --刪除關聯表 不常用 drop table order8; drop table user8; --方法二 刪除掉所有關聯的外鍵 drop table user8 cascade constraint;View Code
級聯操作:當刪除主表中被參考數據時,從表關聯外鍵欄位數據自動設為null,用法 on delete set null。當刪除主表被參考數據時,從表外鍵關聯數據行自動刪除,用法 on delete cascade。
create table order8 ( id number(10) primary key, user_id number(3) references user8(id) on delete set null, info varchar2(500) ) create table order8 ( id number(10) primary key, user_id number(3) references user8(id) on delete cascade, info varchar2(500) )View Code
聯合主鍵:多個欄位組成一個主鍵
create table user8 ( id number(3) , name varchar2(20), constraint pk_user8_id_name primary key (id,name) ); insert into user8 values(1,'b'); insert into user8 values(1,'a'); insert into user8 values(1,'b');