來源:fudapeng7 發(fā)布時間:2018-12-05 11:39:49 閱讀量:998
1. 數(shù)據(jù)庫原理
1.1. 數(shù)據(jù)庫簡介
1.1.1. 文件存儲
對數(shù)據(jù)的存儲需求一直存在。保存數(shù)據(jù)的方式,經(jīng)歷了手工管理、文件管理等階段,直至數(shù)據(jù)庫管理階段。
文件存儲方式保存數(shù)據(jù)的弊端:
缺乏對數(shù)據(jù)的整體管理,數(shù)據(jù)不便修改;
不利于數(shù)據(jù)分析和共享;
數(shù)據(jù)量急劇增長,大量數(shù)據(jù)不可能長期保存在文件中。
數(shù)據(jù)庫應(yīng)運而生,是人們存放數(shù)據(jù)、訪問數(shù)據(jù)、操作數(shù)據(jù)的存儲倉庫。
1.1.2. DB和DBMS
數(shù)據(jù)庫(Database,簡稱DB)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)的倉庫。
數(shù)據(jù)庫管理系統(tǒng)(Database Management System,簡稱DBMS):管理數(shù)據(jù)庫的軟件。
數(shù)據(jù)庫建立了數(shù)據(jù)之間的聯(lián)系,使用結(jié)構(gòu)化的方式組織和處理數(shù)據(jù),能夠統(tǒng)一、集中及獨立的管理數(shù)據(jù),使數(shù)據(jù)的存取獨立于使用數(shù)據(jù)的程序,實現(xiàn)了數(shù)據(jù)共享。
數(shù)據(jù)庫的典型特征包括:數(shù)據(jù)的結(jié)構(gòu)化,數(shù)據(jù)間的共享,減少數(shù)據(jù)的冗余度,以及數(shù)據(jù)的獨立性。
數(shù)據(jù)庫成為數(shù)據(jù)的知識倉庫,并對這些數(shù)據(jù)的存儲、訪問、安全、數(shù)據(jù)一致性、并發(fā)操作及備份恢復(fù)負(fù)責(zé)。
圖-1 DB和DBMS
1.1.3. 關(guān)系數(shù)據(jù)庫簡介
關(guān)系是一個數(shù)學(xué)概念,描述兩個元素間的關(guān)聯(lián)或?qū)?yīng)關(guān)系。所以關(guān)系型數(shù)據(jù)庫,即是使用關(guān)系模型把數(shù)據(jù)組織到數(shù)據(jù)表(Table)中?,F(xiàn)實世界可以用數(shù)據(jù)來描述。
主流數(shù)據(jù)庫產(chǎn)品:
Oracle(Oracle)
DB2(IBM)
SQL Server(MS)
MySQL(Oracle)
1.1.4. 表的概念
在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)被存放于二維數(shù)據(jù)表(Table)中。
一個關(guān)系數(shù)據(jù)庫由多個數(shù)據(jù)表組成,數(shù)據(jù)表是關(guān)系數(shù)據(jù)庫的基本存儲結(jié)構(gòu),由行和列組成,行(Row)也就是橫排數(shù)據(jù),也經(jīng)常被稱作記錄(Record),列(Column)就是縱列數(shù)據(jù),也被稱作字段(Field)。表和表之間是存在關(guān)聯(lián)關(guān)系的。
1.2. 主流關(guān)系型數(shù)據(jù)庫
1.2.1. Oracle數(shù)據(jù)庫概述
Oracle是當(dāng)今著名的Oracle(甲骨文)公司的數(shù)據(jù)庫產(chǎn)品,它是世界上第一個商品化的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),也是第一個推出和數(shù)據(jù)庫結(jié)合的第四代語言開發(fā)工具的數(shù)據(jù)庫產(chǎn)品。
Oracle采用標(biāo)準(zhǔn)的SQL結(jié)構(gòu)化查詢語言,支持多種數(shù)據(jù)類型,提供面向?qū)ο蟮臄?shù)據(jù)支持,具有第四代語言開發(fā)工具,支持UNIX、WINDOWS、OS/2等多種平臺。Oracle公司的軟件產(chǎn)品豐富,包括Oracle服務(wù)器產(chǎn)品,Oracle開發(fā)工具和Oracle應(yīng)用軟件。其中最著名的就是Oracle數(shù)據(jù)庫,目前最新的版本是Oracle 12c。
1.2.2. DB2數(shù)據(jù)庫概述
DB2是IBM的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),DB2有很多不同的版本,可以運行在從掌上產(chǎn)品到大型機(jī)不同的終端機(jī)器上。DB2 Universal Database Personal Edition和DB2 Universal Database Workgroup Edition分別是為OS/2和Windows系統(tǒng)的單用戶和多用戶提供的數(shù)據(jù)庫管理系統(tǒng)。
DB2在高端數(shù)據(jù)庫的主要競爭對手是Oracle。
1.2.3. Sybase數(shù)據(jù)庫
Sybase是美國Sybase公司研制的一種關(guān)系型數(shù)據(jù)庫系統(tǒng),是較早采用C/S技術(shù)的數(shù)據(jù)庫廠商,是一種典型的UNIX或Windows NT平臺上客戶機(jī)/服務(wù)器環(huán)境下的大型數(shù)據(jù)庫系統(tǒng)。 Sybase通常與Sybase SQL Anywhere用于客戶機(jī)/服務(wù)器環(huán)境,前者作為服務(wù)器數(shù)據(jù)庫,后者為客戶機(jī)數(shù)據(jù)庫,采用該公司研制的PowerBuilder為開發(fā)工具,在國內(nèi)大中型系統(tǒng)中具有廣泛的應(yīng)用。
SYBASE主要有三種版本,一是UNIX操作系統(tǒng)下運行的版本,二是Novell Netware環(huán)境下運行的版本,三是Windows NT環(huán)境下運行的版本。對UNIX操作系統(tǒng)目前廣泛應(yīng)用的為SYBASE 10 及SYABSE 11 for SCO UNIX。
2010年Sybase被SAP收購。
1.2.4. SQL Server數(shù)據(jù)庫概述
Microsoft SQL Server是運行在Windows NT服務(wù)器上,支持C/S結(jié)構(gòu)的數(shù)據(jù)庫管理系統(tǒng)。它采用標(biāo)準(zhǔn)SQL語言,微軟公司對它進(jìn)行了部分?jǐn)U充而成為事務(wù)SQL(Transact-SQL)。
SQL Server最早是微軟為了要和IBM競爭時,與Sybase合作所產(chǎn)生的,其最早的發(fā)展者是Sybase,和Sybase數(shù)據(jù)庫完全兼容。在與Sybase終止合作關(guān)系后,微軟自主開發(fā)出SQL Server 6.0版,往后的SQL Server即均由微軟自行研發(fā)。最新的版本是SQL Server 2012,上一版本是2008。
Microsoft SQL Server幾個初始版本適用于中小企業(yè)的數(shù)據(jù)庫管理,但是后來它的應(yīng)用范圍有所擴(kuò)展,已經(jīng)觸及到大型、跨國企業(yè)的數(shù)據(jù)庫管理。
1.2.5. MySQL數(shù)據(jù)庫概述
MySQL是一個開放源碼的小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng),開發(fā)者為瑞典MySQL AB公司。目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。
與其它的大型數(shù)據(jù)庫例如Oracle、IBM DB2等相比,MySQL自有它的不足之處,如規(guī)模小、功能有限等,但對于一般個人使用者和中小型企業(yè)來說,MySQL提供的功能已經(jīng)綽綽有余,而且由于MySQL是開放源碼軟件,因此可以大大降低總體擁有成本,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫。
2008年1月16日,Sun正式收購MySQL。2009年4月20日,SUN被Oracle公司收購。目前的最新版本是MySQL5.6.
1.3. SQL概述
1.3.1. 結(jié)構(gòu)化查詢語言
SQL(Structured Query Language) 是結(jié)構(gòu)化查詢語言的縮寫。
SQL是在關(guān)系數(shù)據(jù)庫上執(zhí)行數(shù)據(jù)操作、檢索及維護(hù)所使用的標(biāo)準(zhǔn)語言,可以用來查詢數(shù)據(jù),操縱數(shù)據(jù),定義數(shù)據(jù),控制數(shù)據(jù),所有數(shù)據(jù)庫都使用相同或者相似的語言。
SQL可分為:
數(shù)據(jù)定義語言(DDL) : Data Definition Language
數(shù)據(jù)操縱語言(DML) : Data Manipulation Language
事務(wù)控制語言(TCL):Transaction Control Language)
數(shù)據(jù)查詢語言(DQL):Data Query Language
數(shù)據(jù)控制語言(DCL) : Data Control Language
執(zhí)行SQL語句時,用戶只需要知道其邏輯含義,而不需要知道SQL語句的具體執(zhí)行步驟。
1.3.2. 數(shù)據(jù)定義語言(DDL)
用于建立、修改、刪除數(shù)據(jù)庫對象,包括創(chuàng)建語句(CREATE)、修改語句(ALTER)、刪除語句(DROP),比如使用CREATE TABLE創(chuàng)建表,使用ALTER TABLE修改表,使用DROPTABLE刪除表等動作。這類語言不需要事務(wù)的參與,自動提交。
1.3.3. 數(shù)據(jù)操作語言(DML)
用于改變數(shù)據(jù)庫數(shù)據(jù),包括INSERT、UPDATE、DELETE三條語句。其中,INSERT語句用于將數(shù)據(jù)插入到數(shù)據(jù)庫中,UPDATE語句用于更新數(shù)據(jù)庫中已存在的數(shù)據(jù),DELETE用于刪除數(shù)據(jù)庫中已存在的數(shù)據(jù)。DML語言和事務(wù)是相關(guān)的,執(zhí)行完DML操作后必須經(jīng)過事務(wù)控制語句提交后才真正的將改變應(yīng)用到數(shù)據(jù)庫中。
1.3.4. 事務(wù)控制語言(TCL)
用來維護(hù)數(shù)據(jù)一致性的語句,包括提交(COMMIT)、回滾(ROLLBACK)、保存點(SAVEPOINT)三條語句,其中COMMIT用來確認(rèn)已經(jīng)進(jìn)行的數(shù)據(jù)庫改變, ROLLBACK語句用來取消已經(jīng)進(jìn)行的數(shù)據(jù)庫改變,當(dāng)執(zhí)行DML操作后(也就是上面說的增加、修改、刪除等動作),可以使用COMMIT語句來確認(rèn)這種改變,或者使用ROLLBACK取消這種改變。SAVEPOINT語句用來設(shè)置保存點,使當(dāng)前的事務(wù)可以回退到指定的保存點,便于取消部分改變。
1.3.5. 數(shù)據(jù)查詢語言(DQL)
用來查詢所需要的數(shù)據(jù)。使用最廣泛,語法靈活復(fù)雜。
1.3.6. 數(shù)據(jù)控制語言(DCL)
用于執(zhí)行權(quán)限的授予和收回操作、創(chuàng)建用戶等,包括授予(GRANT)語句,收回(REVOKE)語句,CREATE USER語句,其中GRANT用于給用戶或角色授予權(quán)限, REVOKE用于收回用戶或角色已有的權(quán)限。DCL語句也不需要事務(wù)的參與,是自動提交的。
1.4. Oracle數(shù)據(jù)庫安裝和訪問
1.4.1. Oracle數(shù)據(jù)庫安裝(Windows)
打開Oracle首頁http://www.oracle.com/,通過Downloads進(jìn)入Oracle數(shù)據(jù)庫的下載頁面。
安裝過程(以本地安裝為例):
步驟1:解壓,雙擊setup.exe,啟動安裝向?qū)В?/span>
圖-2 Oracle數(shù)據(jù)庫的安裝頁面
在此步驟的設(shè)置如下:
選擇基本安裝,指定要安裝的Oracle數(shù)據(jù)庫的基位置和主目錄位置;
安裝類型為企業(yè)版;
創(chuàng)建啟動數(shù)據(jù)庫(在安裝數(shù)據(jù)庫軟件同時創(chuàng)建數(shù)據(jù)庫,也可以在安裝完畢后單獨創(chuàng)建,此處選擇默認(rèn)值同時創(chuàng)建);
指定全局?jǐn)?shù)據(jù)庫名稱為orcl,以及口令,需要記住自己的密碼,這里設(shè)置為oracle。
然后點擊“下一步”按鈕,
步驟2:進(jìn)入檢查安裝環(huán)境的步驟,用來檢查軟硬件環(huán)境是否符合Oracle11g的安裝要求,如圖-3。如果滿足安裝要求,點擊“下一步”按鈕。
圖-3 Oracle數(shù)據(jù)庫的安裝環(huán)境檢查
步驟3:檢查通過后,進(jìn)入安裝概要頁面,如圖-4。在這步可以檢查之前的設(shè)置,包括安裝類型和要安裝的組件,如果有問題,點擊“上一步”按鈕回去修改,如果確認(rèn)沒問題,點擊“安裝”按鈕,進(jìn)入安裝階段。
圖-4 Oracle數(shù)據(jù)庫的安裝概要
步驟4:提示正在安裝。根據(jù)機(jī)器的軟硬件配置不同,這個步驟可能耗費不同的時間。圖略。
步驟5:進(jìn)入配置助手步驟,這個過程不需要用戶干涉。圖略。
步驟6:創(chuàng)建數(shù)據(jù)庫,圖略。
步驟7:數(shù)據(jù)庫創(chuàng)建完成后,提示配置助手界面,顯示數(shù)據(jù)庫的初始信息。圖略。
在此步驟中可以點擊“口令管理”按鈕進(jìn)行數(shù)據(jù)庫初始用戶的口令管理,這個步驟此時可以忽略,待安裝完成后再進(jìn)行口令管理。完成后,點擊“確定”按鈕離開口令管理界面。
步驟8:彈出安裝成功窗口,圖略。
步驟9:在安裝成功界面上點擊“下一步”按鈕,提示安裝結(jié)束。如圖-5。
圖-5 Oracle數(shù)據(jù)庫安裝結(jié)束
1.4.2. Oracle數(shù)據(jù)庫安裝(Linux)
在Oracle官網(wǎng)下載所需的軟件包,檢查軟硬件環(huán)境是否符合要求,規(guī)劃空間和目錄結(jié)構(gòu),安裝數(shù)據(jù)庫并創(chuàng)建配置。
安裝過程略。
1.4.3. 遠(yuǎn)程登錄數(shù)據(jù)庫服務(wù)器
Oracle數(shù)據(jù)庫作為市場以及技術(shù)上領(lǐng)先的數(shù)據(jù)庫產(chǎn)品,提供了豐富和簡單易用的數(shù)據(jù)庫開發(fā)和管理工具。有兩種主要工具,一是命令行工具,Oracle自帶的SQL*PLUS,二是Oracle提供的圖形界面工具:SQL Developer。
這些工具可能和數(shù)據(jù)庫在同一臺服務(wù)器上,也可能安裝在另一臺機(jī)器中。
圖-6 數(shù)據(jù)庫和客戶端
1.4.4. 使用SQL*PLUS
SQL*Plus是Oracle數(shù)據(jù)庫提供的和數(shù)據(jù)庫進(jìn)行交互的工具,是被系統(tǒng)管理員和開發(fā)人員廣泛使用的開發(fā)和管理工具,功能強(qiáng)大,使用簡單,可以運行在任何Oracle運行的平臺上,默認(rèn)和數(shù)據(jù)庫一起安裝。SQL*Plus是一個基于傳統(tǒng)的C/S結(jié)構(gòu)的SQL開發(fā)工具,客戶端和服務(wù)器端可以在同一臺主機(jī)或不同主機(jī)上。
在圖-6中,我們主要使用最上面那種訪問方式。
首先,遠(yuǎn)程登錄到數(shù)據(jù)庫所在的機(jī)器上,輸入遠(yuǎn)程機(jī)器操作系統(tǒng)的帳號和密碼:
圖-7 遠(yuǎn)程登錄數(shù)據(jù)庫服務(wù)器
然后在%提示符下,輸入SQLPlus命令,并輸入數(shù)據(jù)庫的帳號和密碼:
圖-8 運行sqlplus,登錄數(shù)據(jù)庫
如果出現(xiàn)SQL提示符,則表示登錄成功:
圖-9登錄數(shù)據(jù)庫成功
退出時,在SQL>后輸入exit即可:
圖-10退出SQL*Plus
再輸入exit,即退出遠(yuǎn)程服務(wù)器。
1.4.5. 使用Oracle SQL Developer
Oracle SQL Developer是Oracle官方出品的免費圖形化開發(fā)工具,相對SQL*Plus來說,圖形化的界面便于操作,不必記憶大量的命令,輸出結(jié)果美觀。它的基本功能包括結(jié)果的格式化輸出,編輯器自動提示,代碼美化,顯示SQL的執(zhí)行計劃,監(jiān)控會話,編寫以及調(diào)試存儲過程等。官方和免費兩個特征讓這個工具極具吸引力。
SQL Developer工具的主界面,如圖-11所示。
圖-11SQL Developer打開后的界面
第一次進(jìn)入SQL Developer,需要設(shè)置連接參數(shù)。首先在窗口左邊的Connection上按右鍵,開啟一個新的連接,輸入遠(yuǎn)程數(shù)據(jù)庫的參數(shù),界面如圖-12。
圖-12在SQL Developer中設(shè)置連接用戶信息
成功建立了連接之后,在連接上按右鍵點擊Connect,將打開對應(yīng)用戶方案中的數(shù)據(jù)庫對象。如圖-13。
圖-13在SQL Developer中打開用戶scott
在這個界面中,即可操作SQL語句了。
2. SQL(DDL、DML)
2.1. Oracle數(shù)據(jù)類型
2.1.1. NUMBER
NUMBER表示數(shù)字類型,經(jīng)常被定義成NUMBER(P,S)形式,其中:
P表示數(shù)字的總位數(shù)
S表示小數(shù)點后面的位數(shù)
例如在表Emp中的Sal列的定義如下:
Sal NUMBER(6,2)
表示Sal列中的數(shù)據(jù),整數(shù)位最大為4位,小數(shù)位最大位數(shù)是2位,也就是最大取值:9999.99。
2.1.2. CHAR
CHAR表示固定長度的字符類型,經(jīng)常被定義成CHAR(N)形式, N表示占用的字節(jié)數(shù),N的最大取值是2000。
例如在表Emp中的Ename列的定義如下:
Ename CHAR(20);
表示Ename列中最多可存儲20個字節(jié)的字符串,并且占用的空間是固定的20個字節(jié)。
2.1.3. VARCHAR2
VARCHAR2表示變長的字符類型,定義格式是VARCHAR2(N), N表示最多可占用的字節(jié)數(shù),最大長度是4000字節(jié)。
例如在表Emp中的JOB列的定義如下:
JOB VARCHAR2(100);
表示JOB列中最多可存儲長度為100個字節(jié)的字符串。根據(jù)其中保存的數(shù)據(jù)長度,占用的空間是變化的,最大占用空間為100個字節(jié)。
2.1.4. DATE
DATE用于定義日期時間的數(shù)據(jù),長度是7個字節(jié),默認(rèn)格式是:DD-MON-RR, 例如:“11-APR-71”。如果是中文環(huán)境,是“11-4月-71”這種形式。
例如在表Emp中的Hiredate列的定義如下:
Hiredate DATE;
表示Hiredate列中存放的是日期數(shù)據(jù)。
2.2. 創(chuàng)建表
2.2.1. CREATE語句
創(chuàng)建表的語法是:
CREATE TABLE [schema.]table_name(
column_name datatype[DEFAULT expr][,…]
);
創(chuàng)建職員表的例子:
--創(chuàng)建表emp
CREATE TABLE emp(
id NUMBER(10),
name VARCHAR2(20),
gender CHAR(1),
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptid NUMBER(2)
);
2.2.2. DESC語句
DESC是查看表的數(shù)據(jù)結(jié)構(gòu),語法是:
DESC table_name;
查看emp表的結(jié)構(gòu),將會得到的結(jié)果如圖-14所示:
圖-14查看數(shù)據(jù)表的結(jié)構(gòu)
2.2.3. DEFAULT
可以通過DEFAULT子句給列指定默認(rèn)值,例如,在emp表中給gender列賦默認(rèn)值‘M’,如果插入數(shù)據(jù)時沒有指定性別的員工,則默認(rèn)是男性。
創(chuàng)建表emp1:
CREATE TABLE emp1(
id NUMBER(10),
name VARCHAR2(20),
gender CHAR(1) DEFAULT ‘M’,
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptid NUMBER(2)
);
2.2.4. NOT NULL
默認(rèn)情況下,任何列都允許有空值。非空(Not Null)是一種約束條件,用于確保字段值不為空,當(dāng)某個字段被設(shè)置了非空約束條件,這個字段中必須存在有效值,也就是說,當(dāng)執(zhí)行插入數(shù)據(jù)的操作時,必須提供這個列的數(shù)據(jù),當(dāng)執(zhí)行更新操作時,不能給這個列的值設(shè)置為NULL。
創(chuàng)建表emp2,設(shè)置name字段為非空,也即是表emp2中的每條記錄,name列都必須有值。
CREATE TABLE emp2(
id NUMBER(10),
name VARCHAR2(20) NOT NULL,
gender CHAR(1),
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptid NUMBER(2)
);
2.3. 修改表
2.3.1. 修改表名
在建表后如果希望修改表名,可以使用RENAME語句實現(xiàn),語法如下,將改變表名old_name為new_name:
RENAME old_name TO new_name;
舉例說明,如果要將表名emp修改為employee,使用如下語法:
RENAME emp TO employee;
2.3.2. 增加列
在建表之后,要給表增加列可以使用ALTER TABLE的ADD子句實現(xiàn)。語法如下:
ALTER TABLE table_name ADD
(column datatype [DEFAULT expr] [, column datatype…])
注意一點,列只能增加在最后,不能插入到現(xiàn)有的列中。下例給表employee增加一列hiredate,并設(shè)置默認(rèn)值為當(dāng)前日期。
ALTER TABLE employee ADD (hiredate DATE DEFAULT sysdate);
2.3.3. 刪除列
在建表之后,使用ALTER TABLE的DROP子句刪除不需要的列。語法如下:
ALTER TABLE table_name DROP (column);
刪除字段需要從每行中刪掉該字段占據(jù)的長度和數(shù)據(jù),并釋放在數(shù)據(jù)塊中占據(jù)的空間,如果表記錄比較大,刪除字段可能需要比較長的時間。
下例刪除表employee的列hiredate:
ALTER TABLE employee DROP (hiredate);
2.3.4. 修改列
建表之后,可以改變表中列的數(shù)據(jù)類型、長度和默認(rèn)值,注意這種修改僅對以后插入的數(shù)據(jù)有效,另外如果表中已經(jīng)有數(shù)據(jù)的情況下,把長度由大改小,有可能不成功,比如原來的類型是VARCHAR2(100),其中已經(jīng)存放了100個字節(jié)長度的數(shù)據(jù),如果要改為VARCHAR2(80),則不會修改成功。
語法如下:
ALTER TABLE table_name MODIFY
(column datatype [DEFAULT expr] [, column datatype…])
下例修改表employee的列job,并增加默認(rèn)值的設(shè)置:
ALTER TABLE employee
MODIFY(job VARCHAR2(40) DEFAULT 'CLERK' );
2.4. DML語句
在做后續(xù)練習(xí)之前,先熟悉本部分使用的樣例表emp和dept的結(jié)構(gòu)和數(shù)據(jù):
DROP TABLE dept;
CREATE TABLE dept
(deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
dname VARCHAR2(14) ,
loc VARCHAR2(13) ) ;
DROP TABLE emp;
CREATE TABLE emp
(empno NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(15),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO dept VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES
(20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES
(30,'SALES','CHICAGO');
INSERT INTO dept VALUES
(40,'OPERATIONS','BOSTON');
SELECT * FROM dept;
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,to_date('19-4-87','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO emp VALUES(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO emp VALUES(7876,'ADAMS','CLERK',7788,to_date('23-5-87','dd-mm-yyyy'),1100,NULL,20);
INSERT INTO emp VALUES(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO emp VALUES(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO emp VALUES(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
2.4.1. INSERT語句
INSERT語句用來給數(shù)據(jù)表增加記錄,每次增加一條記錄。語法如下:
INSERT INTO table_name[(column[, column…])]
VALUES(value[, value…]);
需要注意的一點,所有的DML操作,都需要再執(zhí)行事務(wù)提交語句commit,才算真正確認(rèn)了此操作。
向employee表插入一條記錄的例子如下:
INSERT INTO employee(id, name, job, salary)
VALUES(1001, 'rose', 'PROGRAMMER', 5500);
Oracle中的日期數(shù)據(jù)比較特殊,如果插入的列有日期字段,需要考慮日期的格式。Oracle的默認(rèn)的日期格式‘DD-MON-RR,你或者按照默認(rèn)格式插入數(shù)據(jù),或者自定義日期格式,用TO_DATE函數(shù)轉(zhuǎn)換為日期類型的數(shù)據(jù)。
--使用默認(rèn)日期格式插入記錄
INSERT INTO employee(id, name, job,birth)
VALUES(1002, 'martha', 'ANALYST', '01-9月-89');
--使用自定義日期格式插入記錄
INSERT INTO employee(id, name, job, birth)
VALUES(1003, 'donna', 'MANAGER',
TO_DATE('1978-09-01', 'YYYY-MM-DD'));
2.4.2. UPDATE語句
UPDATE語句用來更新表中的記錄,語法如下:
UPDATE table_name
SET column = value [, column = value]…
[WHERE condition];
其中WHERE子句是可選的,但是如果沒有WHERE子句,則全表的數(shù)據(jù)都會被更新,務(wù)必小心。
下例更改職員ROSE的薪水為8500:
UPDATE employee SET salary = 8500 WHERE name = 'ROSE';
2.4.3. DELETE語句
DELETE語句用來刪除表中的記錄,語法如下:
DELETE [FROM] table_name [WHERE condition];
和UPDATE語句一樣,WHERE子句是可選的,但是如果沒有WHERE子句,則全表的數(shù)據(jù)都會被刪除,務(wù)必確認(rèn)后再予以刪除。
下例將刪除職位是空的員工記錄:
DELETE FROM employee WHERE job is null;
---------------------