一、簡單的表建立和字段類型
最簡單的方式去建立表(沒有添加主鍵之類的約束條件)
【Oracle的字段類型】
number:數值類型
--整數類型:number(a) 總長度a
--小數類型:number(a,b) 總長度a,小數長度b,小數可缺省
varchar2:字符類型
--字符類型 varchar2(ln) ln表示字符的最大長度,實際存儲內存的長度<=ln
--特色:多態分配存儲空間,節省空間
char:字符類型
--字符類型char(ln) 無論字符數據長度多大,直接在內存開闢ln大小的空間存儲數據
--特色:存儲效率高於varchar2
date:日期類型
建立表最基本語法:sql
create table 表名( 字段名 類型, 字段名 類型, 字段名 類型, ........ 字段名 類型 --最後一個字段不要加逗號 );
建立一張學生表並添加n條測試數據:ide
--建立一張學生表 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;
二、二維表建立約束學習:(主鍵約束,非空約束,檢查約束,惟一約束)學習
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 惟一約束名;
--建立表並同時添加約束 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);
三、二維表建立約束學習:外鍵約束測試
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班','遊戲解說班');
測試兩張表是否關聯成功spa
-- 查詢姓名,班級編號,和班級名稱 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。
--注意:子表依賴字段不能添加非空約束。code