第一篇:數(shù)據(jù)庫 學(xué)習(xí)總結(jié)
數(shù)據(jù)庫學(xué)習(xí)總結(jié)
XX班 姓名 學(xué)號
摘要:在當(dāng)今信息化的社會里,數(shù)據(jù)庫可以說已經(jīng)融入到我們生活的方方面面中,如交通運輸、銀行金融、工商企業(yè)等等。只要有大量的數(shù)據(jù)要管理或者需要有大量數(shù)據(jù)支持的工作,都要使用到數(shù)據(jù)庫,它為我們的生活帶來了便捷。關(guān)鍵詞:數(shù)據(jù)庫,功能、SQL Server的特點
在學(xué)習(xí)《數(shù)據(jù)庫原理及應(yīng)用》這門課之前,就和課本上提到的一個觀點一樣,認為它只是存放數(shù)據(jù)的倉庫而已,但是現(xiàn)在我深深體會到這個觀點是多么的片面。數(shù)據(jù)庫是長期存儲在計算機內(nèi),有組織、可共享的大量的數(shù)據(jù)集合,前者只能表達它的一方面而已。
數(shù)據(jù)庫技術(shù)發(fā)展到今天已經(jīng)是一門非常成熟的技術(shù),它的技術(shù)水平、應(yīng)用水平多比初始時都有了很大的改變,但是它的最基本的特征卻沒有變,概括起來有以下幾個方面:
第一點:數(shù)據(jù)庫是相互關(guān)聯(lián)的的數(shù)據(jù)集合;即在數(shù)據(jù)庫中不僅要能夠表示數(shù)據(jù)本身,還要能夠表示數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系。
第二點:數(shù)據(jù)庫用綜合的方法組織數(shù)據(jù),保證盡可能高的訪問效率;即根據(jù)不同的需要按不同的方法組織數(shù)據(jù),例如順序組織方法、索引組織方法、倒排數(shù)據(jù)組織方法等。
第三點:數(shù)據(jù)庫具有較小的數(shù)據(jù)冗余,可供多個用戶共享;即通過共享共用的數(shù)據(jù),降低數(shù)據(jù)的冗余度,這也能保證數(shù)據(jù)的一致性。
第四點:數(shù)據(jù)庫具有較高的數(shù)據(jù)獨立性;即令數(shù)據(jù)的組織和存儲方法與應(yīng)用程序互不依賴,降低應(yīng)用程序的開發(fā)代價和維護代價。
第五點:數(shù)據(jù)庫能夠保證數(shù)據(jù)的安全、可靠;即擁有(1)、安全控制機制,這可以有效地防止數(shù)據(jù)庫中數(shù)據(jù)被非法使用或非法修改;(2)、完整的備份和恢復(fù)機制,這能保證當(dāng)數(shù)據(jù)遭到破壞時(軟件或硬件故障引起的),能立刻將數(shù)據(jù)完全恢復(fù),從而保證系統(tǒng)能持續(xù)、可靠地運行。
第六點:數(shù)據(jù)庫允許并發(fā)地使用,能有效、及時地處理數(shù)據(jù),并能保證數(shù)據(jù)的一致性和完整性;即當(dāng)多個用戶同時使用相同的數(shù)據(jù)時,數(shù)據(jù)庫能夠協(xié)調(diào)一致,保證不發(fā)生沖突和矛盾。那么對于上面數(shù)據(jù)庫的各種功能和特性是如何實現(xiàn)的呢?當(dāng)然它不是數(shù)據(jù)庫中的數(shù)據(jù)固有的,是靠管理或支持數(shù)據(jù)庫的系統(tǒng)軟件——數(shù)據(jù)庫管理系統(tǒng)(DataBase Management System)提供的。下面我將結(jié)合我所學(xué)習(xí)的內(nèi)容,談?wù)勱P(guān)于數(shù)據(jù)庫管理系統(tǒng)——Mircrosoft SQL Server。
Mircrosoft SQL Server是一個高性能的、多用戶的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它專為客戶/服務(wù)器計算環(huán)境設(shè)計,它提供的內(nèi)置數(shù)據(jù)復(fù)制功能、強大的管理工具和開放式的系統(tǒng)體系結(jié)構(gòu)為基于事物的企業(yè)級信息管理方案提供了一個卓越的平臺。
首先作為一個數(shù)據(jù)庫管理系統(tǒng),Mircrosoft SQL Server應(yīng)該具備如下功能:
1、數(shù)據(jù)庫定義功能:可以定義數(shù)據(jù)庫的結(jié)構(gòu)和數(shù)據(jù)庫的存儲結(jié)構(gòu),可以定義數(shù)據(jù)庫中數(shù)據(jù)之間的聯(lián)系,可以定義數(shù)據(jù)的完整性約束條件和保證完整性的觸發(fā)機制等;
2、數(shù)據(jù)庫操作功能:可以完成對數(shù)據(jù)庫中數(shù)據(jù)的操作,可以裝入、刪除、修改數(shù)據(jù),可以重新組織數(shù)據(jù)庫的存儲結(jié)構(gòu),可以完成數(shù)據(jù)庫的備份和恢復(fù)等操作;
3、數(shù)據(jù)庫的查詢功能:可以以各種方式提供靈活的查詢功能,使用戶可以方便地使用數(shù)據(jù)庫中的數(shù)據(jù);
4、數(shù)據(jù)庫的控制功能:可以完成對數(shù)據(jù)庫的安全性控制、完整性控制、多用戶環(huán)境下的并發(fā)控制等各方面的控制;
5、數(shù)據(jù)庫的通信功能:在分布式數(shù)據(jù)庫或是提供網(wǎng)絡(luò)操作功能的數(shù)據(jù)庫中還必須提供數(shù)據(jù)庫的通信功能。
其次是Mircrosoft SQL Server中系統(tǒng)數(shù)據(jù)庫的作用,每個SQL Server實例包括四個系統(tǒng)數(shù)據(jù)庫(master、model、tempdb和msdb)以及一個或多個用戶數(shù)據(jù)庫。下面是關(guān)于四個系統(tǒng)數(shù)據(jù)庫的介紹:
1、master數(shù)據(jù)庫:用于存儲SQL Server系統(tǒng)的所有系統(tǒng)級信息,包括所有的其它數(shù)據(jù)庫的信息、所有數(shù)據(jù)庫注冊用戶的信息以及系統(tǒng)配置設(shè)置等。
2、tempdb數(shù)據(jù)庫:用以保存所有的臨時表和臨時存儲過程,還可以滿足任何其它的臨時存儲要求,例如存儲SQL Server生成的工作表。
3、model數(shù)據(jù)庫:它是一個模板,當(dāng)使用CREATE DATABASE命令建立新的數(shù)據(jù)庫時,新的數(shù)據(jù)庫的一部分總是通過復(fù)制model數(shù)據(jù)庫中的內(nèi)容創(chuàng)建,剩余部分由空頁填充。
4、msdb數(shù)據(jù)庫:用于SQL Server代理程序調(diào)度報警和作業(yè)等系統(tǒng)操作。同時在安裝SQL Server時,還建立了一個pubs數(shù)據(jù)庫,這是一個用戶數(shù)據(jù)庫,是一個可以用于練習(xí)的示例數(shù)據(jù)庫。在建立數(shù)據(jù)庫時,每個數(shù)據(jù)庫至少有兩個文件:一個主文件(存儲數(shù)據(jù)庫的啟動信息、用戶數(shù)據(jù)和系統(tǒng)表,以.mdf為擴展名)和一個事物日志文件(用來保存恢復(fù)數(shù)據(jù)庫的日志信息,以.ldf為擴展名)。
接下來是SQL Server的數(shù)據(jù)庫結(jié)構(gòu):
在SQL Server數(shù)據(jù)庫中,數(shù)據(jù)被組織為用戶可以看得見的邏輯組件,主要包括基本表、視圖、存儲過程、觸發(fā)器和用戶等。SQL Server在發(fā)出CREATE DATABASE命令建立數(shù)據(jù)庫時,會同時發(fā)出建立操作系統(tǒng)文件、申請物理存儲空間的請求;當(dāng)CREATE DATABASE命令成功執(zhí)行后,在物理上和邏輯上都建立了一個新的數(shù)據(jù)庫。這就可以在數(shù)據(jù)庫庫中建立各種用戶所需的邏輯組件,如基本表、視圖等。
然后是Mircrosoft SQL Server管理中的幾個特點:
1、數(shù)據(jù)庫鏡像:通過數(shù)據(jù)庫鏡像,將自動失效轉(zhuǎn)移建立到一個待用服務(wù)器上增強SQL服務(wù)器系統(tǒng)的可用性。
2、在線檢索操作:即在指數(shù)數(shù)據(jù)定義語句(DDL)執(zhí)行期間,允許對基地表格或集簇索引數(shù)據(jù)和任何相關(guān)的檢索,進行同步修改。例如,當(dāng)一個集簇索引正在重建時,可以對基低數(shù)據(jù)繼續(xù)進行更新、查詢。
3、快速回復(fù):新的、速度更快的恢復(fù)選項可以改進SQL服務(wù)器數(shù)據(jù)庫的可用性,管理人員將能夠在事物日志向前滾動之后,重新連接到正在恢復(fù)的數(shù)據(jù)庫。
4、快照隔離:通過快照隔離,使用者能夠使用與傳統(tǒng)一致的視野觀看數(shù)據(jù)庫,存取最后執(zhí)行的一行數(shù)據(jù),這也為服務(wù)器提供了更大的可升級性。
5、專門的管理員連接:即即使在一個服務(wù)器被鎖住,或者因為其他原因不能使用時,管理員可以通過這個連接,接通這個正在運行的服務(wù)器。這一功能能讓管理員,通過操作診斷或Transact-SQL指令,找到并解決發(fā)現(xiàn)的問題。最后是關(guān)于學(xué)習(xí)過程中的體會,數(shù)據(jù)庫能給我們生活帶來便捷,但它的學(xué)習(xí)肯定不會那么一帆風(fēng)順,總會遇到問題。我想解決問題最好的方法是理解它,從多方面理解、掌握它。
首先是對概念的理解,例如關(guān)于游標(biāo)的使用,最基本的操作語句如定義游標(biāo):DECLARE CURSOR、打開游標(biāo):OPEN、從游標(biāo)中讀記錄:FETCH、關(guān)閉游標(biāo):CLOSE、釋放游標(biāo):DEALLOCATE、執(zhí)行:EXEC等,如果都不明白這些語句含義,如何掌握它?其次是對數(shù)據(jù)結(jié)構(gòu)的理解,數(shù)據(jù)庫就象房子,也有地基、承重墻(框架)、門、窗、內(nèi)部家俱飾品等,對應(yīng)到數(shù)據(jù)庫里,一樣可以找到相應(yīng)的東東。地基就象數(shù)據(jù)庫的系統(tǒng)表,不論以后要蓋多少房子,多高多大的房子,都要在地基上開始;框架(承重墻)可以是每張表,也可以是每張表中的字段,是不可逾越而又相互交叉的;門窗就是數(shù)據(jù)庫中的通道,就是索引、訪問權(quán)限、視圖等;內(nèi)飾、家具就是最終的用戶數(shù)據(jù),是放在數(shù)據(jù)庫這所房子里的東西。然后是在思維上的理解,東西方的思維方式上存在差異,比如在多表查詢、數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化時需要多考慮這種理解和實施層面的“差異性”。
第二篇:數(shù)據(jù)庫學(xué)習(xí)總結(jié)(模版)
電子商務(wù)數(shù)據(jù)庫技術(shù)----SQL Server 篇
學(xué)習(xí)總結(jié)
------60951P南信院這學(xué)期我們學(xué)習(xí)了數(shù)據(jù)庫的SQL Server 篇,具體內(nèi)容提綱如下:
1、數(shù)據(jù)庫系統(tǒng)的基本概念
2、SQL語言
一、數(shù)據(jù)庫的基本概念
1、數(shù)據(jù)庫
1)數(shù)據(jù)庫是統(tǒng)一管理并長期儲存在計算機內(nèi)優(yōu)結(jié)構(gòu)的大量共享的數(shù)據(jù)集合。
2)現(xiàn)在所有的數(shù)據(jù)庫都是關(guān)系型數(shù)據(jù)庫(二維表)
3)數(shù)據(jù)獨立性:物理獨立、邏輯獨立
4)實現(xiàn)數(shù)據(jù)獨立性:三級模式、二級映射
三級模式:外外模式、概念模式、內(nèi)模式
二級映射:外模式/概念模式
概念模式/內(nèi)模式
5)邏輯結(jié)構(gòu):表結(jié)構(gòu)(外模式)
Eg:S(sno,sname)
物理結(jié)構(gòu):數(shù)據(jù)庫存取的方式位置(內(nèi)模式)
Eg:P(sno char(8)
Snamechar(10))
邏輯結(jié)構(gòu)比物理結(jié)構(gòu)少了數(shù)據(jù)類型
2、數(shù)據(jù)庫管理系統(tǒng)(DBMS)功能:
1)數(shù)據(jù)定義
2)數(shù)據(jù)操縱
3)安全與備份
3、六個約束
主鍵約束、非空約束、檢查約束、默認約束、外鍵約束、唯
一性約束
4、任何一張表必須有且只有一個主鍵(PK),一個主鍵可以有多個
字段組成5、關(guān)系性質(zhì)
1)每個字段的每個值都是單值
2)每個字段里的值都具有相同的數(shù)據(jù)類型
3)行順序無關(guān)緊要
4)列順序無關(guān)緊要
5)行不能重復(fù)
6)列不能重復(fù)
二維表必須滿足以上關(guān)系性質(zhì)才是關(guān)系
關(guān)系:二維表結(jié)構(gòu)
6、數(shù)據(jù)完整性
1)實體完整性
2)參照完整性
3)用戶自定義完整性
二、SQL語言
1、SQL功能:數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制
2、單表查詢
固定格式:Select...from…where3、Select子句
*表示一個表中的所有字段
Eg:查詢計算機系所有學(xué)生的姓名、學(xué)號、性別、年齡、專業(yè)Select * from students where sdept=”computer”
4、Where子句
1)多條件(And,Or連接)
2)Between...and...3)In(等于期中的某一個)
Like模糊查詢(條件不完整)
Eg:查詢姓王的學(xué)生的學(xué)號、姓名、專業(yè)
Select sno,sname,sdept from students where sname
like ‘王%’
5、統(tǒng)計函數(shù)
Count(*)個數(shù)包含null
Count(列名)個數(shù)去掉null
Sum(列名)和
Avg(列名)平均值
Max(列名)最大值
Min(列名)最小值
6、分組Group by
1)包含Group by子句的查詢語句中Select子句指定的列名,要么是統(tǒng)計函數(shù),要么是包含在Group by子句中的列名。
2)分組條件
Having 必須和Group by一起使用,不可單獨。
7、排序Order by
ASC(升序)(默認)
DESC(降序)
8、多表查詢
1)內(nèi)連接(兩張表或以上連接)
2)外連接(兩張表連接)
Eg:查詢所有學(xué)生的選課情況,結(jié)果包括學(xué)號、課程、姓名 內(nèi)連接:Select students.sno, cno , sname from students ,enrollment where students.sno*=enrollment.sno
外連接:Select students.sno, cno , sname from students
left join enrollment on student.sno=enrollment.sno9、嵌套查詢
Eg:查詢與Sue選修同樣課程學(xué)生的學(xué)號、課程號、姓名Select students.sno,cno,sname from students,
第三篇:Oracle數(shù)據(jù)庫學(xué)習(xí)總結(jié)
Oracle數(shù)據(jù)庫學(xué)習(xí)總結(jié)
1.set linesize xx;設(shè)置行間距,常用數(shù)值有100,200,300
2.set pagesize xx;設(shè)置每頁顯示行數(shù)
3.ed x;表示新建一個x.sql文件,通過文件編輯SQL語句,然后用@x命令可以調(diào)用剛才的命令
4.CONN username/password;命令可以建立用戶的連接,需要注意的是sys用戶是超級管理員,連接是時需要在末尾加上AS SYSDBA 以系統(tǒng)管理員的身份進行連接
5.如果表是歸某個用戶特有的,在查詢的時候需要加上用戶名 即以 用戶名.表名 的格式查詢
6.SHOW USER;命令可以顯示當(dāng)前連接的用戶名
7.SELECT * FROM tab;可以顯示當(dāng)前用戶下的所有數(shù)據(jù)表
8.“ / ”表示重復(fù)執(zhí)行上一次的SQL命令操作
9.SELECT xx別名,xx 別名 FROM xx;搜索指定列名,并指定別名,方便顯示
10.關(guān)鍵字DISTINCT 可以消除重復(fù)值 如 SELECT DISTINCT xx FROM xx;
11.Oracle中提供的字符串連接操作,使用“||”表示,相當(dāng)于Java的“+”普通字符用“ ' ” 括起來
如: SELECT'員工姓名是'||ename||'員工卡號是'||empnoFROM emp;
12.查詢語句 BETWEEN xx AND xx 是包括邊界的13.查詢?nèi)掌诘臅r候要加上''把日期引起來
例如:SELECT * FROM emp WHERE hiredate BETWEEN '1-1月-81' AND '08-9月-81';
14.模糊查詢中“%”可以匹配任意長度的內(nèi)容,“_”可以匹配一個長度的內(nèi)容,如果沒輸入模糊查詢關(guān)鍵字,那么默認查詢?nèi)繑?shù)據(jù),like關(guān)鍵字可以用在任何地方,可以匹配數(shù)字、字符、日期等。
15.SQL中不等于可以用“<>”或者“!=”表示
16.ORDER BY語句中 ASC表示升序,DESC表示降序,在沒指定的時候默認按照升序排序
17.Oracle中的單行函數(shù)有如下,默認的所有的函數(shù)都要到表中執(zhí)行,加上關(guān)鍵字DUAL只會產(chǎn)生一個臨時表
UPPER('xxx')將小寫轉(zhuǎn)換為大寫
LOWER('xxx')將大寫轉(zhuǎn)換為小寫
INITCAP('xxx')將首字母大寫
CONCAT('','')字符串連接
SUBSTR('xxx',x,x)字符串截取,從0或1開始截取效果是一樣的,因為Oracle比較智能,要是輸入的參數(shù)為負數(shù),則表示倒著截取
LENGTH('xxx')字符串長度
REPLACE('xxx','x','x')字符串替換
ROUND(xxx,xx)四舍五入 xxx需要四舍五入的數(shù)值,xx保留的小數(shù)位,可以加負數(shù) TRUNC(xxx)截斷操作,默認小數(shù)點后的全部截斷,也可以指定小數(shù)點保留位數(shù)如TRUNC(789.536,2)得到的結(jié)果是789.53,也可以加負數(shù)如TRUNC(789.536,-2)結(jié)果是700
18.SELECT sysdate FROM DUAL;可以求出當(dāng)前的日期
19.Oracle 中提供了以下日期函數(shù)支持:
MONTHS_BETWEEN()求出給定日期范圍的月數(shù)
ADD_MONTHS(xxx,xxx)在指定日期加上指定的月數(shù)
NEXT_DATE(xxx,'')求出下一個給定日期數(shù)
TO_CHAR()可以將年、月、日進行分割
例如
TO_CHAR(hirdate,'yyyy')year,TO_CHAR(hirdate,'mm')months,TO_CHAR(hirdate,'dd')day 還可以對時間進行格式化輸出 如TO_CHAR(hirdate,'yyyy-mm-dd')
TO_CHAR(hirdate,'fmyyyy-mm-dd')可以去掉前導(dǎo)0
TO_CHAR()還可以對數(shù)字進行格式化 如
SELECT ename,TO_CHAR(SAL,'99,999')FROM emp;
注意:一定要用9來表示
$表示美元符號,L表示Local的縮寫,以本地語言進行金額顯示
TO_NUMBER()將字符串變?yōu)閿?shù)字
TO_DATE()將字符串變?yōu)镈ate類型 例如 SELECT TO_DATE('2009-12-8','yyyy-mm-dd')FROM dual;
TO_NVL()可以將NULL的內(nèi)容變?yōu)橹付ǖ膬?nèi)容
DECODE()相當(dāng)于Java的if else else語句
例如SELECT DECODE(1,1,'內(nèi)容是1',2,'內(nèi)容是2',3,'內(nèi)容是3')FROM dual;將輸入 內(nèi)容是1
20.左右連接
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE
e.deptno(+)=d.deptno;此例中是右連接,以deptno表為準(zhǔn)。
21.SQL1999語法
CROSS JOIN 交叉連接 會產(chǎn)生笛卡爾積
NATURAL JOIN 自然連接 自動進行關(guān)聯(lián)字段匹配 可以消除笛卡爾積
USING 子句:直接關(guān)聯(lián)操作列 如 SELECT * FROM emp e JOIN dept USING(deptno)WHERE deptno=30;
ON 子句 用戶自己編寫連接條件
LETF JOIN/RIGHT JOIN 左右連接
SELECT e.empno,e.ename,d.deptno,d.dname,d.loc FROM emp e right OUTER JOIN dept d ON(e.deptno=d.deptno);
22.分組查詢GROUP BY 放在where之后
常見的組函數(shù)有
COUNT();
MAX();
MIN();
AVG();
SUM();
用法如下:SELECT deptno,count(empno)FROM emp GROUP BY deptno;
語法:SELECT deptno,empno,count(empno)FROM emp GROUP BY deptno;是錯誤的,原因是使用分組函數(shù)的時候,不能出現(xiàn)分組函數(shù)和分組條件以外的字段。
語法:SELECT deptno,count(empno)FROM emp;是錯誤的,原因是不使用分組的時候,則只能單獨使用分組函數(shù)
分組函數(shù)只能在分組中使用,不允許子啊where語句中個使用,要使用個分組條件可以加上HAVING
例如:SELECT deptno,avg(sal)FROM emp GROUP BY deptno having avg(sal)>2000;注意:分組函數(shù)可以嵌套使用,但是在組函數(shù)嵌套使用的時候不能再出現(xiàn)分組條件的查詢語句
如下語法是錯誤的:SELECT deptno,max(avg(sal))FROM emp GROUP BY deptno;不能出現(xiàn)deptno
如下語法是正確的:SELECT max(avg(sal))FROM emp GROUP BY deptno;
23.子查詢中
>ANY 比里面的最小值大
=ANY 與IN用法相同 >ALL 比里面的最大值大 24.表復(fù)制 CREATE TABLE myemp AS SELECT * FROM emp;既復(fù)制表結(jié)構(gòu),又復(fù)制表內(nèi)容 CREATE TABLE myemp AS SELECT * FROM emp where 1=2;后面的條件不可能成立,只復(fù)制表結(jié)構(gòu) 25.Oracle 中常用的數(shù)據(jù)類型 VARCHAR、VARCHAR2 代表一個字符串,有長度限制,為255 NUMBER 分為兩種 1)NUMBER(n)代表一個整數(shù),數(shù)字的長度是n,可以使用INT 2)NUMBER(m,n)代表一個小數(shù),小數(shù)長度為n,整數(shù)長度為m-n,可以使用FLOAT DATE 代表日期的類型,日期要按照標(biāo)準(zhǔn)的日期格式進行存放 CLOB 大對象,表示大文本數(shù)據(jù),一般可以存放4G的文本 BLOB 大對象,表示二進制數(shù)據(jù)最大可以存放4G,例如存放歌曲、電影、圖片 26.表的創(chuàng)建 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 27.插入數(shù)據(jù) INSERT INTO person(pid,name,birthdate,age)VALUES('222','里斯 ',TO_DATE('1989-02-09','yyyy-mm-dd'),45); 28.更改表中數(shù)據(jù) 增加表結(jié)構(gòu):ALTER TABLE person ADD(address VARCHAR2(50)DEFAULT '暫無地址'); 修改已存在的列:ALTER TABLE person MODIFY(name VARCHAR2(40)DEFAULT '無名氏'); 29.表的重命名(只能在Oracle中使用) RENAME XXX TO XXX; 30.約束(主要分為5類) 1)主鍵約束 主鍵表示是一個唯一的標(biāo)識。本身不能為空 2)唯一約束 在一個表中只允許建立一個主鍵約束,而其他列如果不希望重復(fù)值的話,則可以使用唯一約束 3)檢查約束 檢出一個列的內(nèi)容是否合法 4)非空約束 5)外鍵約束 在兩張表中進行約束的操作 刪除時應(yīng)該先刪除子表,再刪除父表 創(chuàng)建主鍵: 語法1 CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 語法2: CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200),birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_id PRIMARY KEY(pid)); 創(chuàng)建非空約束 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 創(chuàng)建唯一約束 語法一 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)UNIQUE NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男'); 語法二 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4),sex VARCHAR2(2)DEFAULT '男',CONSTRAINT p_name UNIQUE(name),); 創(chuàng)建檢查約束 語法一 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL CHECK(age BETWEEN 0 AND 150),sex VARCHAR2(2)DEFAULT '男' CHECK(sex IN('男','女','中')),); 語法二 CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男' ,CONSTRAINT p_age CHECK(age BETWEEN 0 AND 150),CONSTRAINT p_sex CHECK(sex IN('男','女','中'))); 創(chuàng)建外鍵約束 --person表 CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男'); --book表 CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid)); 對于刪除,應(yīng)該先刪除book表再刪除person表 也可以使用級聯(lián)刪除,強制刪除某張表 DROP TABLE person CASCADE CONSTRAINT; 設(shè)置外鍵約束級聯(lián)刪除 --person表 CREATE TABLE person(pid VARCHAR2(18)PRIMARY KEY,name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男'); --book表 CREATE TABLE book(bid NUMBER PRIMARY KEY,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18),CONSTRAINT b_pid_fk FOREIGN KEY(pid)REFERENCES person(pid)ON DELETE CASCADE); 31.修改約束 如果一張表已經(jīng)建立完成之后,則可以為其添加約束 ALTER TABLE 表名稱 ADD CONSTRAINT 約束名稱 約束類型(約束字段); 關(guān)于約束名稱的命名最好要統(tǒng)一: PRIMARY KEY :主鍵字段_PK UNIQUE:字段_UK CHECK:字段_CK FOREIGH KEY:父字段_子字段_FK 例如: DROP TABLE person; CREATE TABLE person(pid VARCHAR2(18),name VARCHAR2(200)NOT NULL,birthdate DATE,age NUMBER(4)NOT NULL ,sex VARCHAR2(2)DEFAULT '男'); ALTER TABLE person ADD CONSTRAINT pid_PK PRIMARY KEY(pid); ALTER TABLE person ADD CONSTRAINT name_UK UNIQUE(name); ALTER TABLE person ADD CONSTRAINT age_CK CHECK(age BETWEEN 1 AND 150);CREATE TABLE book(bid NUMBER ,bname VARCHAR2(30),bprice NUMBER(5,2),pid VARCHAR2(18)); ALTER TABLE book ADD CONSTRAINT book_PK PRIMARY KEY(bid); ALTER TABLE book ADD CONSTRAINT pid_FK FOREIGN KEY(pid)REFERENCES person(pid);刪除約束 ALTER TABLE person DROP CONSTRAINT name_UK; ALTER TABLE person DROP CONSTRAINT age_CK; 數(shù)據(jù)庫學(xué)習(xí)總結(jié)-Marlon 目錄一、二、三、四、五、六、七、八、ORACLE_簡介.............................................................................................................................................................1 ORACLE_簡單查詢.....................................................................................................................................................3 ORACLE標(biāo)量函數(shù)和算數(shù)運算..................................................................................................................................5 ORACLE_多表查詢.....................................................................................................................................................9 ORACLE_列函數(shù)和分組...........................................................................................................................................10 ORACLE_子查詢.......................................................................................................................................................12 ORACLE_表的更新操作...........................................................................................................................................13 ORACLE_表與視圖的管理.......................................................................................................................................15 一、ORACLE_簡介 ? Oralce數(shù)據(jù)庫發(fā)展 Oracle 8 Oracle 8i:i表示internet,標(biāo)識著Oracle公司正式進軍互聯(lián)網(wǎng)。Oracle9i Oracle10g:g表示grid,即網(wǎng)絡(luò)技術(shù)。Oracle11g ? Oracle體系結(jié)構(gòu)一 物理結(jié)構(gòu): 文件系統(tǒng) 控制文件 數(shù)據(jù)文件 日志文件 參數(shù)文件(不是數(shù)據(jù)庫的組成成分) ? Oracel體系結(jié)構(gòu)三 邏輯結(jié)構(gòu): block 快 extent 盤區(qū) segment 段 tablespace 表空間 datafile 數(shù)據(jù)文件 ? SQL * Plus下的常用命令 ? 連接到SQL*PLUS sqlplus user/password[as sysdaba|sysoper] sqlplus/nolog ? 啟動數(shù)據(jù)庫 startup mount 啟動實例,打開控制文件,但不打開數(shù)據(jù)文件 startup nomount 只啟動實例 ? 關(guān)閉數(shù)據(jù)庫 shutdown immediate ? 迫使每個用戶執(zhí)行為當(dāng)前的SQL語句,立即斷開連接 shutdown transactional ? 迫使用戶執(zhí)行完當(dāng)前事務(wù)時,斷開連接 shutdown abort 強制關(guān)閉數(shù)據(jù)庫 ? 常用SQL命令 show user:查看當(dāng)前連接的用戶 connect scott/tiger: 采用scott的用戶名/tiger的密碼連接數(shù)據(jù)庫 desc table_name:查看tableName表結(jié)構(gòu) quit|exit:退出 disconnect:斷開連接 clear screen:清屏,相當(dāng)于Windows下的cls命令 select * from tab:列出當(dāng)前用戶下的所有表 @pata 執(zhí)行pata制定的腳本文件 ? Oracle常用基本數(shù)據(jù)類型 varchar2/varchar:變成字符串 char:定長字符串 Integer:整型 number(m,n):數(shù)字型 smallint:短整型 float:浮點數(shù) decimal:十進制數(shù)字(小數(shù))date:日期型 二、ORACLE_簡單查詢 ? SQL結(jié)構(gòu)化查詢語言(Structured Query Language) ? SQL分類 1.數(shù)據(jù)定義語言(Data Definition Language,DDL):create、alter、drop。 create table 表名;alter table add 新列名 數(shù)據(jù)類型;drop table 表名;2.數(shù)據(jù)操縱語言(Data Manipulation Language,DML):insert、update、delete、select。Insert into 表名(字段1,字段2…)values(值1,值2…);update student set sage=22 where sno='200215';(將學(xué)生200215的年齡改為22歲)select distinct job from emp;去除重復(fù)行 3.數(shù)據(jù)控制語言(Data Control Language,DCL):commit work、rollback work。? 查詢雇員的所有信息 select * from emp; *表示所有列 ? 查詢語句的格式 select *|列名 from 表名 ? 查詢雇員的編號,姓名,工資 select * from empno,ename,sal from emp; ? 查詢所有職位 select job from emp;select distinct job from emp;distinct: 有區(qū)別的(去除重復(fù)行) ? 查詢工資大于1500的雇員信息,列出編號,用戶名,工資 select empno,ename,sal from emp where sal>1500; ? 帶有where條件查詢語句的基本格式 select *|列名 from 表名 where 條件; ? 比較運算符 大于:> 小于:< 等于:= 大于等于:>= 小于等于:<= 不等于:!=或者<> ? 限定查詢 is null 和 is not null 的使用 ? 查詢每月可以得到獎金的雇員 select empno,ename,comm from emp where comm is not null; select empno,ename,comm from emp where comm is not null and comm>0;? 查詢誰沒有獎金 select empno,ename from emp where comm is null; ? 限定查詢 and 的使用 ? 查詢工資大于1500,并且可以領(lǐng)取獎金的雇員 SQL> select empno,ename,sal,comm from emp where comm is not null and sal>1500; ? 限定查詢 or 的使用 ? 查詢工資大于1500和可以領(lǐng)取獎金的雇員 select empno,ename,sal,comm from emp where sal>1500 or comm is not null;? 查詢沒有獎金的雇員 select empno,ename,comm from emp where comm=0 or comm is null; ? 限定查詢 使用not對條件整體取反 ? 查詢工資不大于1500并且不能領(lǐng)取獎金的雇員 select empno,ename,sal,comm from emp where sal<=1500 and(comm is null or comm=0);select empno,ename,sal,comm from emp where not(sal>1500 or comm is not null); ? 限定查詢 between...and...的使用 ? 查詢基本工資大于等于1500并且小于等于3000的雇員 select empno,ename,sal from emp where sal>=1500 and sal<=3000;select empno,ename,sal from emp where sal between 1500 and 3000;? 查詢1981年雇傭的所有員工 select empno,ename,hiredate from emp where hiredate between'1-1月 1981' and '31-12月 1981';注:日期格式 日-月 年,要匹配上 ? 限定查詢 字符串的比較 ? 查詢姓名是'SMITH'員工的所有信息 select * from emp where ename='SMITH';select * from emp where ename='smith';注:列值區(qū)分大小寫 ? 限定查詢 in的使用 ? 查詢出編號7369,7499,7521的雇員的具體信息 select * from emp where empno=7369 or empno=7499 or empno=7521;select * from emp where empno in(7369,7499,7521); ? 限定查詢 not in的使用 ? 查詢出雇員編號不是369,7499,7521的雇員的具體信息 select * from emp where empno not in(7369,7499,7521); ? 限定查詢 like的使用 ? 查詢雇員的名字第二個字符是M的雇員信息 select * from emp where ename like'_M%';注:_匹配一個字符,%匹配0個多個字母(前綴或后綴的代表)? 查詢1982年入職的所有雇員的信息 select * from emp where hiredate like'%82';? 查詢工資中包含5的雇員信息 select * from emp sal where like'%5%'; ? 對結(jié)果排序-Oracle By ? 查詢員工工資大于1500員工的信息,按工資排序 select * from emp where sal>1500 order by sal;? 查詢工資大于1500員工的信息,按工資降序,按雇傭日期升序排序 select * from emp where sal>1500 order by sal desc,hiredate asc;注:ASC升序,DESC降序,默認ASC。 ascending [?'sendi?]上升的,降序排列(descend [di'send] 的縮寫); 三、ORACLE標(biāo)量函數(shù)和算數(shù)運算 字符函數(shù)的使用 ? 轉(zhuǎn)換為大寫字母 select upper('smith')from dual;注:dual是公共表。upper ['?p?] 上面的,上部的 ? 轉(zhuǎn)換為小寫字母 select lower('SMITH')from dual;注:lower 放下 ? 每個單詞的字母變成大寫,其余字母小寫 select initcap('hello world')from dual ? 串連接(concat):可以使用“||”進行串連接 select concat('HELLO','WORLD')from dual;select 'HELLO'||'WORLD' from dual; ? 求子串(SUBSTR)select substr(ename,1,3)from emp;注:含義為截取ename字段從第一個字符開始,總共三個字符 ? 求長度(LENGTH)select length(ename)from emp; ? 串替換(REPLACE)select replace('HELLO WORLD','WOR','WEL')from dual;結(jié)果: REPLACE('HE-----------HELLO WELLD 注:第一個逗號是原字符,第二個逗號是原字符的一部分,第三部分是替換原字符那個部分。 ? 要求顯示所有雇員的姓名和姓名的后三個字符 select ename,substr(ename,length(ename)-2)from emp;select ename,substr(ename,-3)from emp; ? 四舍五入(Round)select round(789.536)from dual;ROUND(789.536)-------------- 790 ? 四舍五入(Round):指定保留小數(shù)位數(shù) select round(789.536,2)from dual;---------------- 789.54 ? 四舍五入(Round):對整數(shù)四舍五入 select round(789.536,-2)from dual;ROUND(789.536,-2)----------------- 800 ? 截斷小數(shù)位(TRUNC)select trunc(789.536)from dual;TRUNC(789.536)-------------- 789 ? 截斷小數(shù)位(TRUNC):指定保留小數(shù)位 select trunc(789.536,2)from dual;TRUNC(789.536,2)---------------- 789.53 ? 截斷小數(shù)位(TRUNC):對整數(shù)截斷 select trunc(789.536,-2)from dual;TRUNC(789.536,-2)----------------- 700 ? 除空格(TRIM) SQL> SELECT TRIM(55)FROM DUAL;TRIM(55)--------55 ? 取余數(shù)(MOD)select mod(10,3)from dual; ? 日期函數(shù) 運算規(guī)律: 日期+數(shù)字=日期 日期-數(shù)字=日期 日期-日期=數(shù)字(天數(shù)) ? 查詢當(dāng)前日期 select sysdate from dual;SYSDATE-------------10-3月-12 ? 顯示10部門員工進入公司的星期數(shù) select empno,ename,round((sysdate-hiredate)/7)from emp where deptno=10; ? 在指定日期上加入指定的月數(shù)之后的日期(ADD_MONTHS)select add_months(sysdate,4)from dual;ADD_MONTHS(SYS--------------10-7月-12 ? 求出給定日期范圍的月數(shù)(months_between)select empno,ename,months_between(sysdate,hiredate)from emp; ? 下一個給定的星期是那個日期(next_day)select next_day(sysdate,'星期一')from dual;注:表示在當(dāng)前時間的前提下,下個禮拜一的具體日期 ? 求出給定日期所在月份的最后一天日期(last_day)select last_day(sysdate)from dual; ? 轉(zhuǎn)換成字符串(to_char)查詢雇員號,姓名,以及入職的年份 select empno,ename,to_char(hiredate,'yyyy')from emp;注:yyyy匹配年份,mm匹配月份,dd匹配日 ? 使用to_char設(shè)置日期的顯示格式 select empno,ename,to_char(hiredate,'yyyy-mm-dd')from emp; ? 使用fm去掉前導(dǎo)0 select empno,ename,to_char(hiredate,'fmyyyy-mm-dd')from emp;EMPNO ENAME TO_CHAR(HI-------------------------- 7369 SMITH 1980-12-17 7499 ALLEN 1981-2-20 注:正常的值是1981-02-20,02前面的0去掉,變成了1981-2-20.? 通過to_char設(shè)置數(shù)值的格式 select empno,ename,to_char(sal,'99,999')from emp;說明:9代表1位數(shù)字 EMPNO ENAME TO_CHAR--------------------------- 7369 SMITH 800 7499 ALLEN 1,600 7521 WARD 1,250 注:把sal的值分成兩個部分,后三位為一個部分,前兩位為一個部分,用逗號隔開。 ? 顯示余額 select empno,ename,to_char(sal,'$99,999')from emp;說明:$代表美元 ? 轉(zhuǎn)換成數(shù)字(to_number)select to_number('123')+to_number('123')from dual;TO_NUMBER('123')+TO_NUMBER('123')-- 246 ? 轉(zhuǎn)換成日期(to_date)select to_date('2009-07-31','yyyy-mm-dd')from dual;TO_DATE('2009---------------31-7月-09 ? 算數(shù)運算 ? 查詢每個員工的年收入 select empno,ename,(sal+comm)*12 from emp;年收入=工資+獎金 ? 查詢每個員工的年收入 select empno,ename,(sal+comm)*12 income from emp; ? 查詢每個員工的年收入 select empno,ename,(sal+NVL(comm,0))*12 income from emp;注:NVL(comm,0),當(dāng)comm的值為null時,用0替換 ORACLE_多表查詢 ? 格式: select 列名1 別名1,......from 表名1,表名2,......where 條件 order by 列名 ? 查詢員工的編號,姓名,部門編號,部門名稱 select empno,ename,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno; 關(guān)聯(lián)查詢-為表命別名 ? 查詢員工的編號,姓名,部門編號,部門名稱 select empno,ename,e.deptno,dname from emp e,dept d where d.deptno=e.deptno;注:這里的e是emp的別名,d是dept的別名 關(guān)聯(lián)查詢-自連接 ? 查詢出每個雇員的姓名、工作、雇員的直接上級領(lǐng)導(dǎo)的姓名 select e.empno,e.ename,e.job,m.ename mname from emp e,emp m where e.mgr=m.empno;注:mname是m.ename的別名 關(guān)聯(lián)查詢-多表關(guān)聯(lián) 四、? 查詢出每個雇員的姓名,工作,雇員的直接上級領(lǐng)導(dǎo),以及部門名稱 select e.ename,e.job,m.ename,d.dname from emp e,dept d,emp m where e.mgr=m.empno and e.deptno=d.deptno;注:當(dāng)查詢的字段間的關(guān)系涉及到n個表時,則n個表之間關(guān)聯(lián)。 左、右外連接 ? 查詢員工編號,姓名,所在部門號,部門名稱,將沒有員工的部門也顯示出來 select e.ename,d.deptno,d.dname from emp e,dept d where e.deptno(+)=d.deptno;注:(+)在左邊,表示右連接,會列出所有右表中出現(xiàn)但是沒有在左表中出現(xiàn)的行。 ? 查詢雇員的編號,姓名及其領(lǐng)導(dǎo)的編號,將沒有領(lǐng)導(dǎo)的員工也列出來 select e.empno,e.ename,m.empno,m.ename from emp e,emp m where e.mgr=m.empno(+);注:(+)在右邊表示左連接,會列出左表中出現(xiàn)但沒有在右表中出現(xiàn)的行。 ? 交叉連接(cross join):用來長生笛卡爾積 select * from emp cross join dept; ? 自然連接(nutural join):自動進行關(guān)聯(lián)字段的匹配 select * from emp natural join dept; ? using子句:直接指定操作關(guān)聯(lián)列 select * from emp join dept using(deptno) ? on子句:用戶自己編寫連接條件 select * from emp join dept on emp.deptno=dept.deptno; ? left join:左外連接 ? right join:右外連接 五、ORACLE_列函數(shù)和分組 ? 常用的列函數(shù) sum(expression)求和 max(expression)求最大值 min(expression)求最小值 avg(expression)求平均數(shù) count(expression)統(tǒng)計記錄數(shù) count(distinct colname)統(tǒng)計去除重復(fù)行記錄數(shù) nvl(comm,0)當(dāng)comm為null時,用0替換 列函數(shù)的使用 ? 查詢員工的記錄數(shù),員工工資的總和,平均工資,最高工資,最低工資 select count(*)count_emp,sum(sal)sum_sal, max(sal)max_sal,min(sal)min_sal, avg(sal)avg_sal from emp; 列函數(shù)的使用-對null的處理 ? 查詢所有員工的年收入 select sum(sal+comm)from emp;SUM(SAL+COMM)------------- 7800 注:當(dāng)comm為null時,sal+comm是沒有結(jié)果值的 select sum(sal)+sum(comm)from emp;SUM(SAL)+SUM(COMM)------------------ 31225 select sum(sal+nvl(comm,0))from emp;SUM(SAL+NVL(COMM,0))-------------------- 31225 ? 分組查詢 語法格式 select 列名...,列函數(shù) from 表名...where 條件...group by 列名...order by 列名...? 查詢每個部門的人數(shù) select deptno,count(*)from emp group by deptno;規(guī)則:如果在select字句中,有不在列函數(shù)中的列,則該列一定要出現(xiàn)在group by之后。 分組查詢having字句的使用 ? 顯示出平均工資大于2000的部門編號和平均工資 select deptno,avg(sal)from emp group by deptno having avg(sal)>2000; SQL語句的書寫順序 select 列名,列函數(shù) from 表名 where 條件 group by列名 having 條件 order by 列名 SQL語句的執(zhí)行順序 from where group by having select order by ? 查詢20,30部門的平均工資,并將平均工資大于2000的輸出,輸出結(jié)果按平均工資排序 select deptno,avg(sal)from emp where deptno in(20,30)group by deptno having avg(sal)>2000 order by avg(sal); 六、ORACLE_子查詢 在where子句中使用子查詢 ? 查詢工資比7654雇員工資高的全部雇員信息 select * from emp where sal>(select sal from emp where empno=7654);子查詢-in的使用 ? 查詢和smith或jones在同一部門,同一職位工作的員工 select ename from emp where(deptno,job)in(select deptno,job from emp where ename in('SMITH','JONES')); 子查詢-any的使用 ? =any:與in操作符的效果一致 查詢和smith或jones在同一部門,同一職位工作的員工 select ename from emp where(deptno,job)=any(select deptno,job from emp where ename in('SMITH','JONES')); ? >any:只要大于子查詢中的任何一個值即可 select * from emp where sal>any(select min(sal)from emp group by deptno); ? select empno from emp where sal 子查詢all的使用 ? >all:比最大的值大 select * from emp where sal>all (select min(sal)from emp group by deptno);注:select min(sal)from emp group by deptno結(jié)果為 MIN(SAL)---------- 950 800 1300 是每個部門當(dāng)中的最少工資。 ? 七、ORACLE_表的更新操作 ? 創(chuàng)建表副本 create table myemp as select * from emp; ? 插入 ? 到表中 insert的語法 insert into 表名(字段名1,字段名2,......)values(值1,值2......) ? 為myemp中增加一條記錄 insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno)values(7899,'張三','清潔工','7369','14-2月-2005',9000,300,40);注:給定的值要和指定的字段數(shù)一致。 1.如果全部字段都插入值的話,那字段名可以省略。即: insert into 表名 values(值1,值2,.......);2.如果只是部分字段插入值的話,字段名又想省略的話,那么,其余沒有數(shù)據(jù)插入的字段用null填補。 ? to_date:字符型轉(zhuǎn)換成日期型 ? 批量插入記錄 格式: insert into 表名 select 字段列表 from 表名 where 條件 注:insert表和select表列數(shù)等都一致 例如: create table test as select * from emp;insert into test select * from emp; ? 修改記錄 update表名set要修改的字段=新值,要修改的字段=新值,...where條件 ? 將雇員號為7896的雇員的獎金修改為100 update myemp set comm=100 where empno=7896;注:執(zhí)行修改操作時,一定要使用where來指定修改的條件,否則會改變表中的所有記錄。 ? 刪除記錄 delete from 表名 where 條件 ? 刪除雇員編號為7896的雇員信息 delete from myemp where empno=7896;注:執(zhí)行delete操作時,一定要使用where來指定修改的條件,否則會刪除表中所有的記錄。 ? Oralce的事務(wù)處理 commit:提交事務(wù) rollback:回滾操作 注:操作一旦執(zhí)行了commit操作,就再也不能回滾操作了。 八、ORACLE_表與視圖的管理 ? oracle中的常見數(shù)據(jù)類型 varchar、varchar2:表示一個字符串,有長度限制,為255 number: number(n):表示一個整數(shù),數(shù)字的長度是n,可以使用int number(n,m):表示一個小數(shù),數(shù)字的長度為n,整數(shù)長度m-n,可以使用float date:表示日期類型,日期要按照標(biāo)準(zhǔn)格式日期存放。clob:大對象,表示大文本數(shù)據(jù)類型,可存放4G。 blob:大對象,表示二進制數(shù)據(jù),最大可以存放4G,如電影,圖片、歌曲 ? 創(chuàng)建表 語法: create table 表名(字段名稱1 字段類型[default 默認值], 字段名稱1 字段類型[default 默認值],............字段名稱1 字段類型[default 默認值],); ? 復(fù)制表 create table 表名 as(子查詢);注:當(dāng)子查詢不成立時,如果1=2,則只復(fù)制表的結(jié)果,不復(fù)制表的數(shù)據(jù)。 ? 刪除表 語法: drop table 表名; ? 修改表結(jié)構(gòu) ? 增加一列 alter table 表名 add(列名稱 列數(shù)據(jù)類型 default 默認值) ? 刪除列 alter table 表名 drop column 列名稱; ? 修改列的數(shù)據(jù)類型 alter table 表名稱 modify(列的名稱 列的類型 default 默認值);注:1.如果是更改數(shù)據(jù)的長度,則要求更改時,長度不能小于當(dāng)前表中數(shù)據(jù)所具有的最大長度。 2.如果是更改數(shù)據(jù)類型,則要求更改時,該列的所有記錄值都為空。 ? 修改表結(jié)構(gòu) ? 為表重命名 rename 舊表名 to 新表名;注:這是oracle特有的操作 ? 將myemp表改名為iemp SQL> rename myemp to iemp;表已重命名。? 截斷表 truncate table 表名;意義:清空表中的所有數(shù)據(jù),并且立即釋放資源,該操作是不可回滾。 ? 約束-約束的分類 主鍵約束:表示一個唯一的標(biāo)識,本身不能為空 唯一約束:列值不允許重復(fù) 檢查約束:檢查一個列的內(nèi)容是否合法 非空約束:不能為空值,如用戶不能為空(no null)外鍵約束:在兩張表中進行約束的操作 ? 主鍵約束(primary key)主鍵約束一般在id上使用,而且本身已經(jīng)默認了不能為空,主鍵約束可以在建表的時候指定 create table person(pid varchar2(18)primary key, name varchar(30), age number(3), sex varchar2(2)default'男'); 使用constraint指定 constraint [k?n'streint] 約束;強制 create table person(pid varchar2(18), name varchar(30), age number(3), sex varchar2(2)default'男' constraint person_pid_pk primary key(pid););? 非空約束(not null)create table person(pid varchar2(18)primary key, name varchar(30)not null, age number(3), sex varchar2(2)default'男'); ? 唯一約束(unique)create table person(pid varchar2(18)primary key, name varchar(30)unique not null, age number(3), sex varchar2(2)default'男'); ? 視圖 概念:一個視圖實質(zhì)是封裝了一條復(fù)雜的SQL語句 ? 創(chuàng)建視圖 語法: create view 視圖名稱 as 子查詢 ? 創(chuàng)建部門20員工的雇員信息 create view empv20 as select * from emp where deptno=20;注:當(dāng)創(chuàng)建視圖以后,可以像操作表一樣操作視圖。注:視圖的操作會影響到表的操作。 with check option 不能更新創(chuàng)建視圖的條件 with read only 創(chuàng)建只讀視圖 ? 刪除視圖 語法: drop view 視圖名稱 注:當(dāng)刪除視圖所在的表時,則視圖也不能被使用 ? 序列 創(chuàng)建序列語法:sequence ['si:kw?ns] create sequence 序列名稱;create sequence myseq;序列的操作: nextval:取得序列的下一個內(nèi)容 currval:取得當(dāng)前序列的內(nèi)容 ? 創(chuàng)建表驗證序列的操作 create table testseq(next number,curr number);insert into testseq values(myseq.currval,myseq.nextval); ? 創(chuàng)建序列指定每次增長的增量 create sequence myseq increment by 2;注:每次增長2 ? 創(chuàng)建序列指定開始的序列,默認的序列從1開始。create sequence myseq increment by 2 start with 10;注:序列從10開始,每次增長2 ? 創(chuàng)建一個序列1,3,5,7,9.create sequence myseq maxvalue 9 increment by 2 start with 1 cache 2 cycle;注:序列從1開始,每次增長2,最大值為9,循環(huán)兩次。 數(shù)據(jù)庫學(xué)習(xí)總結(jié) 這學(xué)期我們學(xué)習(xí)了數(shù)據(jù)庫應(yīng)用教程這門課,以前并不知道這門課是干什么的,也不懂得什么是數(shù)據(jù)庫,通過這一學(xué)期的學(xué)習(xí),雖然了解的不是非常多,但也有了初步的一點認識。 我大概的明白數(shù)據(jù)庫技術(shù)是處理信息,管理數(shù)據(jù)最有效的一種方法。它具有完善的數(shù)據(jù)管理功能,還具有操作方便,簡單實用等特點。因為我是非計算機專業(yè)的學(xué)生,所以我學(xué)起來就感覺很難,在上第一堂課的時候,因為不了解,于是心里充滿了對這門課的神秘感,在第一堂課上我聽得很認真,我感覺它與其他的課程沒有什么聯(lián)系,不需要其它太多的知識,我想它可能是一門從頭開始學(xué)的課,就沒有太多的擔(dān)憂,然而事實并不是我想的這樣,隨著時間的延長,我發(fā)現(xiàn)每一堂課都比前一堂課難,逐漸的我聽得就越來越吃力,還好書上除了理論知識外還有很多例題和圖片,這對我對知識的理解有很大的幫助。 同時老師每堂課都用詳細的和書上相似的PPT,并且老師講的非常細致,書上的每一個知識他都會仔細的給我們講解,有時遇到比較難的問題他還會很耐心的講解好幾遍直到我們都明白了為止,有時候我們好多人都沒有聽,但只要有人聽,他就會很認真的講。本書的第一章主要介紹數(shù)據(jù)庫系統(tǒng)的基本概念,VFP的開發(fā)環(huán)境,項目管理器等知識,還記得上第一章時老師就告訴我們這一門課程對我們來說比較難學(xué),也鼓勵我們不要放棄,要慢慢的理解,老師總是態(tài)度很和藹的與我們說話,更減少了我們對這一門課的恐懼感。 為了讓我們更好的理解所學(xué)的知識,老師還為我們準(zhǔn)備了與教學(xué)知識相關(guān)的實驗內(nèi)容,一般在每堂理論課后都會有實驗課,所做的實驗都是我們剛學(xué)的那些基本的,重點的知識。這種理論與實驗相結(jié)合的方式加深了我們對教材的理解。剛開始做實驗時,因為是初學(xué),所以老師會把所有的步驟都寫上,讓我們照著做,先熟悉它的基本操作,再慢慢的理解,時間久了,老師就會省去一些簡單的步驟,讓我們自己練習(xí)。并且每次實驗之間都有一定的聯(lián)系,比如下一次實驗時當(dāng)中有的東西就要用到上一次或前幾次的實驗內(nèi)容。如果第一次沒有做或者沒有做完,就會影響到下一次的實驗,剛開始我因為不熟就做不完,也不知道與以后的實驗是有聯(lián)系的,偶爾做完了也不知道保存,直到做到下一次實驗不會做去問老師時,才知道那是上節(jié)課的內(nèi)容,于是我又從第一次重新開始做起。這樣不僅浪費時間,而且趕不上老師的進度,每一節(jié)我就會忙于做以前的任務(wù),而不能及時做當(dāng)天的,從而總覺得自己很忙,但又不知忙了些什么,更不能及時掌握當(dāng)天所學(xué)的知識。使不懂的知識越來越多,自然也就覺得學(xué)起來很吃力。 書中第二章給我們介紹了VFP的基礎(chǔ)知識及數(shù)據(jù)運算,這一章內(nèi)容讓我對數(shù)據(jù)庫有了進一步的理解,這也為我以后學(xué)習(xí)數(shù)據(jù)庫打下了基礎(chǔ),因為基礎(chǔ)的東西才是一切學(xué)習(xí)的前提,沒有這些知識又怎能繼續(xù)學(xué)習(xí)后面的知識。第三章講了表的基本操作,如對表結(jié)構(gòu)的認識,如何創(chuàng)建表和修改表操作,排序與索引,數(shù)據(jù)表的統(tǒng)計,工作區(qū)與多表操作,表文件等。這一章內(nèi)容是數(shù)據(jù)處理與操作的前提基礎(chǔ)。每一章的內(nèi)容由淺入深,層層相扣,關(guān)系密切。這對我們學(xué)好這門課有很大幫助。 通過這一學(xué)期的學(xué)習(xí)我了解到數(shù)據(jù)庫有很多優(yōu)點,對我們的學(xué)習(xí)和生活非常有用,第一,它可以實現(xiàn)數(shù)據(jù)共享,所有用戶可同時存取數(shù)據(jù)庫中的數(shù)據(jù),也可以用各種方式通過接口使用數(shù)據(jù)庫,這樣大大方便了我們每一個人的學(xué)習(xí)與生活。第二,它可以減少數(shù)據(jù)的冗余度,與其他的一些文件系統(tǒng)相比,因為數(shù)據(jù)庫實現(xiàn)了數(shù)據(jù)共享,從而避免了用戶各自建立應(yīng)用文件,減少了大量重復(fù)數(shù)據(jù),減少了數(shù)據(jù)冗余,這一特點使我們的操作更方便更快捷。減少了時間的浪費,提高了工作的效率。第三,數(shù)據(jù)庫可以確保數(shù)據(jù)的安全性和可靠性,可以防止數(shù)據(jù)丟失,保證數(shù)據(jù)的正確性和有效性,同時數(shù)據(jù)庫可以及時發(fā)現(xiàn)故障并修復(fù)故障,從而防止數(shù)據(jù)被破壞。數(shù)據(jù)庫的這一系列特點都決定了它有很強大的功能,可以為我們提供很多方便,提高了我們的學(xué)習(xí)生活效率和質(zhì)量,是一門很值得我們?nèi)W(xué)習(xí)的一門課程。我們應(yīng)該重視它,使其更好地幫助我們。現(xiàn)在想起來還有一點點后悔,當(dāng)時沒有好好聽。 在這一學(xué)期有限的幾次實驗課后,我雖然沒有學(xué)會很多,但也學(xué)會了一些簡單的操作,我學(xué)會了一些簡單的數(shù)據(jù)運算;會建立一些簡單的表,修改表的結(jié)構(gòu)和在表中輸入簡單的記錄以及對表記錄的定位和修改;創(chuàng)建與編輯數(shù)據(jù)庫等比較容易簡單的操作。有時候在做實驗時,對于實驗中的一些東西我不怎么了解,但我還會去做,因為我想只有多練習(xí)才能熟練,也才能理解掌握知識。我不知道這一門課對其他同學(xué)來說怎么樣,但對我來說卻有些難,但我會努力。因為我認為它對我以后考計算機二級有很大的幫助。 很快這一學(xué)期馬上就要結(jié)束了,數(shù)據(jù)庫這一門課也很快就要結(jié)束了,但這一學(xué)期的學(xué)習(xí)讓我知道了很多,尤其是老師的耐心,老師的敬業(yè)精神感動了我,每一次還在午休時就有不想去上課的沖動,但我都克服了,因為我想到老師從那么遠來給我們上課,他能來,為什么我不能,所以每次我都會說服自己要好好上課。這不僅僅對我的學(xué)習(xí)有很大的啟示,更重要的是,他也告訴了我在以后的人生中如何去做事,如何去做人。再做任何事時都應(yīng)該認真負責(zé),任何一個人都應(yīng)該被尊重。因為有人還是想聽,所以每次有人說話時,老師就會說你可以不聽,可以睡覺,但不能影響其他人聽課。上次清明放假時,好多人想回家,所以大部分人都沒有來,老師并沒有生氣,而是很理解我們,有時候當(dāng)別人理解我們時,我們應(yīng)該思考自己有沒有去理解過他人,這是相互的,就像老師理解我們一樣,我們也應(yīng)該按時上課,尊重老師,理解老師。經(jīng)過一個學(xué)期的數(shù)據(jù)庫課程的學(xué)習(xí),我們掌握了創(chuàng)建數(shù)據(jù)庫以及對數(shù)據(jù)庫的操作的基礎(chǔ)知識。數(shù)據(jù)庫這門課涉及到以前的知識不多,是一門從頭學(xué)起的課程,即使基礎(chǔ)不是很好,只要認真聽講、復(fù)習(xí)功課,還是一門比較容易掌握的課。課堂上講的知識比較理論化,如果不動手就無法將知識轉(zhuǎn)化為技能,而動手去做能夠讓我們將學(xué)過的知識在實踐中運用,找到知識漏洞,并且能學(xué)到更多關(guān)于實際操作的知識和技巧。并且培養(yǎng)了我們的自學(xué)能力。 第一次接觸sql語言,雖然陌生,但是可以讓我從頭開始學(xué),就算沒有基礎(chǔ)的人也可以學(xué)得很好。剛開始練習(xí)sql語言的時候,并不是很難,基本上都是按照老師的步驟來做,還很有成就感。我們通過老師的一些ppt,我們可以鞏固課內(nèi)的知識,還可以學(xué)習(xí)內(nèi)容相關(guān)的知識,更好地完成老師布置的作業(yè)。access--中小型數(shù)據(jù)庫開發(fā)系統(tǒng),內(nèi)嵌vba編程語言,面向?qū)ο缶幊?,excel--數(shù)據(jù)表格處理系統(tǒng),編程能力有限.access是數(shù)據(jù)庫管理軟件,內(nèi)含的是數(shù)據(jù)庫(基本對象),一個數(shù)據(jù)庫包含多張表 主要用于開發(fā)系統(tǒng),日常辦公用起來不方便,他主要是做軟件的后臺的。而excel只是一般的表格處理軟件,主要于一些日常的辦公而已 兩都所用到的地方不一樣.access是一個數(shù)據(jù)庫軟件,一個access文件由存儲特定結(jié)構(gòu)化數(shù)據(jù)集的表集合組成。表中包含行(有時稱作記錄或元組)和列(有時稱作特性)的集合。表中的每一列都設(shè)計為存儲某種類型的信息(例如,日期、名稱、美元金額或數(shù)字)。表上有幾種控制(約束、規(guī)則、觸發(fā)器、默認值和自定義用戶數(shù)據(jù)類型)用于確保數(shù)據(jù)的有效性。表上可以有索引(與書中的索引非常相似),利用索引可以快速地找到行??蓪⒙暶饕猛暾?dri)約束添加到表上,以確保不同表中相互關(guān)聯(lián)的數(shù)據(jù)保持一致。 學(xué)習(xí)數(shù)據(jù)庫對我來說是一直都計劃學(xué)的,沒接觸的時候總是覺得它比較深奧或是不可接近的電腦知識,盡管自己對電腦非常感興趣,其實還是有些心理上的陌生感。學(xué)習(xí)電腦就和我們平時的其它科目學(xué)習(xí)一樣感覺它有永無止境的知識,在這從初接觸電腦時連個電腦的鍵盤都不敢動到現(xiàn)在連硬盤都也修理,其中的過程是多么長啊,數(shù)據(jù)庫是我在高中時候聽過,到了大學(xué)漸漸了解了些,但就其原理性的內(nèi)容還不知道,也就是根本就不清楚什么是數(shù)據(jù)庫,只是知道一個所謂的中國字典里的名詞。我認識它是從我接觸網(wǎng)頁制作開始的,初用FrontPage做網(wǎng)頁也就是弄幾個框圖,沒什么東西但還覺得不錯,后來聽朋友說這是最簡單最普通的東東。朋友告訴我真真的網(wǎng)頁起碼也用到數(shù)據(jù)庫這些東西了,有什么前臺的后臺的。聽我的都暈頭轉(zhuǎn)向了,感覺自己是一個長不大的菜鳥了,之后我就去查找相關(guān)資料發(fā)現(xiàn)在數(shù)據(jù)庫有很多種,這才對它有所了解。 大 一、大二的時候想學(xué)可不知道怎么學(xué),從什么地方學(xué)起。當(dāng)時也沒注意選課本上有這類的課程,到了大三正式的課程也輕松些了,仔細觀摩了選修課發(fā)現(xiàn)有數(shù)據(jù)庫,有數(shù)據(jù)庫原理和Oracle數(shù)據(jù)庫。當(dāng)時感覺Oracle數(shù)據(jù)庫既然是單獨一門課程一定會講的比較細,也能學(xué)到真正實用的內(nèi)容。選上了這門課以后發(fā)現(xiàn)和我想的基本是一樣的,老師對學(xué)生也比較和藹可親,對我們要求也不是很緊。讓每個人都覺得輕輕松松就能把這門課程學(xué)完,沒有多么緊張的作業(yè),也沒有太苛刻的要求。 當(dāng)老師在最后說這個課程結(jié)束了,回顧一下以前老師給我們講過的東西,真的有很多是我們應(yīng)該去注意的。學(xué)習(xí)完Oracle數(shù)據(jù)庫后感覺Oracle可分兩大塊,一塊是開發(fā),一塊是管理。開發(fā)主要是寫寫存儲過程、觸發(fā)器什么的,還有就是用Oracle的Develop工具做form。有點類似于程序員,當(dāng)然我可不是什么程序員,有幾個程序員朋友他們是我的偶像。開發(fā)還需要有較強的邏輯思維和創(chuàng)造能力,自己沒有真正做過,但感覺應(yīng)該會比較辛苦,是青春飯;管理則需要對Oracle數(shù)據(jù)庫的原理有深刻的認識,有全局操縱的能力和緊密的思維,責(zé)任較大,因為一個小的失誤就會down掉整個數(shù)據(jù)庫,相對前者來說,后者更看重經(jīng)驗。這些東西都是從老師哪里和朋友的討論中得到的心得,也希望其他朋友能多多向老師和朋友請教,如果是個人單獨靠自己來完成一個完美的數(shù)據(jù)庫我覺得比較困難,現(xiàn)在基本上都是團隊類型的,而且他們的效率高開發(fā)的周期也快。在煙臺的.NET俱樂部認識幾個比較歷害的人,他們的團隊精神我比較佩服,像我這樣一個大學(xué)生和他們說起來太菜了。由于數(shù)據(jù)庫管理的責(zé)任重大,很少公司愿意請一個剛剛接觸Oracle的人去管理數(shù)據(jù)庫。對于我們這些初出茅廬的新手來說,個人認為可以先選擇做開發(fā),有一定經(jīng)驗后轉(zhuǎn)型,去做數(shù)據(jù)庫的管理。當(dāng)然,這個還是要看人個的實際情況來定。其實在煙臺大學(xué)里學(xué)生中有做的好的也是有,只不過通常象這些兄弟們我覺得很少能發(fā)現(xiàn)在,因為我只知道一個。在煙雨樓臺的BBS版塊里有個程序版塊,這位版主以前就是學(xué)校網(wǎng)絡(luò)中心的牛人。他曾告訴我學(xué)習(xí)的方法就是:看書、思考、寫筆記、做實驗、再思考、再寫筆記。我覺得說的很對,對于新手來說就要這樣,不斷的去努力奮斗,最后一定能得到自己想要的成果。 對于學(xué)習(xí)Oracle數(shù)據(jù)庫從網(wǎng)絡(luò)上找資料我認為是比較好的,現(xiàn)在的網(wǎng)絡(luò)又這么的發(fā)達應(yīng)該去充分利用。我知道Oracle的官方網(wǎng)站:這里有Oracle的各種版本的數(shù)據(jù)庫、應(yīng)用工具和權(quán)威的官方文檔。雖然我是個新手,但是常到哪些相關(guān)的數(shù)據(jù)庫論壇或是網(wǎng)站覺得每次的收獲都不小,網(wǎng)絡(luò)對我來說可是個重要的東西,除了Oracle數(shù)據(jù)庫對于其它的一些電腦知識都從網(wǎng)絡(luò)里學(xué)習(xí)了不少,我常用的一個搜索網(wǎng)站就是大家都熟悉的百度了 以前沒接觸過它,現(xiàn)在認識了它才知道Oracle的體系很龐大,要學(xué)習(xí)它,首先要了解Oracle的框架。它有物理結(jié)構(gòu)(由控制文件、數(shù)據(jù)文件、重做日志文件、參數(shù)文件、歸檔文件、密碼文件組成),邏輯結(jié)構(gòu)(表空間、段、區(qū)、塊),內(nèi)存分配(SGA和PGA)算機的實際內(nèi)存中得以分配,如果實際內(nèi)存不夠再往虛擬內(nèi)存中寫,后臺進程(數(shù)據(jù)寫進程、日志寫進程、系統(tǒng)監(jiān)控、進程監(jiān)控、檢查點進程、歸檔進程、服務(wù)進程、用戶進程),SCN(System Change Number)。這些東西感覺都比較專業(yè),我對它們也就是個知道,想要真真去認識我還得努力去做。雖然懂得還不是很多,起碼會了基本的軟件操作,老師說我們用的都是客戶端,服務(wù)端看不到,也不知道服務(wù)端是什么樣的,只知道客戶端就挺多東西的,沒有真正的去學(xué)習(xí)利用是很難掌握的。 Oracle數(shù)據(jù)庫的學(xué)習(xí)使我對數(shù)據(jù)庫的有了新的進步,以后再看到也就不至于什么也不懂,其實那么多數(shù)據(jù)庫我覺得學(xué)好一門就行,只是他們的語言可能不大一樣,學(xué)好一門后就可去認識其它的,這樣應(yīng)該有事半功倍的效果。就像我學(xué)習(xí)C語言,當(dāng)時不能說是學(xué)習(xí)的棒,但不算差。所以我對以后的語言感覺都不是很困難,了解了VB、C++還有網(wǎng)頁中用的Html語言、asp語言都能看懂,起碼可以對別人的東西進行了一下修改。因此,我感謝Oracle數(shù)據(jù)庫老師給了我有用的知識,以便我在以后學(xué)習(xí)或認識更多的內(nèi)容能有新的方法和思維,也能更加有效和快速的去消化吸收新的東西。希望在今后中,Oracle能給我更多幫助,讓我在我熟悉的VB中運用上去,我以前的一個目標(biāo)是要為學(xué)校的選課做一個選課助手來幫助大學(xué),就用我的VB。不過因為種種原因一直沒有完成,也包括我對數(shù)據(jù)庫的不了解,因為學(xué)了Oracle以后知道第一項內(nèi)容是通過SQL查詢后得到的,如果去把它們聯(lián)系起來還不是真正明白,不過我相信我的目標(biāo)能在學(xué)習(xí)Oracle后得到進展。在這一年中我主要學(xué)習(xí)的數(shù)據(jù)庫是sql serverXX,在學(xué)習(xí)的時候過程中,我們首先是從基礎(chǔ)開始,比如數(shù)據(jù)類型、運算符號、關(guān)鍵字等等,然后上升到一些增刪改查,還有觸發(fā)、存儲過程等的使用等等。 經(jīng)過了一學(xué)期的學(xué)習(xí),我從起初對數(shù)據(jù)庫的認識模糊到后來清晰,深入,我認為我學(xué)到了許許多多的東西。當(dāng)然,在學(xué)習(xí)中,薛立柱會給我們在網(wǎng)上下很多的學(xué)習(xí)資料,同時他也會建議我們多讀讀網(wǎng)上的學(xué)習(xí)資料。除了這個以外,我在學(xué)習(xí)數(shù)據(jù)庫課程過程中,接觸到的軟件工程思想,網(wǎng)上學(xué)習(xí)經(jīng)驗,以及利用網(wǎng)絡(luò)的學(xué)習(xí)資源都很好的改善了我的學(xué)習(xí)。后來,在學(xué)習(xí)的深入中,雖然學(xué)習(xí)有時是十分叫人感到枯燥乏味的,但我慶幸的是我堅持了下來,在最后的考試復(fù)習(xí)中,薛立柱老師雖然勸誡我學(xué)習(xí)不要因為考試而停止。是啊!要想學(xué)好一門功課我們需要的是持之以恒的精神。 數(shù)據(jù)庫編程,這個是作為一個程序員的基本功,絕大多數(shù)軟件開發(fā)公司數(shù)據(jù)庫編程都是由程序員自己完成的,因為他的工作量不是很大,也不是很復(fù)雜。所以作為一個綜合的程序員,學(xué)習(xí)數(shù)據(jù)庫編程,像數(shù)據(jù)庫四大操作,增刪改查,還有觸發(fā)、存儲過程等的使用,這些都是基礎(chǔ)的基矗很多時候我們會認為數(shù)據(jù)庫沒什么作用,學(xué)習(xí)的時候吊兒郎當(dāng),到今年做項目時,還不會連接查詢,要想避免這種情況發(fā)生就必須打好基礎(chǔ),扎實的掌握每個知識點。 只要你從事計算機行業(yè),就需要學(xué)習(xí)好數(shù)據(jù)庫的基礎(chǔ)知識,不論以后選擇哪個方向,數(shù)據(jù)庫的學(xué)習(xí)都不能放松。古人云:書到用時方恨少,知識學(xué)多了不會成為累贅,慢慢的積累,總有用到的時候。給自己明確一個目標(biāo),剩下的就是向著這個目標(biāo)努力,無論遇到什么困難,克服它就向成功邁進了一步。第四篇:ORACLE數(shù)據(jù)庫學(xué)習(xí)總結(jié)
第五篇:數(shù)據(jù)庫學(xué)習(xí)總結(jié)