Oracle數(shù)據(jù)的插入insert、更新update、刪除delete、truncate舉例詳解
前言
本文主要概述的內(nèi)容是在Oracle中數(shù)據(jù)的插入-insert、更新-update、刪除-delete、truncate。也會(huì)把工作當(dāng)中可能用到的場(chǎng)景給總結(jié)出來(lái),以方便大家需要時(shí)查詢。
插入數(shù)據(jù)-insert
單行插入所有列
insert into 表名 values(值1,值2,值3……); insert into 表名 values(值1,值2,值3……); insert into 表名 values(值1,值2,值3……); commit; ……
注意:values值的順序需要和表的字段順序保持一致,如果沒(méi)有具體值需用null填充,否則會(huì)報(bào)錯(cuò)(沒(méi)有足夠的值)。
執(zhí)行一行,插入一條數(shù)據(jù),若要拆入多行數(shù)據(jù),則編輯好對(duì)應(yīng)值,執(zhí)行多行即可。
部分字段插入數(shù)據(jù)
工作中有時(shí)只想給表中的某幾個(gè)字段插入值,或者插入所有列但忘記表中的字段順序時(shí),可以指定字段和對(duì)應(yīng)的值來(lái)進(jìn)行操作。
insert into 表名(字段1,字段2,字段3……) values(值1,值2,值3……); commit;
將表1數(shù)據(jù)插入到表2
這個(gè)應(yīng)用場(chǎng)景和數(shù)據(jù)備份相似,或者理解為數(shù)據(jù)的復(fù)制都可以,目的是要從一個(gè)表中篩選出來(lái)的數(shù)據(jù)復(fù)制到另一個(gè)表中。
注意:兩個(gè)表的表結(jié)構(gòu)必須保持一致
insert into 表2 select * from 表1; --將表1的所有數(shù)據(jù)插入到表2中 commit; insert into 表2 select * from 表1 where 條件; --可以加篩選條件 commit;
插入檢索出的數(shù)據(jù)
此方式工作中也經(jīng)常使用,可以理解為上述幾種方式的結(jié)合。通過(guò)檢索出另一張表的數(shù)據(jù)將值插入到具體指定的列。
insert into 表1(字段1, 字段2, 字段3, ……) select 字段1, 字段2, 字段3, …… from 表2 [篩選條件……] commit;
更新數(shù)據(jù)-update
基本的UPDATE語(yǔ)句由三部分組成,分別是:
- 要更新的表;
- 列名和它們的新值;
- 確定要更新哪些行的過(guò)濾條件(很重要)
- 要?jiǎng)h除某個(gè)列的值,可設(shè)置它為NULL(假如表定義允許NULL值)
--更新表中列的值 update 表名 set 字段1 = 值1, 字段2 = 值2, …… where 篩選條件; --刪除某列的值 update 表名 set 字段1 = NULL where 篩選條件;
刪除數(shù)據(jù)-delete & truncate
從一個(gè)表中刪除(去掉)數(shù)據(jù),使用DELETE語(yǔ)句。有兩種使用DELETE的方式:
- 從表中刪除特定的行
- 從表中刪除所有行
注意:where子句很重要,因?yàn)樯圆蛔⒁?,就?huì)錯(cuò)誤地刪除表中所有行。
DELETE刪除整行而不是刪除列。要?jiǎng)h除指定的列,請(qǐng)使用 UPDATE 語(yǔ)句。
如果想從表中刪除所有行,不要使用 DELETE??墒褂?TRUNCATE 語(yǔ)句,它完成相同的工作,而速度更快(因?yàn)椴挥涗洈?shù)據(jù)的變動(dòng))。
--刪除符合條件的某行/某幾行數(shù)據(jù) delete from 表名 where 篩選條件; --刪除表中的所有行 delete from 表名; truncate table 表名;
dalete和truncate的主要區(qū)別
- delete語(yǔ)句是一種DML(數(shù)據(jù)操作語(yǔ)言)語(yǔ)句,而truncate語(yǔ)句是一種DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句。這意味著delete語(yǔ)句是用于操作數(shù)據(jù)的,而truncate語(yǔ)句是用于操作表結(jié)構(gòu)的。
- delete語(yǔ)句可以使用where子句來(lái)指定刪除的條件,而truncate語(yǔ)句不能使用where子句,只能整表刪除。
- delete刪除數(shù)據(jù)時(shí),會(huì)將每一行的數(shù)據(jù)都放入回滾段(rollback segment)中,以便在事務(wù)回滾時(shí)可以還原數(shù)據(jù)。而truncate并不會(huì)將數(shù)據(jù)放入回滾段中,無(wú)法回滾。
- delete語(yǔ)句刪除數(shù)據(jù)是逐行進(jìn)行,對(duì)于大表來(lái)說(shuō),刪除數(shù)據(jù)的效率相對(duì)較低。而truncate語(yǔ)句是直接刪除整個(gè)表的數(shù)據(jù),因此對(duì)于大表來(lái)說(shuō),刪除數(shù)據(jù)的效率相對(duì)較高。
附:Oracle一次插入多條記錄
方式1:
要向數(shù)據(jù)庫(kù)中寫(xiě)入多條記錄,記錄集已經(jīng)確定,如果一次一次插入勢(shì)必影響效率。
解決方法:
注意:上面最后一個(gè)select之后沒(méi)有union all,否則報(bào)錯(cuò)。
方式2:
總結(jié)
到此這篇關(guān)于Oracle數(shù)據(jù)的插入insert、更新update、刪除delete、truncate的文章就介紹到這了,更多相關(guān)Oracle數(shù)據(jù)插入更新刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle 12c修改字符集的方法(解決數(shù)據(jù)導(dǎo)入后中文亂碼及ORA-12899錯(cuò)誤)
之前在Windows上安裝的Oracle,現(xiàn)在遷移到Linux上,把dmp文件導(dǎo)入Linux的時(shí)候發(fā)現(xiàn)字段的注釋和存儲(chǔ)過(guò)程中的中文是問(wèn)號(hào)?,而且導(dǎo)入的時(shí)候還會(huì)報(bào)ORA-12899錯(cuò)誤,其實(shí)這些都是字符集問(wèn)題,所以本文給大家介紹了Oracle 12c修改字符集的方法,需要的朋友可以參考下2024-04-04Oracle中查看引起Session阻塞的2個(gè)腳本分享
這篇文章主要介紹了Oracle中查看引起Session阻塞的2個(gè)腳本分享,本文給出了2個(gè)腳本來(lái)查詢導(dǎo)致Session阻塞的原因,并給出Kill引起阻塞的Session方法,需要的朋友可以參考下2014-10-10Oracle數(shù)據(jù)庫(kù)中創(chuàng)建自增主鍵的實(shí)例教程
Oracle的字段自增功能,可以利用創(chuàng)建觸發(fā)器的方式來(lái)實(shí)現(xiàn),接下來(lái)我們就來(lái)看看Oracle數(shù)據(jù)庫(kù)中創(chuàng)建自增主鍵的實(shí)例教程,需要的朋友可以參考下2016-05-05SQL?Developer遷移第三方數(shù)據(jù)庫(kù)單表到Oracle的全過(guò)程
這篇文章主要介紹了SQL?Developer遷移第三方數(shù)據(jù)庫(kù)單表到Oracle的全過(guò)程,文章通過(guò)圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-06-06