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
3:表空間概述
表空間的分類:
3.1永久表空間
3.2臨時表空間
3.3 UNDO表空間
如何檢視使用者的表空間:
dba_tablespaces和user_tablespaces資料字典
dba_users和user_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(5,2),代表有效數字是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的作用是不顯示重複的字目
1在SQL/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;(在name和case之間必須加,號,在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