




已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
SQL更新數(shù)據(jù),Oracle中可以利用DML更新數(shù)據(jù)。其DML語句與其他數(shù)據(jù)庫的SQL語法完全一致都是遵守了工業(yè)標準。與查詢操作不同,更新數(shù)據(jù)將導致數(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ù)應該使用insert命令。插入數(shù)據(jù)的主要途徑包括:通過指定各列的值直接插入、通過子查詢插入、通過視圖插入等。對于通過視圖插入的方式,大多數(shù)應該使用instead of觸發(fā)器來進行處理,因此,本章將著重講述前兩種插入方式。,17.1.1 insert語句向表中插入數(shù)據(jù),insert into people values(people_seq.nextval, 張文, ACT); insert into people (id, name) values(people_seq.nextval, 柳平); 注意與說明:當使用第二種方式插入數(shù)據(jù)時,列名列表和列值列表必須保持一致,即每個列的數(shù)據(jù)類型和實際插入類型保持一致。,17.1.2 利用子查詢批量插入數(shù)據(jù),Oracle可以利用子查詢向表中批量插入數(shù)據(jù)。此時的SQL語句除了包含insert into命令之外,還應該包含一個查詢語句。 insert into people select employee_id, employee_name, status from t_employees where employee_id=3;,17.1.3 insert語句與默認值,當向數(shù)據(jù)表中插入數(shù)據(jù)時,如果表中某列含有默認值約束,對于該列又沒有顯式賦值,那么默認值將作為列值進行插入。 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語句與唯一性約束,當使用insert語句時,需要注意的是唯一性約束。當插入的列值違反了唯一性約束時,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ā)器實現(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ù),以避免兩個表中主鍵的重復。此時,需要修改表中所有id的值。以表people為例,在修改列id的值的同時,也可以修改status列的值。 update people set id = (20000+id), status = ACT;,17.2.3 利用where子句限制修改范圍,where子句是update命令最常用的子句。不使用where子句的update命令是不安全的。因為不使用where子句將一次性修改表中所有記錄,這將帶來極大的安全隱患。為了將表people中,id大于20010的status列修改為“CXL”則可以利用如下所示的SQL語句。 update people set status = CXL where id 20010;,17.3 刪除數(shù)據(jù),數(shù)據(jù)刪除的目標是數(shù)據(jù)表中的記錄,而不是針對列來進行的。刪除數(shù)據(jù)應該使用delete命令或者truncate命令。其中delete命令的作用目標是表中的某些記錄,而truncate命令的作用目標是整個數(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用于指定刪除的目標表為people,并指定該表的別名為p;where exists(select 1 from t_employees e where e.employee_name = )用于指定刪除記錄的過濾條件在表t_employees中存在著一條記錄,該記錄的employee_name列值等于表people的當前記錄的name列值;該刪除語句用于保證表people中,所有的姓名不再存在于表t_employees中。 注意與說明:delete命令是針對表中的整條記錄,因此,其后不需要指定列名或者*。例如,執(zhí)行delete * from people,Oracle將拋出錯誤提示。,17.3.2 用truncate命令刪除數(shù)據(jù),truncate命令刪除數(shù)據(jù)和delete命令刪除數(shù)據(jù)主要有三點不同。 truncate命令屬于DDL(數(shù)據(jù)庫定義語言)范疇,而delete命令是DML(數(shù)據(jù)庫操作語言)范疇。 truncate命令將一次性刪除數(shù)據(jù)表的所有數(shù)據(jù),而delete語句將對數(shù)據(jù)表中所有記錄進行循環(huán)處理。 truncate命令刪除的數(shù)據(jù)將不能回滾,而delete語句在提交修改之前,仍然可以回滾操作。 truncate table people;,17.4 數(shù)據(jù)提交與回滾,Oracle中有回滾段的概念。Oracle中的回滾段是指,當DML修改數(shù)據(jù)庫時,用于存儲原數(shù)據(jù)影像的存儲空間。當DML修改數(shù)據(jù)庫中的數(shù)據(jù)(例如,update和delete命令)之后,執(zhí)行提交之前, 如果執(zhí)行了回滾操作,Oracle將利用回滾段中的數(shù)據(jù)影像將數(shù)據(jù)庫恢復到修改前的狀態(tài)。,17.4.1 回滾動作,回滾動作有兩種情況,一是用戶在提交動作之前,手動執(zhí)行rollback命令,以放棄該事務對數(shù)據(jù)庫的修改;二是事務執(zhí)行失敗,數(shù)據(jù)庫自動執(zhí)行rollback命令,來恢復事務對數(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ù)據(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ù)讀者所熟悉,所以本章只進行了簡單介紹。需要注意的是利用truncate刪除表中數(shù)據(jù)和利用delete刪除數(shù)據(jù)的區(qū)別:truncate命令是DDL,數(shù)據(jù)刪除之后,不可回滾;而delete命令是DML,數(shù)據(jù)刪除之后,可以利用rollback進行回滾。就速度而言,truncate命令要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件項目風險管理的重要性試題及答案
- 企業(yè)戰(zhàn)略評審與風險防范試題及答案
- 2025年軟考設(shè)計師備考材料試題及答案
- 2025年網(wǎng)絡(luò)管理員考試計劃試題及答案
- 計算機保護與恢復策略試題及答案
- 2025年軟件測試與試題及答案分析
- 2025年軟考設(shè)計師信息收集與試題及答案
- 2025年軟件設(shè)計師考試復習思路及試題及答案
- 掌握軟考網(wǎng)絡(luò)管理員考試內(nèi)容的重要性與試題答案
- 企業(yè)數(shù)字化轉(zhuǎn)型下的戰(zhàn)略選擇試題及答案
- 第18課《井岡翠竹》課件-2024-2025學年統(tǒng)編版語文七年級下冊
- 【MOOC】《思想道德與法治》(東南大學)章節(jié)中國大學慕課答案
- 【MOOC】以案說法-中南財經(jīng)政法大學 中國大學慕課MOOC答案
- 卜算子-送鮑浩然之浙東課件
- 上海市社區(qū)工作者管理辦法
- 顱腦損傷患者護理查房課件
- 口腔疾病與全身系統(tǒng)性疾病的關(guān)系課件
- 年產(chǎn)16萬噸焦油焦油車間蒸餾工段工藝初步設(shè)計 畢業(yè)設(shè)計
- 霍亂弧菌實驗室檢測PPT
- 五年級下學期信息技術(shù)3Done三維制作蘿卜課件
- DB51∕T 2858-2021 農(nóng)業(yè)科技成果效益計算方法及規(guī)程
評論
0/150
提交評論