




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(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ù)據(jù)類型和實(shí)際插入類型保持一致。,17.1.2 利用子查詢批量插入數(shù)據(jù),Oracle可以利用子查詢向表中批量插入數(shù)據(jù)。此時的SQL語句除了包含insert into命令之外,還應(yīng)該包含一個查詢語句。 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ù)時,如果表中某列含有默認(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語句時,需要注意的是唯一性約束。當(dāng)插入的列值違反了唯一性約束時,Oracle將拋出錯誤。例如,表people中,列id為表的主鍵,嘗試向其中插入數(shù)據(jù): insert into people values(11, 張三, ACT) 對于數(shù)值型主鍵來說,在插入數(shù)據(jù)時,使用序列來獲得主鍵值是一個好的選擇。,17.1.5 insert語句與外鍵約束,insert語句更新數(shù)據(jù)表時,同樣會引起外鍵約束的檢查。 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ù)據(jù),需要為其中一個的主鍵id添加一個基數(shù),以避免兩個表中主鍵的重復(fù)。此時,需要修改表中所有id的值。以表people為例,在修改列id的值的同時,也可以修改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)是整個數(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將拋出錯誤提示。,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ù)據(jù)影像的存儲空間。當(dāng)DML修改數(shù)據(jù)庫中的數(shù)據(jù)(例如,update和delete命令)之后,執(zhí)行提交之前, 如果執(zhí)行了回滾操作,Oracle將利用回滾段中的數(shù)據(jù)影像將數(shù)據(jù)庫恢復(fù)到修改前的狀態(tài)。,17.4.1 回滾動作,回滾動作有兩種情況,一是用戶在提交動作之前,手動執(zhí)行rollback命令,以放棄該事務(wù)對數(shù)據(jù)庫的修改;二是事務(wù)執(zhí)行失敗,數(shù)據(jù)庫自動執(zhí)行rollback命令,來恢復(fù)事務(wù)對數(shù)據(jù)庫的修改。 select * from people; insert into people values (1, 周璇, ACT); rollback; select * from people;,17.4.2 提交動作,提交動作是指將數(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中,同樣可以利用圖形化界面來處理回滾與提交動作。 insert into people values (2, 劉祥, ACT);,17.5 本章實(shí)例,本章重點(diǎn)講述了如何使用命令進(jìn)行數(shù)據(jù)更新。但是很多時候,開發(fā)員使用工具直接修改數(shù)據(jù)會更加直觀。 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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業(yè)廢水處理技術(shù)與方法
- 工業(yè)機(jī)器人技術(shù)與發(fā)展趨勢
- 工業(yè)廢水處理技術(shù)創(chuàng)新研究
- 工業(yè)污染防治與綠色技術(shù)創(chuàng)新
- 工業(yè)機(jī)器人動力學(xué)設(shè)計與應(yīng)用
- 工業(yè)綠色化轉(zhuǎn)型策略與方案
- 工業(yè)節(jié)能與新能源技術(shù)應(yīng)用
- 工業(yè)燃?xì)夤芫W(wǎng)的智能化管理研究
- 工業(yè)節(jié)能減排的先進(jìn)技術(shù)與方法
- 工作中的自我激勵方法探討
- 期末試卷(試題)(含答案)-2024-2025學(xué)年一年級下冊數(shù)學(xué)北師大版
- 陜西省府谷縣國能礦業(yè)有限公司環(huán)??⒐を?yàn)收檢測報告公示
- 人教版高中政治必修四課本考點(diǎn)總結(jié)
- 第5章 自動駕駛儀系統(tǒng)《民航飛機(jī)自動飛行控制系統(tǒng)》
- DB4401-T 19-2019涉河建設(shè)項(xiàng)目河道管理技術(shù)規(guī)范-(高清現(xiàn)行)
- 五星級酒店投資預(yù)算
- 兒科常用藥、用藥特點(diǎn)及護(hù)理ppt
- 胎心監(jiān)護(hù)以及判讀
- 企業(yè)資產(chǎn)損失所得稅稅前扣除鑒證業(yè)務(wù)操作的指南
- 高等數(shù)學(xué)(下冊)資料期末復(fù)習(xí)試題與答案
- 四沖程內(nèi)燃機(jī) 機(jī)械原理課程設(shè)計說明書
評論
0/150
提交評論