Oracle之資料修改

2021-09-10 08:08:51 字數 3567 閱讀 8553

一;插入

如果只要乙個表的表結構 結尾新增 where 1=0

sql> create table dept as select * from departments where 1=0;

table created.

當插入欄位數和表字段數一致可以不輸入欄位名,數目不一致時需指明字段,操作如下

sql> desc dept;

name null? type

department_id number(4)

department_name not null varchar2(30)

manager_id number(6)

location_id number(4)

sql> insert into dept values(70,'public relation',100,1700);

1 row created.

sql> insert into dept values(80,'purchase');

insert into dept values(80,'purchase')

error at line 1:

ora-00947: not enough values

sql> insert into dept(department_id,department_name) values(80,'purchase');

1 row created.

注意 :插資料時 字元,日期型別要用單引號

如果沒有對應可用空佔位插入

sql> insert into dept values(80,'purchase',null,null);

1 row created.

在插入日期資料是最好使用to_date進行轉換和指定顯示格式不然容易因為語言原因導致無法插入資料

指定插入:

sql> insert into

2 (select employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id from emp where manager_id=120)

3 values(199,'sds','dsa','dfwe',(select phone_number from emp where employee_id=183),'23-may-04','sh_clerk',5100,null,152,50);

1 row created.

即使子查詢結果為多個也直插入一條結果

批量插入:

sql> insert into dept(department_id,department_name,manager_id,location_id)

2 select department_id,department_name,manager_id,location_id from departments where department_id=100;

修改:1:直接修改:

sql> update emp

2 set job_id='fi_acco',

3 salary=(8200)

4 where employee_id=112;

1 row updated.

2:條件修改 : 修改employee_id為112的薪資和工作與id為110的一致

操作如下:

sql> select employee_id,salary,job_id from emp where employee_id=110

2 ;employee_id salary job_id

110 8200 fi_account

sql> select employee_id,salary,job_id from emp where employee_id=112

2 ;employee_id salary job_id

112 7800 fi_account

sql> update emp

2 set job_id=(select job_id from emp where employee_id=110),

3 salary=(select salary from emp where employee_id=110)

4 where employee_id=112;

1 row updated.

這句語法可以進行優化,這句話實行了兩次查詢可使用如下語句,即可只查詢一次提公升效能:

操作如下:

sql> update emp

2 set (job_id,salary)=(select job_id,salary from emp where employee_id=110)

3 where employee_id=112;

1 row updated.

注:子查詢結果必須唯一

3:刪除

sql> select * from dept;

department_id department_name manager_id location_id

100 finance 108 1700

101 adbgw 109 1900

102 uvuyv 110 2000

指定刪除

sql> delete from dept where department_id=100;

1 row deleted.

sql> select * from dept;

department_id department_name manager_id location_id

101 adbgw 109 1900

102 uvuyv 110 2000

刪除時必須指明刪除內容或字段否則刪除的將是整個表

sql> delete from dept;

2 rows deleted.

sql> select * from dept;

no rows selected

刪除後沒有提交可以回滾找回刪除資料,操作如下

sql> rollback;

rollback complete.

sql> select * from dept;

department_id department_name manager_id location_id

100 finance 108 1700

101 adbgw 109 1900

102 uvuyv 110 2000

注:當表很大時使用delete時會很慢,因為他會寫日誌。此時可考慮使用 truncate:

但他是ddl語句,無法後悔;只有在確保資料不使用時才能使用

事物可以設定儲存點方便回滾至指定位置

儲存點也可以使用別名

ddl 語句和 dcl 語句屬於事物語句,乙個事物開始只要不提交資料就只有當前更改的當前人員可看,其餘人員看不見修改,但若是提交或是另乙個事物開始則當前人員的更改將會自動提交,其餘人員就可看見更改

在操作刪除更新等操作時如果不提交,存在行級鎖則其他使用者無法更改同行內的所有字段,只有提交事務後其他人員才能執行操作

殺死乙個事物就是將事物回滾

Oracle系統結構之修改oracle記憶體引數

linux主機16g記憶體,修改oracle資料庫記憶體引數 修改貢獻記憶體引數後,reboot重啟伺服器。2 sqlplus登入oracle資料庫,備份引數檔案 以下語句備份引數檔案 必須 3 show parameter memory檢視oracle引數設定 如果value都是0,如上圖所示,則...

修改oracle的資料檔案

修改資料檔案 調整的工作前一定要對資料進行備份,切記 1,基本概念 oracle 系統內部給出乙個叫作 表空間 的邏輯磁碟空間。早期的系統主要用於存放表的資料,所以叫作表空間。表空間是乙個邏輯空間,每個空間至少與乙個或者多個資料檔案相對應。看下圖 也就是說 乙個資料庫的資料共同儲存在資料檔案裡,資料...

Oracle 批量修改資料 Merge

merge語句是sql語句的一種。在sql server oracle資料庫中可用,mysql postgresql中不可用。merge是oracle9i新增的語法,用來合併update和insert語句。通過merge語句,根據一張表 原資料表,source table 或子查詢的連線條件對另外一...