一、關系數據庫基礎(20)1.關系型數據庫基本知識:關系模型以及模型的層次結構:數據庫系統、數據庫管理系統的基本概念及其基本組成;E-R圖;關系數據庫設計數據庫系統的概念:數據庫系統DBS(Data Base ,簡稱DBS)通常由軟件、數據庫和數據管理員組成。數據庫系統是為了適應數據處理的需要而發展起來的一種較為理想的數據處理系統,也是一個為了實際可運行的存儲、維護和應用系統提供數據的軟件系統,是存儲介質 、處理對象和管理系統的集合體。數據庫系統的組成: 數據庫
?數據庫管理系統(及其開發工具)?應用系統?數據庫管理員
?數據與信息?數據是信息的載體?信息是數據的內涵
數據庫管理系統的概念:
數據庫管理系統( )是一種操縱和管理數據庫的大型軟件,用于建立、使用和維護數據庫,簡稱DBMS。數據庫管理系統對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。
數據庫管理系統的組成:
進行數據定義語言以及翻譯的相關程序,在這個部分的幫助下,可以讓數據庫的用戶自行進行選擇,并且也能得到翻譯由此形成一個內部形式;
進行數據運行控制的程序,因為這一程序的工作,讓數據庫中的資源可以充分得到管理,并且能實現關于數據的一種控制;
實例:
內存結構:
共享池
共享池是對SQL、PL/SQL程序進行語法分析、編譯、執行的內存區域
共享池由庫緩存和數據字典緩存組成。
共享池的大小直接影響數據庫的性能。
數據緩沖區
用于存儲從磁盤數據文件中讀入的數據,所有用戶共享。
服務器進程將讀入的數據保存在數據緩沖區中,當后續的請求需要這些數據時可以在內存中找到,不需要再從磁盤讀取,提高了讀取 速度。
數據緩沖區的大小對數據庫的讀取速度有直接的影響。
日志緩沖區
日志記錄數據庫的所有修改信息,日志信息首先產生于日志緩沖區。
當日志緩沖區的日志數據達到一定數量時,由后臺進程將日志數據寫入日志文件中。
相對來說,日志緩沖區對數據庫的性能影響較小。
后臺進程:
PMON
進程監控進程:
清理出現故障的進程。
釋放所有當前掛起的鎖定。
釋放故障進程使用的資源。
SMON
系統監控進程:
在實例失敗之后,重新打開數據庫時自動恢復實例。
整理數據文件的自由空間,將相鄰區域結合起來。
釋放不再使用的臨時段。
DBWR
數據寫入進程:
管理數據緩沖區,將最近使用過的塊保留在內存中。
將修改后的緩沖區數據寫入數據文件中。
LGWR
日志寫入進程:
負責將日志緩沖區中的日志數據寫入日志文件。
系統有多個日志文件,該進程以循環的方式將數據寫入文件。
CKPT
校驗點
數據庫:
物理數據庫
數據文件

