Oracle——基本內容(一)

一、用戶管理

1、用戶信息

用戶名/密碼 登錄身份 說明
sys/change_on_install SYSDBA或SYSOPER 不能以NORMAL登錄,可以作爲默認的系統管理員
system/manager SYSDBA或NORMAL 不能以SYSOPER登錄,可以作爲默認的系統管理員
sysman/oem_temp sysman 爲oms的用戶名
scott/tiger NORMAL 普通用戶
aqadm/aqadm SYSDBA或NORMAL 高級隊列管理員
Dbsnmp/dbsnmp SYSDBA或NORMAL 複製管理員
ALTER USER user

IDENTIFIED BY password;

說明:

如果想查看當前用戶所擁有的表和視圖:Select * form tab;

如果想查看當前用戶:select user from dual;

2、創建用戶

        創建用戶的語法爲:

CREATE USER user
IDENTIFIED BY password;

而給用戶授權爲:

GRANT privilege [ ,privelege...]
TO user [,user...];

其中privilege表示系統限權,例如,create session、create table等,舉例如下:

CREATE USER us1
IDENTIFIED BY 1234;

GRANT create session
TO us1;

有時候創建用戶過於麻煩,可以先創建角色,然後在給用戶授權如下:

CREATE ROLE managers;
GRANT create session、create table TO managers;
GRANT managers TO us1;

附加,授予系統權限:

  • create session:連接到數據庫
  • create table:創建表
  • create sequence:創建序列
  • create view:創建視圖
  • create proceduer:創建程序

而如果想撤銷用戶的權限,則:

revoke create table from us1;

二、數據庫的啓動與關閉

        以下用SQL plus來實現啓動和關閉數據庫(以數據庫orcl,用戶爲sys【連接身份爲sysdba】)爲例,首先以scott身份登錄後,再轉爲以sys身份連接:

conn sys as sysdba;
startup open orcl;

而關閉數據庫:

  • shutown:也就是shutdown normal。在一般情況下關閉數據庫,數據庫會等待所有連接的用戶離線,不再讓新的用戶連接,之後dismount(卸載)數據庫,再關閉數據庫。
  • shutdown immediate: 立即關閉數據庫,不會等到用戶離線,先關閉數據庫,卸載數據庫後再關閉例程,數據庫重啓時,不必還原例程。
  • shutdown abort:直接關閉數據庫和例程,數據庫重啓時,需要還原例程。
  • shutdown transaction:交易式關閉數據庫,會等到有交易連接的用戶完成後再關閉數據庫,卸載數據庫後,再關閉例程。

三、表空間、表和視圖的基本操作

1、表空間

        首先創建表空間的語法如下:

CREATE [UNDO | TEMPORARY] TABLESPACE tablespace
DATAFILE | TEMPFILE 'FILE_SPEC'
[MINIMUM EXTENT n [K|M] ]
[AUTOEXTEND
OFF
ON NEXT n KIM MAXSIZE UNLIMITED | n [K|M] ]
[LOGGING | NOLOGGING]
[ONLINE | OFFLING]
[DEFAULT (storage_clause) ] (N/A IfTEMPORARY above)
[EXTENT MANAGEMENT
DICTIONAR (Must be LOVAL for TEMPFILE)
LOCAL
AUTOALLOCATE
UNIFORM [SIZE n [ K|M] ]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]

註釋:

  • FILE_SPEC:數據文件或臨時文件的名稱
  • MINIMUM  EXTENT:最小延伸數
  • AUTOEXTEND:自動延伸數,ON表示打開,OFF表示關閉
  • MAXSIZE:最大數
  • UNLIMITED:無限制
  • LOGGING:在表空間中,設置表、索引和切割區的紀錄屬性
  • NOLOGGING:在表空間中,不設置紀錄屬性,也就是不會產生Unod和Redo紀錄文件
  • ONLINE:連線狀態,可以使用
  • OFFLINE:離線狀態,不可以使用
  • DEFAULT:系統自動產生的默認值
  • EXTENT  MANAGEMENT:指定庫充的管理方式
  • SEGMENT  SPACE  MANAGEMENT:區段空間的管理

