事務:把一組操作看做一個工作單元,要麼都執行,要麼都不執行。dml操作才有事務,查詢沒有事務。 開始事務:從上一次的事務結束之後,從第一次dml操作,就自動開啟了事務 提交事務:commit 回滾事務:rollback create table bank ( id number(5) primary ...
事務:把一組操作看做一個工作單元,要麼都執行,要麼都不執行。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;