控制文件
日志文件
邏輯結構
數據庫
表空間
段
區
數據塊
E-R圖;
第一種:
第二種:
例:
關系數據庫設計概念:
關系數據庫:在一個給定的應用領域中,所有實體及實體之間聯系的集合構成一個關系數據庫
關系模型結構:
1、單一的數據結構----關系(表文件)。關系數據庫的表采用二維表格來存儲數據,是一種按行與列排列的具有相關信息的邏輯組,它類似于Excel工作表。一個數據庫可以包含任意多個數據表。
在用戶看來建立表空間語句,一個關系模型的邏輯結構是一張二維表,由行和列組成。這個二維表就叫關系,通俗地說,一個關系對應一張表。
2、元組(記錄)。表中的一行即為一個元組建立表空間語句,或稱為一條記錄。
3、屬性(字段)。數據表中的每一列稱為一個字段,表是由其包含的各種字段定義的,每個字段描述了它所含有的數據的意義,數據表的設計實際上就是對字段的設計。創建數據表時,為每個字段分配一個數據類型,定義它們的數據長度和其他屬性。字段可以包含各種字符、數字、甚至圖形。如錯誤!未找到引用源。
4、屬性值。行和列的交叉位置表示某個屬性值,如“數據庫原理”就是課程名稱的屬性值
5、主碼。主碼(也稱主鍵或主關鍵字),是表中用于唯一確定一個元組的數據。關鍵字用來確保表中記錄的唯一性,可以是一個字段或多個字段,常用作一個表的索引字段。每條記錄的關鍵字都是不同的,因而可以唯一地標識一個記錄,關鍵字也稱為主關鍵字,或簡稱主鍵。如錯誤!未找到引用源。
6、域。屬性的取值范圍。
7、關系模式。關系的描述稱為關系模式。對關系的描述,一般表示為:關系名(屬性1,屬性2.....屬性n)。例如上面的關系可描述為:課程(課程號、課程名稱、學分、任課老師)。
約束
1.實體完整性,通常由關系系統自動支持
2.參照完整性,早期系統不支持,但大型系統能自動支持
3.用戶定義的完整性,反映應用領域需要遵循的約束條件,體現了具體領域中的語義約束,用戶定義后由系統支持
1.關系數據庫的設計應遵從概念單一化“一事一地”的原則
2.避免在表之間出現重復字段
3.表中的字段必須是原始數據和基本數據元素
2.數據庫體系結構數據庫和實例組成
主要組件
數據庫用物理結構和邏輯結構
數據庫的邏輯結構和物理儲存結構:邏輯結構:
物理結構:三種文件
1.數據文件
2.控制文件
3.日志文件
范式
二、數據庫模式對象操作(20)數據表,定義約束,創建視圖,創建用戶和角色,權限控制數據表:
建表:
create table classinfo(
classid number(2) primary key,
classname varchar(10) not null
);
create table studentinfo(
studentid number(2) primary key,
studentname varchar(10) not null,
studentsex char(2) check(studentsex='男' or studentsex='女'),
studentage number(2) not null,
studenttel number(11) unique,
studentaddress varchar(50) default '上海',
classid number(2) references classinfo(classid)
);
刪除表:
drop table student_infor;
drop table tb_date_test cascade constraints;
修改表:
Alter table member Add(age number(3),photo vachar2(100)) // 增加字段
Alter table member modify(name varchar2(30)); // 修改字段
Alter table member drop column age; //刪除字段
......
創建視圖
CREATE VIEW empvu80
AS SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 80;
//查詢
SELECT * FROM salvu50;
//刪除
DROP VIEW empvu80;
序列:
同義詞:
CREATE SYNONYM d_sum FOR dept_sum_vu;
創建用戶和角色
//創建用戶
CREATE USER user_name
IDENTIFIED BY password
[ DEFAULT TABLESPACE default_tablespace_name ] //分配表空間
[
QUOTA quota [ K | M ] | UNLIMITED ON tablespace_name
[ ACCOUNT LOCK | UNLOCK ]
] ;

