事務:把一組操作看做一個作業單元,要么都執行,要么都不執行,dml操作才有事務,查詢沒有事務,
- 開始事務:從上一次的事務結束之后,從第一次dml操作,就自動開啟了事務
- 提交事務:commit
- 回滾事務:rollback
create table bank ( id number(5) primary key, money number(10) check(money>0) ) insert into bank values (1,3000); insert into bank values (2,5000); update bank set money = money-1000 where id=1; update bank set money = money+1000 where id=2; begin update bank set money = money - 1000 where id = 1; update bank set money = money + 1000 where id = 2; commit; exception when others then rollback; end; select * from bank;
視圖:一個虛擬表,不存放資料,只存sql,建立在一張表或多張表的資料查詢基礎上,oracle普通用戶本身沒有創建視圖權限,需要授予,
grant create view to scott;
create view abc as select e.empno,e.ename,d.dname from emp e,dept d where e.deptno=d.deptno; select * from abc;View Code
索引:在某列上創建索引,系統就會對該列進行排序,并且創建該列的索引目錄,如果我們按這個條件來查詢資料,會在該列的索引目錄上找,比一條一條去看全部資料查找滿足條件的要快,主鍵、外鍵創建,系統默認建立索引,
create index ix_emp on emp (ename); drop index ix_emp;
頻繁用于搜索、查詢選擇、排序、分組的列最好就創建索引,該列的值沒有幾個不一樣的(???)、或者該表資料不多,無需創建索引,
索引使用的優化知識:
- 查詢列、減少*的使用,回傳需要的列就好了
- where條件如果多個條件運算式,包含索引列的條件表達放前面,
- 避免order by使用運算式
- 一個表格一個索引就夠了,
序列:一個自增的變數,
select * from bank; delete from bank; create sequence sq_bank; insert into bank values(sq_bank.nextval,500); commit; create sequence sq_bank1 start with 100 increment by 5 nomaxvalue; insert into bank values(sq_bank1.nextval,500); commit;
select sq_bank1.currval from dual;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/4104.html
標籤:Oracle
