1. 程式人生 > >Oracle資料庫個人學習筆記

Oracle資料庫個人學習筆記

Oracle資料庫知識講解

第一章:使用者和表空間

1:登入部分

開啟SQL PLUS(Oracle資料庫裡不分大小寫)

Sys(許可權要高於SYSTEM)和system兩個使用者名稱,密碼預設是不顯示的

當登入SYSTEM使用者名稱時。我設定的密碼是Wuyi1482675166,可以用connect sys/Wuyi1482671566 as sysdba; 進入最高許可權的sys,而sys進入system可以不用輸入as sysdba;

2:語法

顯示當前使用者名稱:Show user

啟用使用者的語句:Alter user username account unlock(lock)scott

使用者預設的密碼是tiger

3:表空間概述

表空間的分類:

3.1永久表空間

3.2臨時表空間

3.3 UNDO表空間

如何檢視使用者的表空間:

dba_tablespacesuser_tablespaces資料字典

dba_usersuser_users資料字典

設定使用者的預設和臨時表空間:

ALTER USER username

DEFAULT|TEMPORARY

4建立表空間

CREATE[TEMPORARY]TABLESPACE

tablespace_name

TEMPFILE|DATAFILE ’xx.dbf’ SIZE xx

舉例說明(永久表空間)

Create tablespace test1_tablespace

Datafile’test1file.dbf’ size 10M;

舉例說明(臨時表空間)

Create temporary tablespace temptest1_tablespace

tempfile’temptest1file.dbf’ size 10M;

5修改表空間

修改表空間的狀態:

設定聯機和離線狀態:

ALTER TABLESPACE tablespace_name

ONLINE|OFFLINE;

設定只讀或可讀寫狀態:

ALTER TABLESPACE tablespace_name

READ ONLY|READ WRITE

修改資料檔案:

增加資料檔案:

ALTER TABLESPACE tablespace_name

ADD DATAFILE ’xx.dbf’ SIZE xx;

刪除資料檔案

ALTER TABLESPACE tablespace_name

DROP DATAFILE ’xx.dbf’ SIZE ;(不能刪除建立表空間時的第一個檔案,如果要刪除,則把整個表空間刪除掉)

刪除表空間:

DROP TABLESPACE

tablespace_name [INCLUDING CONTENTS]

第二章:管理表

1 認識表

基本儲存單位

二維結構

行和列

約定:

每一列資料必須是相同的資料型別

列名唯一

每一行資料的唯一性

2 資料型別

字元型,數值型,日期型,其他型別。

字元型:

CHAR(n),NCHAR(n)  n代表字元的長度;

VARCHAR2(n) ,NVARCHAR2(n)

數值型:

NUMBER(p,s)   p為有效數字,s為小數點後面的位數,如NUMBER(52),代表有效數字是5,保留2位有效數字,如123.45

FLOAT(n)

DATA(常用的日期型別)    sysdate語句獲取當前日期

TIMESTAMP(時間的精確描述)

其他型別:

BLOB

CLOB

3 管理表

建立表

基本語法:

CREATE TABLE table_name(column_name datatype , ...)

管理表

舉例建立使用者資訊表:

所需欄位

欄位型別

編號 使用者名稱 密碼 郵箱 註冊時間

程式碼如下:

Create table userinfo

(id number(6,0),

Username varchar(20),

Userpwd varchar2(20),

Email varchar2(30),

Regdate date);

表已建立

修改表

新增欄位:

ALTER TABLE table_name

ADD column_name datatype;

更改欄位資料型別:

ALTER TABLE table_name

MODIFY column_name datatype;

刪除欄位:

ALTER TABLE table_name

DROP COLUMN column_name;

修改欄位名:

RENAME COLUMN column_name TO new column_name;

修改表名:

RENAME table_name TO new_table_name;

刪除表:

TRUNCATE TABLE table_name;(這條語句是刪除表中的全部資料,並不是將表刪除掉,要比DELECT刪除錶快很多)

DROP TABLE table_name;(刪除整個表結構)

第三章:操作表中的資料

1操作表中的資料

新增資料:

INSERT語句:

INSERT INTO table_name

(column1,column2,...)

VALUES(value1,value2,...)

操作例項

向表中的所有欄位新增值:

Insert into userinfo

查看錶的所有值:

Select * from userinfo;

向表中指定的欄位新增值:

Insert into userinfo

向表中新增預設值:

如:create table userinfo1

(id number(6,0),

Regdate date default sysdate);

表示日期預設值是當前日期

2複製表資料

在建表時複製:

CREATE TABLE table_new