//修改用戶
ALTER USER user_name IDENTIFIED BY new_password ;
//刪除用戶
DROP USER user_name [ CASCADE ] ;
//創建角色
create role to test_role;
//賦予權限
grant select on employees to test_role;
······
//將角色賦予用戶
grant test_role to scott;
//刪除角色
drop role test_role;
權限控制
grant all on employees to public;
grant select on employees to scott with grant option;--授予可傳遞權限
grant connect to scott;
grant create table to scott;
grant create procedure,create function to scott;
grant select on employees to scott;
grant update on employees to scott;
grant all on employees to scott;
revoke connect from scott;
revoke all on employees from scott;
三、SQL語句操作題(30)查詢語句(單表簡單查詢,單表分組聚合查詢,兩表連接查詢,嵌套子查詢)單表簡單查詢
select * from emp;--查詢emp表
select empno,ename,job from emp;--查詢emp表中指定的列
select empno as員工編號,ename as員工姓名from emp;--第一種按指定的別名顯示查詢emp表中指定的列
select empn0 en0,ename en from emp;--第二種按指定的別名顯示查詢emp表中指定的列,比較常用
select distinct job from emp;--查詢指定的列表并去除重復的數據
select distinct job,deptno from emp;--只有所有的列數據全重復才可以合并
select'員工編號是' || empno || '姓名是' || ename || '的工作是' || job from emp;--sql中字符串用單引號表示,連接符號是 ||
select ename,sal*12from emp;--查詢中進行四則運算,必須是數值類型,在sql中并不推薦四則運算會影響性能
單表分組聚合查詢
select empno,avg(sal) as avgsal
from scott.emp
group by empno
having avg(sal)>=1300
order by avgsal desc;
兩表連接查詢內連接
select * from 表1 [inner] join 表2 on 表1.字段1=表2.字段1;
select * from 表1,表2 where 表1.字段1=表2.字段1;
左外連接
select * from 表1 left outer join 表2 on 表1.字段1=表2.字段1;
select * from 表1 left outer join 表2 where 表1.字段1=表2.字段1;
右外連接
select * from 表1 right outer join 表2 on 表1.字段1=表2.字段1;
select * from 表1 right outer join 表2 where 表1.字段1=表2.字段1;
全外連接
select * from 表1 full outer join 表2 on 表1.字段1=表2.字段1;
嵌套子查詢
//單行子查詢
SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE last_name = ‘Taylor’)
AND salary >
(SELECT salary
FROM employees
WHERE last_name = ‘Taylor’);
//嵌套子查詢中的having語句
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) >
(SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
//多行子查詢
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ANY //any、in、all都可用于多行子查詢
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG';
四、程序設計題(20)PL/SQL基本語法和程序結構,儲存過程的定義和調用,函數的定義和調用PL/SQL基本語法和程序結構
DECLARE
a number(2) := 10; //定義變量
BEGIN
a:= 10;
-- check the boolean condition using if statement

IF( a < 20 ) THEN
-- if condition is true then print the following
dbms_output.put_line('a is less than 20 ' );
END IF;
dbms_output.put_line('value of a is : ' || a);
END;
儲存過程的定義和調用
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img--97)(D:\233\\1.png)]
declare
p_empno in emp.pemno%type
begin
p_empno := 110;
taxinfo(p_empno);
end;
函數同上
五、系統工具使用(10)SQL * PLUS常用命令的使用;數據庫啟動與關閉,創建和修改表空間SQL * PLUS常用命令的使用;數據庫啟動與關閉,創建和修改表空間
SET命令用來設置SQL*Plus的運行環境。語法格式為:SET system_option value
set linesize {80|n} //設置SQL*Plus在一行中能夠顯示的總字符數,默認值為80。可以的取值為任意正整數。
Set newpage {1|n|none} //設置每頁打印標題前的空行數,默認值為1。
set pagesize {14|n} //設置每頁打印的行數,該值包括NEWPAGE設置的空行數。
set pause{off|on|text} // 設置SQL*Plus輸出結果時是否滾動顯示。當取值為ON時表示輸出結果的每一頁都暫停,用戶按下回車鍵后繼 續顯示;取為字符串時,每次暫停都將顯示該字符串。
DESCRIBE命令可以返回數據庫中所存儲的對象的描述。對于表、視圖等對象而言,DESCRIBE命令可以列出其各個列的名稱以及各個列的屬性。除此之外,DESCRIBE還會輸出過程、函數和程序包的規范
使用PROMPT命令可以在屏幕上輸出一行數據,這種輸出方式非常有助于在存儲的腳本文件中向用戶傳遞相應的信息。PROMPT命令的語法形式如下:PROMPT prompt_text;
Prompt_text表示用于指定要在屏幕上顯示的提示信息
數據庫的啟動
1.模式:只打開了數據庫實例,此時讀取參數文件;命令: ;2.MOUNT:根據參數文件中控制文件的位置找到并打開控制文件,讀取控制文件中的各種參數信息,但是此時并不打開數據文件。命令:alter mount;3.open:數據庫將打開數據庫進行一系列的檢查工作,這些檢查工作用于數據恢復。命令:(1): open或者(默認啟動到open狀態)(2)alter open;
數據庫的關閉
關閉數據庫的操作正好和打開數據庫的操作相反,先關閉各種數據文件,關閉打開的控制文件,然后關閉實例。數據庫的關閉經歷了close,,三個階段。
1.close:關閉數據庫,日志文件等;命令:alter close;2.:關閉控制文件;命令:alter ;3.:關閉實例命令:可接參數:關閉數據庫時,不允許有新的數據庫連接,只有當前的所有連接都退出是才會關閉數據庫,是一種安全的關閉數據庫的方式;接參數:中斷當前事務,回滾未提交的事物,強制斷開所有用戶連接和執行檢查點把臟數據寫到數據文件中,該方式可以較快速且安全的關閉數據庫。接參數:數據庫當前連接繼續執行,但不允許新的連接,一旦當前所有事物執行完畢,則關閉數據庫。接參數abort:該方式很不安全的關閉數據庫,最好不要使用該方式來關閉數據庫。
創建和修改表空間
創建表空間
CREATE TABLESPACE small1 DATAFILE '/home/oracle/app/oracle/oradata/CRM/small1.dbf' SIZE 1G;
修改表空間
ALTER TABLESPACE small1 ADD DATAFILE '/home/oracle/app/oracle/oradata/CRM/small2.dbf' SIZE 100M;
刪除表空間
drop tablespace big1 including contents and datafiles;
查詢表空間
SELECT FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES;