




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
SQL更新數(shù)據(jù),Oracle中可以利用DML更新數(shù)據(jù)。其DML語句與其他數(shù)據(jù)庫的SQL語法完全一致都是遵守了工業(yè)標(biāo)準(zhǔn)。與查詢操作不同,更新數(shù)據(jù)將導(dǎo)致數(shù)據(jù)庫狀態(tài)的變化,因此,Oracle同樣提供了提交與回滾操作來保證數(shù)據(jù)庫狀態(tài)的一致性。Oracle常見的更新操作包括: 插入數(shù)據(jù); 修改數(shù)據(jù); 刪除數(shù)據(jù)。,17.1 插入數(shù)據(jù),插入數(shù)據(jù)即向數(shù)據(jù)表中插入新的記錄,插入數(shù)據(jù)應(yīng)該使用insert命令。插入數(shù)據(jù)的主要途徑包括:通過指定各列的值直接插入、通過子查詢插入、通過視圖插入等。對于通過視圖插入的方式,大多數(shù)應(yīng)該使用instead of觸發(fā)器來進(jìn)行處理,因此,本章將著重講述前兩種插入方式。,17.1.1 insert語句向表中插入數(shù)據(jù),insert into people values(people_seq.nextval, 張文, ACT); insert into people (id, name) values(people_seq.nextval, 柳平); 注意與說明:當(dāng)使用第二種方式插入數(shù)據(jù)時(shí),列名列表和列值列表必須保持一致,即每個(gè)列的數(shù)據(jù)類型和實(shí)際插入類型保持一致。,17.1.2 利用子查詢批量插入數(shù)據(jù),Oracle可以利用子查詢向表中批量插入數(shù)據(jù)。此時(shí)的SQL語句除了包含insert into命令之外,還應(yīng)該包含一個(gè)查詢語句。 insert into people select employee_id, employee_name, status from t_employees where employee_id=3;,17.1.3 insert語句與默認(rèn)值,當(dāng)向數(shù)據(jù)表中插入數(shù)據(jù)時(shí),如果表中某列含有默認(rèn)值約束,對于該列又沒有顯式賦值,那么默認(rèn)值將作為列值進(jìn)行插入。 alter table people modify (status varchar2(3) default ACT); insert into people (id, name) values (12, 殷商); select * from people where id = 12;,17.1.4 insert語句與唯一性約束,當(dāng)使用insert語句時(shí),需要注意的是唯一性約束。當(dāng)插入的列值違反了唯一性約束時(shí),Oracle將拋出錯(cuò)誤。例如,表people中,列id為表的主鍵,嘗試向其中插入數(shù)據(jù): insert into people values(11, 張三, ACT) 對于數(shù)值型主鍵來說,在插入數(shù)據(jù)時(shí),使用序列來獲得主鍵值是一個(gè)好的選擇。,17.1.5 insert語句與外鍵約束,insert語句更新數(shù)據(jù)表時(shí),同樣會(huì)引起外鍵約束的檢查。 alter table t_salary add constraint fk_employee_id foreign key (employee_id) references t_employees (employee_id); insert into t_salary (salary_id, employee_id, month, salary) values (31, 20, 1月, 5000);,17.2 修改數(shù)據(jù),像其他數(shù)據(jù)庫一樣,Oracle使用update命令來修改數(shù)據(jù)。update修改數(shù)據(jù)一般有以下幾種情況:直接修改單列的值、直接修改多列的值、利用where子句限制修改范圍和利用視圖修改數(shù)據(jù)。利用視圖修改數(shù)據(jù)往往需要利用instead of觸發(fā)器實(shí)現(xiàn),因此本節(jié)將著重講述前三種更新方式。,17.2.1 利用update修改單列的值,update可以修改單列的值。 update people set status = CXL; select * from people;,17.2.2 利用update修改多列的值,update命令既可以修改單列值,也可以同時(shí)修改多列的值。例如,有時(shí)為了合并兩個(gè)表的數(shù)據(jù),需要為其中一個(gè)的主鍵id添加一個(gè)基數(shù),以避免兩個(gè)表中主鍵的重復(fù)。此時(shí),需要修改表中所有id的值。以表people為例,在修改列id的值的同時(shí),也可以修改status列的值。 update people set id = (20000+id), status = ACT;,17.2.3 利用where子句限制修改范圍,where子句是update命令最常用的子句。不使用where子句的update命令是不安全的。因?yàn)椴皇褂脀here子句將一次性修改表中所有記錄,這將帶來極大的安全隱患。為了將表people中,id大于20010的status列修改為“CXL”則可以利用如下所示的SQL語句。 update people set status = CXL where id 20010;,17.3 刪除數(shù)據(jù),數(shù)據(jù)刪除的目標(biāo)是數(shù)據(jù)表中的記錄,而不是針對列來進(jìn)行的。刪除數(shù)據(jù)應(yīng)該使用delete命令或者truncate命令。其中delete命令的作用目標(biāo)是表中的某些記錄,而truncate命令的作用目標(biāo)是整個(gè)數(shù)據(jù)表。,17.3.1 用delete命令刪除數(shù)據(jù),像update命令一樣,delete命令經(jīng)常與where子句一起出現(xiàn),以刪除數(shù)據(jù)表中的某些數(shù)據(jù)。 delete from people p where exists(select 1 from t_employees e where e.employee_name = ) delete命令用于刪除表中數(shù)據(jù);from people p用于指定刪除的目標(biāo)表為people,并指定該表的別名為p;where exists(select 1 from t_employees e where e.employee_name = )用于指定刪除記錄的過濾條件在表t_employees中存在著一條記錄,該記錄的employee_name列值等于表people的當(dāng)前記錄的name列值;該刪除語句用于保證表people中,所有的姓名不再存在于表t_employees中。 注意與說明:delete命令是針對表中的整條記錄,因此,其后不需要指定列名或者*。例如,執(zhí)行delete * from people,Oracle將拋出錯(cuò)誤提示。,17.3.2 用truncate命令刪除數(shù)據(jù),truncate命令刪除數(shù)據(jù)和delete命令刪除數(shù)據(jù)主要有三點(diǎn)不同。 truncate命令屬于DDL(數(shù)據(jù)庫定義語言)范疇,而delete命令是DML(數(shù)據(jù)庫操作語言)范疇。 truncate命令將一次性刪除數(shù)據(jù)表的所有數(shù)據(jù),而delete語句將對數(shù)據(jù)表中所有記錄進(jìn)行循環(huán)處理。 truncate命令刪除的數(shù)據(jù)將不能回滾,而delete語句在提交修改之前,仍然可以回滾操作。 truncate table people;,17.4 數(shù)據(jù)提交與回滾,Oracle中有回滾段的概念。Oracle中的回滾段是指,當(dāng)DML修改數(shù)據(jù)庫時(shí),用于存儲(chǔ)原數(shù)據(jù)影像的存儲(chǔ)空間。當(dāng)DML修改數(shù)據(jù)庫中的數(shù)據(jù)(例如,update和delete命令)之后,執(zhí)行提交之前, 如果執(zhí)行了回滾操作,Oracle將利用回滾段中的數(shù)據(jù)影像將數(shù)據(jù)庫恢復(fù)到修改前的狀態(tài)。,17.4.1 回滾動(dòng)作,回滾動(dòng)作有兩種情況,一是用戶在提交動(dòng)作之前,手動(dòng)執(zhí)行rollback命令,以放棄該事務(wù)對數(shù)據(jù)庫的修改;二是事務(wù)執(zhí)行失敗,數(shù)據(jù)庫自動(dòng)執(zhí)行rollback命令,來恢復(fù)事務(wù)對數(shù)據(jù)庫的修改。 select * from people; insert into people values (1, 周璇, ACT); rollback; select * from people;,17.4.2 提交動(dòng)作,提交動(dòng)作是指將數(shù)據(jù)庫的修改操作反映到數(shù)據(jù)庫,不再允許使用回滾操作。 insert into people values (1, 周璇, ACT); commit; select * from people; rollback; select * from people;,17.4.3 PL/SQL Developer中的回滾與提交,在PL/SQL中,同樣可以利用圖形化界面來處理回滾與提交動(dòng)作。 insert into people values (2, 劉祥, ACT);,17.5 本章實(shí)例,本章重點(diǎn)講述了如何使用命令進(jìn)行數(shù)據(jù)更新。但是很多時(shí)候,開發(fā)員使用工具直接修改數(shù)據(jù)會(huì)更加直觀。 create table test_people as select * from people; select * from test_people order by id for update;,17.6 本章小結(jié),由于利用update更新數(shù)據(jù)表和利用delete刪除表中數(shù)據(jù),語法簡單,而且為大多數(shù)讀者所熟悉,所以本章只進(jìn)行了簡單介紹。需要注意的是利用truncate刪除表中數(shù)據(jù)和利用delete刪除數(shù)據(jù)的區(qū)別:truncate命令是DDL,數(shù)據(jù)刪除之后,不可回滾;而delete命令是DML,數(shù)據(jù)刪除之后,可以利用rollback進(jìn)行回滾。就速度而言,truncate命令要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年茶藝師中級茶葉加工與儲(chǔ)藏技能鑒定理論試卷
- 2025年消防安全知識(shí)培訓(xùn)考試題庫基礎(chǔ)篇火災(zāi)預(yù)防與控制試題
- 秋游經(jīng)歷分享記事作文(11篇)
- 2025年能源與資源行業(yè):能源行業(yè)產(chǎn)業(yè)鏈上下游協(xié)同發(fā)展研究報(bào)告
- 夏天的陽光和雨露抒情作文11篇
- 2025年腦疝診斷試題
- 工業(yè)領(lǐng)域CCS技術(shù)應(yīng)用案例推動(dòng)化妝品行業(yè)低碳轉(zhuǎn)型
- 數(shù)字貨幣在2025年金融市場國際化進(jìn)程中的機(jī)遇與挑戰(zhàn)報(bào)告
- 廢水處理工程合同書
- 精準(zhǔn)醫(yī)療在甲狀腺癌診療中的應(yīng)用現(xiàn)狀與效果分析報(bào)告
- (高清版)DB50∕T 689-2016 合成鉆石鑒定技術(shù)規(guī)范
- 2025-2030中國智慧社區(qū)行業(yè)市場深度調(diào)研及前景趨勢與投資研究報(bào)告
- 標(biāo)本制作合同協(xié)議
- 初中生安全用電課件
- 2025年廣東省地理初中學(xué)業(yè)水平模擬練習(xí)卷(含答案)
- 心率測定-教學(xué)設(shè)計(jì)-八年級體育健康教育
- 廣東省2025年普通高等學(xué)校招生全國統(tǒng)一考試模擬測試(一)物理試題及答案
- 2025年ps cs5操作試題及答案
- 2025年太陽能空調(diào)系統(tǒng)合同
- 汽車4s店管理制度
- 醫(yī)院護(hù)理人文關(guān)懷實(shí)踐規(guī)范專家共識(shí)課件
評論
0/150
提交評論