1. 程式人生 > >Oracle【二維表管理:約束】

Oracle【二維表管理:約束】

value light 成功 字段 註意 ont sed 刪除外鍵 img

1、簡單的表創建和字段類型
最簡單的方式去創建表(沒有添加主鍵之類的約束條件)
【Oracle的字段類型】
number:數值類型
--整數類型:number(a) 總長度a
--小數類型:number(a,b) 總長度a,小數長度b,小數可缺省
varchar2:字符類型
--字符類型 varchar2(ln) ln表示字符的最大長度,實際存儲內存的長度<=ln
--特點:多態分配存儲空間,節省空間
char:字符類型
--字符類型char(ln) 不管字符數據長度多大,直接在內存開辟ln大小的空間存儲數據
--特點:存儲效率高於varchar2
date:日期類型
創建表最基本語法:

create table 表名(
     字段名 類型,
     字段名 類型,
     字段名 類型,
     ........
     字段名 類型  --最後一個字段不要加逗號
    );

創建一張學生表並添加n條測試數據:

--創建一張學生表
create table student(
  sno number(10),
  sname varchar2(50),
  sage number(3),
  ssex char(4),
  sbirth date,
  sjob varchar2(100)
);
--添加測試數據
insert into student values(1,‘小喜慶‘,‘女‘,18,‘7-10月-18‘,‘學生‘);
insert into student values(2,‘迪麗熱巴‘,‘女‘,27,to_date(‘1992-06-03‘,‘yyyy-mm-dd‘),‘演員‘);
--刪除表:drop table 表名;
drop table student;

技術分享圖片

2、二維表創建約束學習:(主鍵約束,非空約束,檢查約束,唯一約束)

技術分享圖片
 1 --刪除表:drop table 表名;
 2 drop table student;
 3 
 4 select * from student;
 5 --創建簡單的學生表
 6 create table student(
 7   sno number(15), --primary key, --添加主鍵約束_1
 8   sname varchar2(50),-- not null,--添加非空約束_1
 9   sex varchar2(4),--check(sex=‘男‘ or sex=‘女‘),--添加檢查約束
10 sage number(3),-- check(sage>0 and sag<=200),--添加檢查約束_1 11 sbirth date, 12 phone number(20) -- 添加唯一約束 unique 13 --constraints pk_student_sno primary key(sno) --添加主鍵約束_2 14 --constraints ck_student_sname check(sname is not null) --添加非空約束_2 15 --constraints ck_student_sage check(sage>0 and sage<=200)--添加檢查約束_2 16 --constraints un_student_phone unique(phone)--唯一約束 17 18 ); 19 ----------------------------------創建表後在去創建約束--------------------------------------- 20 --添加主鍵約束 21 alter table student add constraints pk_student_sno primary key(sno);--添加主鍵約束_3 22 alter table student drop constraints pk_student_sno;--刪除主鍵約束 23 --添加非空約束 24 alter table student add constraints ck_student_sname check(sname is not null) --添加非空約束_3 25 alter table student drop constraints ck_student_sname;--刪除非空約束 26 --添加檢查約束 27 alter table student add constraints ck_student_sage check(sage>0 and sag<=200)--添加檢查約束_3 28 alter table student drop constraints ck_student_sage; --刪除檢查約束 29 --添加唯一約束 30 alter table student add constraints un_student_phone unique(phone)--唯一約束 31 32 33 34 --添加測試數據 35 insert into student values(2018112001,小喜慶,,18,7-10月-18,10086); 36 37 ----------------------------------沒有添加約束存在的一些問題--------------------------------------- 38 ---Oracle表約束【沒有添加約束存在的一些問題】 39 --問題1:字段(學號)可重復添加 40 insert into student values(2018112001,迪麗熱巴,,27,to_date(1992-06-03,yyyy-mm-dd),10010); 41 --解決1:使用主鍵 primary key,特點:非空唯一 42 添加主鍵方法:1:直接在創建表的字段後使用關鍵字 primary key 43 2:在創建表的語句的最後面使用 constraints pk_表名_字段名 primary key(字段名) 44 3:在創建表後使用 alter table 表名 add constraints pk_表名_字段名 primary key(字段名); 45 4:刪除主鍵 alter table student drop constraints 主鍵的約束名; 46 47 --問題2:必填的字段(sname)可以為空 48 insert into student values(2018112001,‘‘,,27,to_date(1992-06-03,yyyy-mm-dd),10010); 49 --解決2:使用非空約束 not null 50 添加非空約束:1:直接在創建表的字段後使用關鍵字 not null 51 2:在創建表的語句的最後面使用 constraints ck_表名_字段名 check(字段名 is not null) 52 3:在創建表後使用 alter table 表名 add constraints ck_表名_字段名 check(字段名 is not null); 53 4:刪除非空約束 alter table student drop constraints 非空約束名; 54 55 --問題3:違背了自然定律 56 insert into student values(2018112001,小喜慶,,218,7-10月-18,10086); 57 --解決3:使用檢查約束 58 添加非空約束:1:直接在創建表的字段後使用 check(條件) 例如 sage number(3) check(sage>0 and sag<=200), 59 2:在創建表的語句的最後面使用 constraints ck_表名_字段名 check(條件) 60 3:在創建表後使用 alter table 表名 add constraints ck_表名_字段名 check(條件); 61 4:刪除檢查約束 alter table student drop constraints 檢查約束名; 62 --問題4:手機號可以重復 63 insert into student values(2018112001,小喜慶,,218,7-10月-18,10086); 64 --問題4:使用唯一約束 65 添加非空約束:1:直接在創建表的字段後使用 unique 66 2:在創建表的語句後面使用 constraints un_表名_字段名 unique(字段名); 67 3:在創建表後使用 alter table 表名 add constraints un_表名_字段名 unique(字段名); 68 4:刪除約束:alter table 表名 drop constraints 唯一約束名;
View Code
--創建表並同時添加約束
create table student(
  sno number(15), 
  sname varchar2(50),
  sex varchar2(4),
  sage number(3),
  sbirth date,
  phone number(20),
  constraints pk_student_sno primary key(sno), --添加主鍵約束
  constraints ck_student_sname check(sname is not null), --添加非空約束
  constraints ck_student_sage check(sage>0 and sage<=200),--添加檢查約束
  constraints un_student_phone unique(phone)--唯一約束
  
);