舉例,創建表空間TS1:

create tablespace TS1 datafile
'E:\testdb\TEST_DB02.dbf' SIZE 100M
autoextend on next 100M maxsize 1024M
default storage (initial 10M next 1M)
permanent
online
logging;

如果想修改表空間TS1:

alter tablespace ts1
nologging;

如果想在表空間TS1中添加文件則爲:

alter tablespace TS1 add datafile
'E:\TEST_DB01.dbf' size 10M reuse
autoextend on next 10M maxsize unlimited;

如果想刪除表空間TS1:

drop tablespace ts1;

如果在刪除表空間的同時刪除其數據:

drop tablespace ts1 including contents and datafiles;

2、表

1.表的創建

       首先創建表的語法如下:

CREATE TABLE [ schema_name . ] table_name
{ column datatype [NOT NULL] }
[ TABLESPACE tablespace_name]

註釋:

  • schema_name:模式名稱,最常使用的是擁有者
  • table_name:表的名稱
  • column:字段的名稱
  • datatype:數據類型
  • NOT NULL:不能爲空
  • TABLESPACE:表空間
  •  tablespace_name:表空間的名稱

舉例,在表空間(TS1)中創建customer表:

create table customer
(custID varchar2(10) default '00',
custname varchar2(10)
)
tablespace ts1;

此時可以使用describe命令查看錶結構:

describe customer;

如果想將創建的表繼承其它表的結構可以(emp2的表結構和emp相同):

create table emp2
as
select * from emp where 1=2;

如果想將創建的表繼承其它表的結構以及數據(創建表,保存20號部門的員工):

create table emp20
as
select * from emp where deptno=20;

如果繼承的不是單表結構可以:

create table empinfo
as
select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
from emp e, dept d
where e.deptno=d.deptno

2.表的修改

如果想修改表customer:

  • 修改字段類型, 將表的custname字符類型由VARCHAR2(10)改爲CHAR(15)其命令爲:
ALTER TABLE customer
MODIFY (CustName CHAR(15));
  • 向表中添加一個字段,在表customer後面添加custsex:
Alter table customer ADD(ENOTE CHAR(30));
  • 如果想刪除一個字段,先設置其無法還原,然後在將其刪除:
alter tabe customer -- 先設置表無法還原
set unused(CustName);
alter tabe customer --再將其刪除
drop unused columns;
  • 如果想修改表的名稱:
rename customer to cust;

3.表的刪除

如果想刪除表中的數據:

truncate table customer;

而要刪除表則爲:

drop table customer;

如果刪除表時:

Drop table customer cascade constraints;

將會同時刪除參照該表的外鍵約束

 

       在Oracle中當刪除一個表時,實際上該表並沒有被真正刪除,而是被添加到回收站(普通用戶,如果是管理員就真正刪除了),如果想查看回收站的內容可以:

show recyclebin;

如果想要清空回收站可以:

purge recyclebin;

如果想從回收站中恢復刪除過的表可以:

flashback table customer to before drop;

4.表的約束條件

  • 默認值
hiredate date default sysdate
  • 唯一建
Constraint emp_uk UNIQUE (EMPID)
  • 主建

        語法爲:

Constraint Constraint_name PRIMARY KEY (column);

舉例,將EMPID設置爲主鍵:

constraint emp_pk PRIMARY KEY(EMPID));

或者:

alter table EMP
add constraint EMP_emp_pk PRIMARY KEY(empid);
  • 外鍵

      用來將表中的一個字段設置成外鍵,以參照鏈接到相同或不同的表中的另一個字段,這兩個有關係的字段可以相同也可以不同。不可以直接刪除父表。語法爲:

constraint constraint_name Foreign Key (column) references table_name (column);
  • 非空值

      直接在類型後面加上NOT NULL:

EMPID VARCHAR2(10) NOT NULL;
  • 檢查

        語法爲:

Constraint Constraint_name CHECK (condition);

舉例:

部門代碼(deptno)必須在1~99之間:

constraint deptno_ck check (deptno between 1 and 99));

創建一個學生信息表:

