一;插入
如果只要乙個表的表結構 結尾新增 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 或子查詢的連線條件對另外一...