以前項目主要是用是MySql,現在的項目切換到,在項目組已經幾個月了,感覺還是需要系統的學習整理下,主要是整理學習plsql語句,買了本比較暢銷的PL/SQL的書籍( pl/sql 從入門到精通),通過對此書的閱讀,根據此書的目錄結構,對自己感覺需要的知識的做個整理
數據庫三范式,這個感覺是很多人都知道的,但是貌似在實際項目中我們經常又不會嚴格遵守的東西
SQL語言主要有兩大類
DML:數據庫操作語言,主要用于數據庫的增刪改查操作DDL:數據庫定義語言,主要用于創建或修改表,定義視圖,存儲過程等。
其實還有一種叫DCL,數據庫控制語言,主要是DB在進行使用,不太了解。
這里說到表和視圖,也說下他們的區別,我有很長一段時間其實也并沒有搞清楚表可以沒有主鍵嗎,簡單的說是表是物理上存在的,視圖是依賴于表存在的區別:1、視圖是已經編譯好的sql語句。而表不是2、視圖沒有實際的物理記錄。而表有。3、表是內容,視圖是窗口4、表只用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改5、表是內模式,視圖是外模式6、視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。7、表屬于全局模式中的表,是實表;視圖屬于局部模式的表,是虛表。8、視圖的建立和刪除只影響視圖本身,不影響對應的基本表。
聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系
--創建員工表
create table t_staff(
id number(20) not null,
name varchar2(20),
age varchar(10),

sex varchar(3)
);
--定義主鍵
alter table t_staff add constraint sf_id primary key(id);
--插入注解
comment on column t_staff.id is '主鍵';
comment on column t_staff.name is '姓名';
comment on column t_staff.age is '年齡';

comment on column t_staff.sex is '性別';
--創建自增長序列
create sequence seq_t_staff
increment by 1 --每次加1
start with 1 --開始于1
nomaxvalue --不設置最大值
minvalue 1--最小值1,可以設置nominvalue 無最小值
nocycle --不循環
nocache --不緩存

--插入數據
insert into t_staff(id,name,age,sex) values (seq_t_staff.nextval,'張三','20','男');
insert into t_staff(id,name,age,sex) values (seq_t_staff.nextval,'田七','20','女');
insert into t_staff(id,name,age,sex) values (seq_t_staff.nextval,'李四','21','男');
正常情況下我們一般是通過sql語句進行查詢
select * from t_staff;
我們也可以通過創建一個視圖,通過視圖進行查詢,視圖也有視圖的好處,列如不把表結構暴露出去等
創建視圖的語法
CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name
AS
SELECT查詢
[WITH READ ONLY CONSTRAINT]
語法解析:
OR :如果視圖已經存在,則替換舊視圖。FORCE:即使基表不存在,也可以創建該視圖表可以沒有主鍵嗎,但是該視圖不能正常使用,當基表創建成功后,視圖才能正常使用。:如果基表不存在,無法創建視圖,該項是默認選項。WITH READ ONLY:默認可以通過視圖對基表執行增刪改操作,但是有很多在基表上的限制(比如:基表中某列不能為空,但是該列沒有出現在視圖中,則不能通過視圖執行操作),WITH READ ONLY說明視圖是只讀視圖,不能通過該視圖進行增刪改操作。現實開發中,基本上不通過視圖對表中的數據進行增刪改操作。
--創建視圖

create or replace view staff_view
as
select name,age,sex from t_staff
with read only;
--查詢
select * from staff_view;
--刪除視圖
drop view staff_view;
這里創建視圖的時候我隱藏去了id字段,那么通過視圖查詢是查詢不到id的,視圖分為簡單視圖和復雜視圖,在視圖中是可以進行復雜的連表查詢的