AS

SELECT column1,...|* from table_old

在新增時複製:

INSERT INTO table_new

[(column1,column2,...)]

SELECT column1,column2,...|* from table_old;

3修改資料

UPDATE語句:

UPDATE table_name

SET column1=value1,...

[WHERE conditions]

操作例項

Update userinfo

Set userpwd=’111’;(userpwd所有列的密碼都設定為111)

Update useinfo set userpwd=’123456’ where username=’xxx’;(將使用者名稱是xxx的密碼設定為123456)

4刪除資料

DELECT FROM table_name [WHERE conditions]

無條件的刪除:沒有加where

有條件的刪除:加了where語句

禁用唯一約束:DISABBLE|ENABLE CONSTRAINT constraint_name

徹底刪除唯一約束:DROP CONSTRAINT constraint_name

1約束概述

1.1約束的作用:

1.1.1定義規則

1.1.2確保完整性

1.2非空約束

1.3主鍵約束

1.4外來鍵約束

1.5唯一約束

1.6檢查約束

2非空約束

2.1在建立表時設定非空約束:

CREATE TABLE table_name(column_name datatype NOT NULL,...);

2.2在修改表時新增非空約束:

ALTER TABLE table_name MODIFY column_name datatype NOT NULL;

2.3在修改表時去除非空約束:

ALTER TABLE table_name MODIFY column_name datatype NULL;

3主鍵約束

3.1作用:

確保表當中每一行的資料的唯一性,一張表只能設定一個主鍵約束,主鍵約束可由多個欄位構成(聯合主鍵或複合主鍵)

3.2 在建立表時設定主鍵約束:

CREATE TABLE table_name(column_name datatype PRIMARY KEY);

或者CREATE TABLE table_name(column_name datatype,CONSTRAINT constraint_name PRIMARY KEY(column_name1,...));

4在修改表時新增主鍵約束

ADD CONSTRAINT constraint_name PRIMARY KEY(column_name,...);

4.1 更改約束的名稱:

RENAME CONSTRAINT old_name TO new_name

4.2 刪除主鍵約束:

DISABLE|ENABLE CONSTRAINT constraint_name

或者DROP CONSTRAINT constraint_name

或者DROP PRIMARY KEY[CASCADE]

5 在建立表時新增外來鍵約束

5.1 CREATE TABLE table1(column_name datatype REFERENCES table2(column_name),...);

說明:table1稱為從表,table2稱為主表,設定外來鍵約束時,主表的欄位必須是主鍵,主從表中相應的欄位必須是同一資料型別,從表中外來鍵欄位的值必須來自主表中相應欄位的值,或為null

5.2 在建立表時設定外來鍵約束

CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name)[ON DELETE CASCADE]

6 在修改表時新增外來鍵約束

ADD CONSTRAINT constraint_name FOREIGN KEY(column) REFERENCES table_name(column_name)[ON DELETE CASCADE]

說明:constraint_name是自己設定的約束名稱

7 刪除外來鍵約束

7.1禁用外來鍵約束:DISABBLE|ENABLE CONSTRAINT constraint_name

7.2 徹底刪除外檢約束:DROP CONSTRAINT constraint_name

8 唯一約束

作用:保證欄位的唯一性

唯一約束和主鍵約束的區別:

主鍵約束欄位值必須是非空的

唯一約束允許有一個空值

主鍵約束在每張表中只能有一個

唯一約束可以有多個

9 在建立表時設定唯一約束

CREATE TABLE(column_name,datatype UNIQUE,...)

或者CONSTRAINT constraint_name UNIQUE(column_name)

10 在修改表時新增唯一約束

ADD CONSTRAINT constraint_name UNIQUE(column_name);

11 刪除唯一約束

禁用唯一約束:DISABBLE|ENABLE CONSTRAINT constraint_name

徹底刪除唯一約束:DROP CONSTRAINT constraint_name

12 在建立表時設定檢查約束

作用:讓欄位的值有實際意義,比如:年齡:1000,肯定不行

CREATE TABLE table_name(column_name datatype CHECK(expressions),...);

或者CONSTRAINT constraint_name CHECK(expressions);

13 在修改表時新增檢查約束

ADD CONSTRAINT constraint_name CHECK(expressions);

14 刪除檢查約束

禁用唯一約束:DISABBLE|ENABLE CONSTRAINT constraint_name

徹底刪除唯一約束:DROP CONSTRAINT constraint_name

總結本章內容:

非空約束 NOT NULL

主鍵約束外來鍵約束 PRIMARY KEY 一張表只能有一個

