Oracle數(shù)據(jù)操作和控制語言詳解 (一)
2024-08-29 13:31:26
供稿:網(wǎng)友
sql語言共分為四大類:數(shù)據(jù)查詢語言dql,數(shù)據(jù)操縱語言dml, 數(shù)據(jù)定義語言ddl,數(shù)據(jù)控制語言dcl。其中用于定義數(shù)據(jù)的結(jié)構(gòu),比如 創(chuàng)建、修改或者刪除數(shù)據(jù)庫;dcl用于定義數(shù)據(jù)庫用戶的權(quán)限;在這篇文章中我將詳細(xì)講述這兩種語言在oracle中的使用方法。
dml語言 dml是sql的一個子集,主要用于修改數(shù)據(jù),下表列出了oracle支持的dml語句。 語句 用途 insert 向表中添加行 update 更新存儲在表中的數(shù)據(jù) delete 刪除行 select for update 禁蠱淥沒х夢蔇ml語句正在處理的行。 lock table 禁止其他用戶在表中使用dml語句
插入數(shù)據(jù) insert語句常常用于向表中插入行,行中可以有特殊數(shù)據(jù)字段,或者可以用子查詢從已存在的數(shù)據(jù)中建立新行。 列目錄是可選的,缺省的列的目錄是所有的列名,包括comlumn_id,comlumn_id可以在數(shù)據(jù)字典視圖all_tab_columns,user_tab_columns,或者dba_tab_columns中找到。 插入行的數(shù)據(jù)的數(shù)量和數(shù)據(jù)類型必須和列的數(shù)量和數(shù)據(jù)類型相匹配。不符合列定義的數(shù)據(jù)類型將對插入值實行隱式數(shù)據(jù)轉(zhuǎn)換。null字符串將一個null值插入適當(dāng)?shù)牧兄小jP(guān)鍵字null常常用于表示將某列定義為null值。 下面的兩個例子是等價的。
insert into customers(cust_id,state,post_code)value('ariel',null,'94501'); 或 insert into customers(cust_id,state,post_code)value('ariel',,'94501'); 更新數(shù)據(jù) update命令用于修改表中的數(shù)據(jù)。 update order_rollupset(qty,price)=(select sum(qty),sum(price) from order_lines where customer_id='kohl'where cust_id='kohl'and order_period=to_date('01-oct-2000') 刪除數(shù)據(jù) delete語句用來從表中刪除一行或多行數(shù)據(jù),該命令包含兩個語句: 1、關(guān)鍵字delete from后跟準(zhǔn)備從中刪除數(shù)據(jù)的表名。 2、where后跟刪除條件 delete from po_lineswhere ship_to_state in ('tx','ny','il')and order_date 清空表 如果你想刪除表中所有數(shù)據(jù),清空表,可以考慮使用ddl語言的truncate語句。truncate就像沒有where子句的delete命令一樣。truncate將刪除表中所有行。truncate不是dml語句是ddl語句,他和delete右不同的特點。 truncate table (schema)table drop(reuse) storage storage子串是可選的,缺省是drop storage。當(dāng)使用drop storage時將縮短表和表索引,將表收縮到最小范圍,并重新設(shè)置next參數(shù)。reuse storage不會縮短表或者調(diào)整next參數(shù)。 truncate和delete有以下幾點區(qū)別 1、truncate在各種表上無論是大的還是小的都非常快。如果有rollback命令delete將被撤銷,而truncate則不會被撤銷。 2、truncate是一個ddl語言,向其他所有的ddl語言一樣,他將被隱式提交,不能對truncate使用rollback命令。 3、truncate將重新設(shè)置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經(jīng)過truncate操作后的表比delete操作后的表要快得多。 4、truncate不能觸發(fā)任何delete觸發(fā)器。 5、不能授予任何人清空他人的表的權(quán)限。 6、當(dāng)表被清空后表和表的索引講重新設(shè)置成初始大小,而delete則不能。 7、不能清空父表。 select for update select for update語句用于鎖定行,阻止其他用戶在該行上修改數(shù)據(jù)。當(dāng)該行被鎖定后其他用戶可以用select語句查詢該行的數(shù)據(jù),但不能修改或鎖定該行。 鎖定表 lock語句常常用于鎖定整個表。當(dāng)表被鎖定后,大多數(shù)dml語言不能在該表上使用。lock語法如下: lock schema table in lock_mode 其中l(wèi)ock_mode有兩個選項: share 共享方式 exclusive 唯一方式 例: lock table intentory in exclusive mode 死鎖 當(dāng)兩個事務(wù)都被鎖定,并且互相都在等待另一個被解鎖,這種情況稱為死鎖。 當(dāng)出現(xiàn)死鎖時,oracle將檢測死鎖條件,并返回一個異常。