create table student
(
sid number constraint student_pk primary key,
sname varchar2(20) constraint student_name_notnull not null,
gender varchar2(2) constraint student_gender check (gender in ('男','女')),
email varchar2(40) constraint student_email_unique unique
constraint student_email_notnull not null,
deptno number constraint student_fk references dept(deptno) on delete set null
);

3、視圖

        首先創建視圖的語法如下:

CREATE [OR REPLACE] [FORCE | NOFORCE] View view
[alias [,alias]...]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint ] ]
[WITH READ ONLY [CONSTRAINT] ];

註釋:

  • OR REPLACE:將已存在的視圖再建一遍
  • FORCE:無論基礎表格是否存在,皆會建立視圖
  • NOFORCE:只有基礎表格存在時,纔會建立視圖
  • view:視圖的名稱
  • alias:使用別名,已供視圖在查詢字段時使用
  • subquery:爲完整的select敘述
  • WITH CHECK OPTION:只有未被指定的數據列纔可以通過視圖進行新增或者修改操作
  • constraint:賦予WITH CHECK OPTION的名稱
  • WITH READ ONLY:保證不能在視圖中執行DML,加入此句後就不會修改數據本身

舉例,創建視圖emp_dep1

create view emp_dep1
as select empid,empname
from emp
where deptno=21;

而如果想修改視圖,則爲:

create or replace view emp_dep1(id,name,no)
as select empid,empname,deptno
from emp
where deptno=21;

而如果想刪除視圖:

drop view emp_dep1;

四、數據的基本操作

1、添加

        語法爲:

Insert INTO table [(column [,column...])]
VALUES (Value [,Value..]);

舉例,向EMP中添加一條數據:

insert into emp(empid,empname)
values('001','abel');

如果想進行批量插入,如一次性將emp中,所有10號部門的員工插入到emp10中:

insert into emp10 select * from emp where deptno=10;

附加,在Oracle中如果想進行海量數據的拷貝可以採用如下方式:

  • 數據泵(datapump) ---> plsql
  • SQL*Loader
  • (數據倉庫)外部表
  • 可傳輸的表空間

2、查詢

       語法爲:

select * from table_name where column=‘查詢值’

如果想在查詢時去掉重複(針對所有列):

select distinct * from table_name where column=‘查詢值’

如果想在查詢時加上排序功能,需要再在查詢添加後面加上

         order by  + 列,表達式,別名,序號+asc/desc【默認爲asc,從小到大】

   如查詢員工信息 按照月薪排序

select * from emp order by sal;

而如果想進行多個列排序,如即按照部門編號(先、主)又按照月薪(後、次)排序

select * from emp order by deptno,sal;

上面的多列排序是默認從小到大排的(每個列都是),但是如果寫出這樣

select * from emp order by deptno,sal desc;

將會deptno按升序排,然後sal按降序排,即desc只作用於離他最近的列,如果每列都是降序:

select * from emp order by deptno desc,sal desc;

如果在排序過程中有空值存在,如按獎金多少排序(可能沒有),在Oracle中null爲最大,即如果按照升序排列,null在最下面,而如果按降序排,null在最上面,但是一般我們都希望空值一直在最下面出現,這時可以:

select * from emp order by comm desc nulls last

3、修改

        語法爲:

UPDATE table
SET column =value[,column=value,...]
[where condition]

4、刪除

        語法爲:

delete from EMP where EMPName ='Abel';

此外如果想要刪除整張表中的所有數據除了可以使用delete,

delete from testdelete;

還可以使用truncate操作

truncate table testdelete;

delete和truncate的區別::

  • delete逐條刪除;truncate先摧毀表,再重建
  • (根本)delete是DML,truncate是DDL
  • delete可以回滾,truncate不可以回滾
  • delete不會釋放空間,truncate會
  • delete可以閃回,truncate不可以
  • delete會產生碎片,truncate不會

5、複製

        語法爲:

INSERT INTO table [column (,column) ] subquery;

舉例,將EMP中EMPID開頭爲001的編號複製到manager中:

insert into manager (EMPID,EMPName,HireData,COMM,DeptNO)
select EMPID,EMPName,HireData,COMM,DeptNO
from EMP
where empid like '001%';

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章