外來鍵約束 FOREIGN KEY ... REFERENCES... 涉及兩張表的關係

唯一約束 UNIQUE

檢查約束 CHECK

常用到的資料字典:user_constraints

第四章:查詢語句

1基本查詢語句

查詢語句:查詢某張表中含有哪些約束

SELECT[DISTINCT] column_name1,...|* FROM table_name [WHERE conditions]

說明distinct的作用是不顯示重複的字目

1SQL/PLUS中設定格式

COLUMN column_name HEADING new_name(COLUMN可以簡寫成col)

COLUMN column_name FORMAT dataformat(說明:字元型別的只能設定顯示的長度)

如:col username format a10;(a開頭,設定欄位的長度)

數值型別的用9’代表一個數字

如:col salary format 9999.9;

col salary format $9999.9;(在前面加上美元符號)

COLUMN column_name CLEAR(清除格式)

2查詢表中的所有欄位及指定欄位

所有欄位:SELECT * FROM ..

指定欄位:SELECT A,B,C... FROM ..

3給欄位設定別名

SELECT column_name AS new_name,.... FROM table_name;

4 運算子和表示式

表示式=運算元+運算子

算術運算子(+-*/

Eg:select id,name,salary+200 from userinfo_3;(但是不會改變原來表中的資料)

比較運算子(<,>,<=,>=,=,<>

select name from userinfo_3 where salary>15000;

邏輯運算子(and ,or,not

select name from userinfo_3 where salary>15000 and salary>30000;

5 帶條件的查詢

條件查詢:

select salary,... from userinfo_3 where name='wuyi' or ...;

6 模糊查詢

LIKE關鍵字

萬用字元的使用(_,%

一個_只能代表一個字元,%可以代表0到多個任意字元

使用LIKE查詢

Eg: select * from userinfo_3 where name like 'w%'(查詢以w開頭的使用者名稱的資訊)

Eg: select * from userinfo_3 where name like '_u%'(查詢第二個字元是u的使用者名稱的資訊)

Eg: select * from userinfo_3 where name like '%u%'(含有u字元的使用者名稱的資訊)

7 範圍查詢

BETWEEN AND(表示從......,閉合區間)

Eg:select * from userinfo_3 where salary between 100000 and 70000;

Eg:select * from userinfo_3 where salary not between 100000 and 70000;

IN/NOT IN語句:

Eg:select * from userinfo_3 where name in(‘aaa’,’bbb’);(查詢使用者名稱是aaa或者是bbb的資訊)

Eg:select * from userinfo_3 where name not in(‘aaa’,’bbb’);(查詢使用者名稱不是aaa且是bbb的資訊)

8 對查詢結果排序

SELECT ...FROM...[WHERE...]

ORDER BY column1 DESC/ASC,....

9 case...when語句的使用

CASE column_name When value1 then result1...[ELSE result] END(namecase之間必須加,號,在when 處不要加,)

Eg:

select name,case name when 'wuyi' then '計算機部門'

      when 'lisi' then '市場部'

       else '其他部門' end as 部門 from userinfo_3;

結果:

NAME                                     部門

---------------------------------------- ------------------------------

wuyi                                     計算機部門

zhangsan                                 其他部門

lisi                                       市場部

wuyi                                     計算機部門

CASE

WHEN column_name=values THEN result1,...[ELSE result] END;

Eg:

select name,case when salary>50000 then '高工資人群'

      when salary<30000 and salary>15000 then '白領人群!'

    else '你得加油了' end as 工資水平 from userinfo_3;

10 decode函式的使用

decode(column_name,values1,result1,...,defalutvalue)

Eg:

select name,decode(name,'wuyi','計算機部門','lisi','市場部門''其他') as  部門 from userinfo_3;

oracle中如何插入date型別的資料

insert into tabname(datecol) value(sysdate) ;  -- date

insert into tabname(datecol) value(sysdate+1)<img id="selectsearch-icon" src="https://gss0.bdstatic.com/70cFsjip0QIZ8tyhnq/img/iknow/qb/select-search.png" alt="搜尋"> ;  -- date

insert into tabname(datecol) value(to_date('2014-02-14','yyyy-mm-dd')) ;  -- to_date

insert into tabname(datecol) value(to_date('2014-02-14 20:47:00','yyyy-mm-dd hh24:mi:ss')) ;  -- to_date

insert into tabname(datecol) value(to_date('20140214','yyyymmdd')) ;  -- to_date

insert into tabname(datecol) value(to_date('20140214204700','yyyymmddhh24miss')) ;  -- to_date