--添加測試數據
insert into student values(2018112001,‘小喜慶‘,‘女‘,18,‘7-10月-18‘,10086);
insert into student values(2018112002,‘迪麗熱巴‘,‘女‘,27,to_date(‘1992-06-03‘,‘yyyy-mm-dd‘),10010);

技術分享圖片

3、二維表創建約束學習:外鍵約束

 1 --學生信息表
 2 create table student (
 3       sid number(10) primary key,
 4       sname varchar2(50) not null,
 5       ssex char(4) check(ssex= or ssex=),
 6       sage number(3) check(sage>=0 and sage<=200),
 7       sqq number(20) unique,
 8       cno number(10) references class(cno)
 9 );
10 --添加數據
11 insert into student values(1,迪麗熱巴,,27,13245668,1);
12 insert into student values(2,遊戲解說柚子,,24,11545668,1);
13 insert into student values(3,傑西,,22,135668,2);
14 insert into student values(4,傑克,,21,1323268,2);
15 
16 --班級表
17 create table class (
18       cno number(10) primary key,
19       cname varchar2(50) not null,
20       cdesc varchar2(50)
21 );
22 insert into class values(1,計算機1班,明星班);
23 insert into class values(2,計算機2班,遊戲解說班);

技術分享圖片
測試兩張表是否關聯成功

-- 查詢姓名,班級編號,和班級名稱
select s.sname,c.cno,c.cname
from student s
inner join class c
on s.cno=c.cno; 

技術分享圖片

--問題:可以在學生表中插入一個不存在的班級
insert into student values(5,‘傑克‘,‘男‘,21,1268,3);

解決:使用外鍵:作用:當在子表中插入數據,在父表中不存在,自動報錯
概念:當一張表的某個字段的值需要依賴另外一張表的某個字段的值,則使用外鍵約束。
   其中主動依賴的表稱為子表,被依賴的表稱為父表。外鍵加在子表中。
使用方法:
  在子表中的字段後直接使用 references 父表名(字段) 例如: cno number(10) references class(cno)
  在創建表語句的最後面使用 constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
  在創建表後使用:alter table 表名 add constraints fk_子表名_字段名 foreign key(字段名) references 父表名(字段名)
  刪除外鍵:alter table 表名 drop constraints 外鍵約束名
外鍵選取:
  一般選取父表的主鍵作為子表的外鍵。
外鍵的缺點:
  無法直接刪除父表數據,除非級聯刪除
  級聯刪除:在添加外鍵約束時,使用關鍵字 on delete cascade  
    --使用:當刪除父表數據時,自動刪除子表相關所有數據。
    --缺點:無法保留子表歷史數據。
    --使用關鍵字 on delete set null
      --刪除父表數據時,將子表中的依賴字段的值設置為null。
      --註意:子表依賴字段不能添加非空約束。

Oracle【二維表管理:約束】