個人使用資料庫工具的心得小結,只是小結,自己的自己懂,如有不懂,可以問問
ORACLE 11G
--
1. oracle11g介紹與安裝
1.1 oracle簡介
1.1.1 常見的資料庫
1)關係資料庫
MS access、MS sql server、mysql、db2、oracle等
2)嵌入式資料庫
sqlite
3)OOP的資料庫
db4o
4)大型分散式資料庫
如Hadoop等支援各種檔案型別資料的儲存以及集合資料型別的儲存,一般用來海量資料非實時處理
1.1.2 Oracle資料庫管理系統
Oracle(甲骨文)公司核心產品
主要版本Oracle8i/9i、Oracle10g/11g
主要基於C/S系統結構
當前最流行的資料庫
1.2 oracle安裝與配置
參考(安裝手冊)。
資料庫例項(一組後臺程序)
1.3 oracle關鍵服務
OracleService* 核心服務(必須啟動)
*TNSListener 監聽器服務,核心服務,在使用遠端訪問或PL/SQL Developer工具時必須啟動
*Controleorcl 資料庫控制檯服務,需要使用企業管理器的時候必須啟動
*RecoveryService 恢復、閃回等操作需要開啟該服務
*ClrAgent:Oracle資料庫.NET擴充套件服務的一部分。 (非必須啟動)
1.4工具使用
1.4.1 sqlplus工具
直接開啟程式使用
位置:(程式->oracle-oracle11ghome1->應用程式開發->sqlplus)
登陸方式:username/[email protected] [as sysdba]
命令列使用:
sqlplus username/[email protected] [as sysdba] --作為dba身份進入
1.4.2 sql developer工具
提供圖形介面操作。
1.4.3 plsql developer工具
第三方客戶端工具,提供圖形介面操作。
2. 表空間
資料庫由若干表空間構成,表空間由一到多個數據檔案組成,每個資料檔案只能屬於同一表空間。
2.1分類
永久性表空間:一般儲存表、檢視、過程和索引等的資料
臨時性表空間:只用於儲存系統中短期活動的資料
撤銷表空間:用來幫助回退未提交的事務資料
2.2表空間使用示例
建立表空間語法:
CREATE TABLESPACE 表空間名
DATAFILE
'資料檔案路徑' SIZE 大小
[AUTOEXTEND ON] [next 大小]
[maxsize 大小];
修改表空間語法:
ALTER TABLESPACE 表空間名
ADD DATAFILE
'檔案路徑' SIZE 大小
[AUTOEXTEND ON] [next 大小]
[maxsize 大小];
刪除表空間語法:
DROP TABLESPACE 表空間名;
DROP TABLESPACE表空間名INCLUDING CONTENTS AND DATAFILES;
--建立表空間示例,E盤需要先建立oracle_data目錄,以存放資料檔案
CREATE TABLESPACE ts_itcast
DATAFILE
'e:\oracle_data\tp_itcast28.dbf' SIZE 30M
AUTOEXTEND ON;
--查看錶空間,ts_itcast名字得大寫
SELECT file_name,tablespace_name,bytes,autoextensible
FROM dba_data_files
WHERE tablespace_name='TS_ITCAST';
--調整ts_itcast表空間大小,向表空間內新增資料檔案
ALTER TABLESPACE ts_itcast
ADD DATAFILE
'E:\oracle_data\tp_itcast29.DBF' SIZE 20M
AUTOEXTEND ON;
-- 刪除ts_itcast表空間
DROP TABLESPACE ts_itcast;--只刪除表空間
DROP TABLESPACE ts_itcast INCLUDING CONTENTS AND DATAFILES;--刪除表空間及資料檔案
3. 使用者與許可權
3.1系統使用者
sys使用者:超級使用者,主要用來維護系統資訊和管理例項,以SYSDBA或SYSOPER角色登入。
system使用者: 預設的系統管理員,擁有DBA許可權,通常用來管理Oracle資料庫的使用者、許可權和儲存,以Normal方式登入。
scott使用者:示範使用者,使用users表空間。
3.2使用者與模式
模式為資料庫物件(如表、索引等)的集合,oracle會為每個使用者建立一個模式,和使用者名稱一樣。
3.3建立使用者與許可權
--建立使用者語法:
CREATE USER 使用者名稱 IDENTIFIED BY 密碼
DEFAULT TABLESPACE 表空間;
--許可權操作語法
grant 角色許可權(角色)[,角色許可權] to user_itcast;
grant 操作 on 模式.物件 to user_itcast;
revoke 角色許可權(角色)[,角色許可權] from user_itcast;
revoke 操作 on 模式.物件 from user_itcast;
--修改密碼語法
ALTER USER 使用者名稱 identified by 密碼;
--刪除使用者
DROP USER 使用者名稱 CASCADE;
--DROP TABLESPACE 使用者表空間 INCLUDING CONTENTS AND DATAFILES;--刪除表空間及資料檔案
--建立表空間,以便新建使用者時使用
CREATE TABLESPACE ts_itcast
DATAFILE
'e:\oracle_data\tp_itcast26.dbf' SIZE 30M
AUTOEXTEND ON next 20M;
/
--建立使用者
CREATE USER user_itcast IDENTIFIED BY itcast
DEFAULT TABLESPACE ts_itcast
TEMPORARY TABLESPACE temp;
/
--查詢user_itcast使用者
SELECT *
FROM dba_users
WHERE username='USER_ITCAST';
/
-- 給戶user_itcast使用者授權,回收許可權
GRANT connect, resource TO user_itcast; --授予CONNECT和RESOURCE兩個角色(講解許可權)
GRANT SELECT ON SCOTT.emp TO user_itcast; --允許使用者檢視 EMP 表中的記錄(講解模式)
GRANT UPDATE ON SCOTT.emp TO user_itcast; --允許使用者更新 EMP 表中的記錄
REVOKE connect, resource FROM user_itcast; --撤銷CONNECT和RESOURCE兩個角色
/
--修改密碼
ALTER USER user_itcast identified by user10;
-- 刪除使用者
DROP USER user_itcast CASCADE;
--DROP TABLESPACE ts_itcast INCLUDING CONTENTS AND DATAFILES;--刪除表空間及資料檔案
4.oracle資料型別
4.1dual表
理解為:是一張只有一行記錄的表.不存主題資料,我們也稱為“偽表” ,便於select特定物件.
4.2字元資料型別
CHAR:儲存固定長度的字串,單位元組字元,長度為1-2000.
VARCHAR2:儲存可變長度的字串,單位元組字元,長度為1-4000。
NCHAR和NVARCHAR2:儲存Unicode字符集型別(雙位元組字元),NCHAR長度為1-1000,NVARCHAR2長度為1-2000
4.3數值資料型別
NUMBER:儲存整數和浮點數,格式為NUMBER(p)或NUMBER(p, s),P為有效數位(小數點和-號不計),長度為1-38,s為小數點右邊的數字位數(則有效的整數位‘‘不為0開始算’’為p-s位)。
4.4日期時間資料型別
DATE:儲存日期和時間資料 ,設定格式:環境變數新增:nls_date_format的值為YYYY-MM-DD HH24:MI:SS
插入日期示例:insert into 表名 values(列值, ……,to_date( '2014-10-10 12:12:22','YYYY-MM-DD HH24:MI:SS'));可以此基礎上去掉(值和格式都要去掉)秒,分,時,日,月等,分秒去掉預設為0,時分秒去掉,就只有年月日,日去掉預設為1號,月去掉預設為系統當前月。
TIMESTAMP:秒值精確到小數點後6位,
插入資料示例:insert into tt12 values(1,0.333333333,to_timestamp('2014-10-10 12:12:25.112233','YYYY-MM-DD HH24:MI:SS.FF '));
可以此基礎上去掉(值和格式都要去掉)秒或秒後的精確實值,分,時,日,月等,分秒去掉預設為0,時分秒去掉,時預設為12點(可能跟設定有關),日去掉預設為1號,月去掉預設為系統當前月。
4.5 其它資料型別
VARCHAR、 INTEGER、FLOAT、DOUBLE、lob(BLOB、CLOB、BFILE、NCLOB)
5.偽列
末儲存在表中,只能查詢,不能增刪改。
5.1Rowid
資料庫中行的地址(唯一),可快速定位行。
SELECT ROWID,欄位名……
FROM 表名;
rowid 可以在查詢時通過行ID去查詢,尤其是部分重複資料行,用行ID查詢就很方便了
刪除重複行:
DELETE FROM 表 WHERE ROWID NOT IN (SELECT MIN (ROWID) FROM 表 GROUP BY 所有欄位);
5.2Rownum
給查詢結果返回一個數值表示次序,可以用來限制返回的條數,例如分頁查詢。
SELECT emp.*,rownum
FROM Scott.emp
WHERE ROWNUM<11;
以上語句返回查詢結果的前10條記錄。
5.2.3分頁查詢
注意:rownum大於1的其它整數時,條件不成立;等於2或2以上的正整數時條件不成立;
所以查詢某頁的記錄:例如第4到7條記錄,就不能寫成:
select rownum rn ,t.* from tt12 t where rownum<8 and rownum>3;
可以寫生如下語句:
select * from (select rownum rn ,t.* from tt12 t where rownum<8) where rn>4;
5.2.3排序
取資料的時候產生的序號,想對指定排序後的資料去指定rowmun行號時需要用子查詢
例如:
--建立表
create table testtime(
ttid varchar2(2),
tttime timestamp
);
--修改時間,插入多條測試記錄,
insert into testtime(ttid,tttime) values('1',to_Timestamp('2014-10-11 12:12:25.112233','YYYY-MM-DD HH24:MI:SS.FF'));
insert into testtime(ttid,tttime) values('2',to_Timestamp('2014-10-14 12:12:25.112233','YYYY-MM-DD HH24:MI:SS.FF'));
insert into testtime(ttid,tttime) values('3',to_Timestamp('2014-10-12 12:12:25.112233','YYYY-MM-DD HH24:MI:SS.FF'));
insert into testtime(ttid,tttime) values('4',to_Timestamp('2014-10-13 12:12:25.112233','YYYY-MM-DD HH24:MI:SS.FF'));
commit;
--按時間進行排序,但是rownum順序將是亂的
select rownum,t.* from testtime t order by tttime;
--按時間進行排序,採用子查詢後rownum順序和排序一致
select rownum,tt.* from (select t.tttime from testtime t order by tttime) tt;
6. SQL語言簡介
6.1資料定義語言
主要是create\alter\truncate\drop的使用
6.1.1建表示例
/*
\建立學生表
*/
CREATE TABLE student
(
stu_no CHAR(4) PRIMARY KEY NOT NULL, --學號,主鍵,非空
stu_name VARCHAR2(30) NOT NULL,--姓名,非空
stu_id VARCHAR2(18), --身份證號,代表18位整數
stu_age NUMBER(3,0) --年齡
);
--利用現有表建立新表,select 後邊有多少欄位,新表將有多少個欄位,主鍵不會被建立
CREATE TABLE stu_info AS SELECT stu_no,stu_age FROM student;
6.1.2改表示例
/*
\修改student表,新增stu_seat(座號)和stu_Address(住址) 兩個列
*/
ALTER TABLE student
ADD (stu_seat NUMERIC(2,0) ,
stu_address VARCHAR2(20));
/*
\修改student表的列的定義
*/
ALTER TABLE student
MODIFY (stu_name VARCHAR2 (50),
stu_address VARCHAR2(100)
);
/*
\刪除student表中stu_ address和stu_seat列
*/
ALTER TABLE student
DROP (stu_address,
stu_seat);
/*
\修改student表列名
*/
ALTER TABLE student RENAME COLUMN stu_no TO rempno;
6.1.3刪表示例
/*
\刪除student表結構及資料
*/
DROP TABLE student;
--只刪除表資料,每條刪除的記錄不寫日誌,省資源,效律比delete高
truncate table student;
6.2資料操縱語言
用於增刪改查資料,主要是insert/update/select/delete的使用。
6.2.1準備工作
建立學生表和新增測試資料:
/*
\建立學生表
*/
CREATE TABLE student
(
stu_no CHAR(4) PRIMARY KEY NOT NULL, --學號,主鍵,非空
stu_name VARCHAR2(30) NOT NULL,--姓名,非空
stu_id VARCHAR2(18), --身份證號,代表18位整數
stu_age NUMBER(3,0) --年齡
);
6.2.2新增資料
往student表插入資料
insert into student(stu_no,stu_name,stu_id,stu_age) values('a001','張大','441521199909092111',19);
insert into student(stu_no,stu_name,stu_id,stu_age) values('a002','張二','441521199909092112',19);
insert into student(stu_no,stu_name,stu_id,stu_age) values('a003','張三','441521199909092113',18);
insert into student(stu_no,stu_name,stu_id,stu_age) values('a004','張四','441521199909092114',18);
commit;
6.2.3修改資料
--修改學號為‘a002’學員的名字為‘李二’
update student set stu_name='李二' where stu_no='a002';
--所有學員的年齡都加1
update student set stu_age=stu_age+1 ;
6.2.3查詢資料
查詢(結果)無重複資料行,distinct關鍵字使用:
--查詢結果包括學員名字和年齡,如果存在學員名字和年齡都一樣的多條記錄將只返回一條
select distinct stu_name,stu_age from student;
別名、order by\group by\where\having\like\in\子查詢等使用略。
6.2.4刪除資料
--根據條件刪除表資料
delete from student where stu_no='a004'
--請空表,不寫日誌,省資源,效律高,屬於資料定義語言
truncate table student;
6.3事務控制語言
事務控制語句,主要由commit\rollback\savepoint savepoint_name\rollback to savepoint_name組成。以下為使用示例:
/*
\\事務控制語句應用舉例
*/
--DROP TABLE student;
--執行步驟一:建立student表
CREATE TABLE student
(
stu_no CHAR(4) PRIMARY KEY NOT NULL, --學號,主鍵,非空
stu_name VARCHAR2(30) NOT NULL,--姓名,非空
stu_id VARCHAR2(18), --身份證號,代表18位整數
stu_age NUMBER(3,0) --年齡
);
--執行步驟二:插入資料
insert into student(stu_no,stu_name,stu_id,stu_age) values('a001','張大','441521199909092111',19);
insert into student(stu_no,stu_name,stu_id,stu_age) values('a002','張二','441521199909092112',19);
insert into student(stu_no,stu_name,stu_id,stu_age) values('a003','張三','441521199909092113',18);
insert into student(stu_no,stu_name,stu_id,stu_age) values('a004','張四','441521199909092114',18);
--執行步驟三:操作student表
SAVEPOINT a;
insert into student(stu_no,stu_name,stu_id,stu_age) values('a005','張五','441521199909092115',18);
SAVEPOINT b;
insert into student(stu_no,stu_name,stu_id,stu_age) values('a006','張6','441521199909092116',18);
--執行步驟四:檢視student表,
SELECT * FROM student;
ROLLBACK TO SAVEPOINT b;
SELECT * FROM student;
insert into student(stu_no,stu_name,stu_id,stu_age) values('a007','張7','441521199909092117',18);
--執行步驟五:檢視student表,
SELECT * FROM student;
ROLLBACK TO SAVEPOINT a;
SELECT * FROM student;
--執行步驟六:回滾
ROLLBACK;
--執行步驟七:檢視student表
SELECT * FROM student;
6.4資料控制語言
-- 給戶user_itcast使用者授權,回收許可權
GRANT connect, resource TO user_itcast; --授予CONNECT和RESOURCE兩個角色(講解許可權)
REVOKE connect, resource FROM user_itcast; --撤銷CONNECT和RESOURCE兩個角色
GRANT SELECT ON SCOTT.emp TO user_itcast; --授予使用者user_itcast檢視 使用者SCOTT 模式下的EMP 表中的記錄許可權
REVOKE SELECT ON SCOTT.emp from user_itcast; --取消使用者user_itcast檢視 使用者SCOTT 模式下的EMP 表中的記錄許可權
GRANT UPDATE ON SCOTT.emp TO user_itcast; --授予使用者user_itcast更新 EMP 表中的記錄許可權
7.運算子
7.1算術運算子
+、-、*、/等略。
7.2比較(關係)運算子
=、!=、< 、 > 、 <= 、 >= 、 between...and... 、 in 、 like 、 is null。
is null使用注意:
insert into student(stu_no,stu_name,stu_id,stu_age) values('a008','張8',null,18);--stu_id值為null
insert into student(stu_no,stu_name,stu_id,stu_age) values('a009','張9','',18);--stu_id值為null
insert into student(stu_no,stu_name,stu_id,stu_age) values('a008','張8','null',18);--stu_id值不為null
insert into student(stu_no,stu_name,stu_id,stu_age) values('a009','張9',' ',18);--stu_id值不為null
7.3邏輯運算子
and 、 or 、 not。
7.4連線運算子
||
示例:SELECT stu_id stu_name FROM student;
7.5集合運算子
union(並集無重複)
union all(並集有重複)
intersect(交集,共有部分)
minus(減集,第一個查詢具有,第二個查詢不具有的資料)
使用注意:
列數相關,對應列的資料型別相容,不能含有Long型別的列,第一個select語句的列或別名作為結果標題