Oracle数据库之SQL基础(一)
主要內容:用戶與表空間;表與約束;查詢語句。
一、概述
?Oracle安裝:訪問官網,下載
二、用戶與表空間?
在安裝Oracle時在開始菜單里可以用sql puls登錄oracle。
★1、系統用戶
- sys、system?(sys的權限要大于system,sys只能以系統管理員sysdba登錄,system可以直接登錄)
- sysman (用于企業管理,也是管理員級別的用戶)
- scott (密碼默認密碼為tiger)
在sys,system,sysman,scott四個用戶權限中,scott用戶最低。
在安裝Oracle時,前三個用戶的密碼是由你自己設置的,在設置時一般設置的是統一的密碼。
★2、用戶登錄
登錄方式:(sql語句中不區分大小寫)
方法一:[username/password] [@server] [as sysdba|sysoper]
方法二:connnect username/password @server as sysdba|sysoper
例如:使用system用戶登錄
system/root @orcl sa sysdba
orcl就是自己設置的服務名(注意:如果數據庫和服務器不在同一個機器上,就需要輸入服務名或者IP地址)
?★3、查看登錄用戶
- 查看當前用戶:show user;(不屬于SQL語句的范疇,可以不加分號)
- 通過數據字典查看用戶信息:dba_users數據字典 -- 是數據庫提供的表, 用于查看數據庫的信息。查看數據字典:desc dba_users(不屬于SQL語句的范疇,可以不加分號)
- 查看用戶:select username from dba_users;(注意, 使用sql語句時必須在結尾添加";")
★4、啟用Scott用戶 (oracle默認用戶,鎖定的)
- 啟用用戶的語句:alter user username account unlock/lock;
如:alter user scott account unlock;(這里解鎖) - 使用scott用戶登錄SQL Plus:
如:connect scott/tiger
★5、表空間概述
- 表空間與數據庫之間的關系:
表空間是數據庫的邏輯處理空間;可以把表空間理解為在數據庫中開辟的一個空間用于存放數據庫的對象;一個數據庫可以有多個表空間構成;并且oracle的很多優化是基于表空間實現的。
- 表空間與數據文件的關系:
表空間是由一個和多個數據文件構成的;(數據文件的位置和大小可以由用戶自己來定義)
我們需要知道我們存儲的表、數據庫、數據庫當中的一些其他的對象都是存放在表空間的數據文件里面的。
- 表空間分類:
表空間分為 永久表空間、 臨時表空間、 undo表空間。
-
- 永久表空間: 永久存儲的對象,比如表、視圖、存儲過程等
- 臨時表空間:數據庫操作中中間執行的過程, 完了自行刪除將不永久保存
- UNDO表空間:保存事務所修改的舊值,修改前的數據(利于撤銷等方便回滾)
★6、查看用戶的表空間
在Oracle數據庫當中,使用不同用戶登錄之后,他們所使用的表空間可以有所不同。
- 數據字典:dba_tablespaces(系統管理員級別用戶登錄后查看的字典)、user_tablespaces(普通用戶登錄后查看的字典)
用 “desc 數據字典名;” 命令可以查看表空間數據字典的信息。
如:
decs dba_tablespaces(查看dba_tablespaces表有哪些字段)
select tablespace_name from dab_tablespaces;(查看有哪些表空間)
系統用戶可以查看系統和普通用戶的表空間數據字典信息(向下兼容),普通用戶只能查看自己的。
- 數據字典:dba_users(系統用戶級)、user_users(普通用戶級),用法同上
- 設置用戶的默認或臨時表空間:ALTER USER username DEFAULT|TEMPORARY TABLESPACE tablespace_name;(普通用戶沒有修改表空間的權限,必須為他設置權限,否則的話只能使用系統用戶為普通用戶設置表空間)
- 在Oracle數據庫安裝完成后(默認情況下),system用戶的默認表空間和臨時表空間分別是system,temp
default(默認),temporary(臨時),默認下,每個用戶只有一個臨時表空間。
★7、創建表空間?
- 語法格式:create [temporary] tablespace tablespace_name
? ? ? ? tempfile|datafile 'xx.dbf' size xx;
- 創建永久表空間:create tablespace 表空間名 datafile '數據文件名.dbf' size 數據文件大小;
- 創建臨時表空間:create temporary tablespace 表空間名 tempfile '數據文件名.dbf' size 數據文件大小;
數據文件名可以包含路徑,若是沒有包含路徑,則在默認路徑(Oracle安裝目錄)下創建!
例子:
①創建永久表空間:
create tablespace test1_tablespace
datefile 'test1file.dbf' size 10m;
②創建臨時表空間:
create temporary tablespace temptest1_tablespace
tempfile 'temptest1file.dbf' size 10m;
創建好永久表空間或者臨時表空間后,如何進行查看表空間中文件的具體路徑?如果我們不知道默認路徑怎么辦?
在永久表空間中,通過“desc dba_data_files”查看這個數據字典中包含的字段;然后查看我們創建的表空間里它的文件名字“select file_name from dba_data_files where tablespace_name='TEST1_TABLESPACAE';”(注意:表空間的名稱要大寫)
在臨時表空間,查看我們創建的臨時表空間里它的文件名字“select file_name from dba_temp_files where tablespace_name='TEMPTEST1_TABLESPACAE';”
★8、修改表空間?
?主要是修改表空間的狀態和修改數據文件
修改表空間狀態:(在我們創建完表空間后,默認是聯機、可讀寫狀態)
-
- 設置聯機或者脫機狀態:ALTER TABLESPACE tablespace_name ?ONLINE|OFFLINE;(表空間設置為脫機狀態之后就不能使用它了)
- 設置只讀或可讀寫狀態:ALTER TABLESPACE tablespace_name ?READ ONLY|READ WRITE;
注意:默認情況下,當表空間的狀態為"online"時,其是具有讀寫屬性的(read write);對于"offline"狀態的表空間,無法修改其讀寫屬性;(默認的聯機情況下就是可讀寫狀態)
查看表空間的狀態:①查看數據字典:desc dba_tablespace;
②查看表空間的狀態:select status from dba_tablespaces where tablespace_name=‘TESC_TABLESPACE’;
★9、修改數據文件?
增加數據文件和刪除數據文件
增加數據文件:ALTER TABLESPACE tablespace_name ?ADD DATAFILE 'xx.dbf' SIZE xx;
即:alter tablespace 表空間名 add datafile '數據文件名.dbf' size 數據文件大小;
刪除數據文件:ALTER TABLESPACE tablespace_name ?DROP DATAFILE 'xx.dbf';
即:alter tablespace 表空間名 drop datafile '數據文件名.dbf';
(注:我們刪除表空間時,表空間的第一個數據文件是不可以刪除的,除非將整個表空間刪除!)
例如:增加數據文件
刪除數據文件
★10、刪除表空間
?刪除表空間:
drop tablespace 表空間名 [including contents];
注意:如果只是刪除表空間,而不刪除其中的數據文件,可以省略including contents 字句;
drop tablespace tablespace_name [including contents]
(不加‘[including contents]’為只刪除表空間;)
例子:
drop tablespace test1_tablespace including contents;(刪除表空間及表空間下的數據文件)
三、管理表
? 1、認識表?
- 表是基本存儲單位,數據都存放在表當中;
- 在Oracle當中,表都是一個二維結構?;也就是說它是由行和列組成的,可以把一行稱為一條記錄,一列稱為域或字段
- 每張表都有一些約定:
- a. 每一列數據必須具有相同數據類型
- b. 列名唯一
- c. 每一行數據的唯一性(減少數據冗余)
?2、數據類型?
- ?字符型【char(n)、nchar(n)、varchar2(n)、nvarchar2(n)】
- 數值型【number(p,s)、float(n)】
- 日期型【date、timestamp】
- 其他類型 【blob、clob】
字符型:
-
- char(n)、nchar(n)為定長類型。n表示長度。
- nchar2用于存儲Unicode格式的數據,更適合存儲中文數據
- char(n): MAX:2000
- nchar(n):MAX:1000 存儲漢字
假設n=10(輸入三個字符,不足則補充七個空格)如果n很大,輸入的的數據位數比較小,就會浪費很多空間
-
- varchar2(n)、NVARCHAR2(n) 為可變長度類型
- nvarchar2用于存儲Unicode格式的數據,更適合存儲中文數據
- varchar(n): MAX:4000
- nvarchar(n):MAX:2000
假設n=10(輸入三個字符,不需要補足),因此相對char類型,varchar類型節省很多空間
數值型:
-
- NUMBER(P,S)
- P:有效數字 -s:小數點后的位數
例子:NUMBER(5,2) ---- 有效數字5位,保留2位小數,如123.45
-
- FLOAT(n) 用來存儲二進制數據,二進制的位數是1~126位。
- 如果將二進制數轉換為十進制數,需要乘以0.30103得到。因此在Oracle中使用數值型數據時候,我們都使用Number類型
日期型:
-
- DATE(精確到秒)
- DATE類型表示范圍:公元前4712年1月日到公元9999年12月31日 - TIMESTAMP(精確到小數秒)
- DATE(精確到秒)
一般情況下,日期類型都是會使用Date類型。
其他類型:(存放大數據對象)
-
- BLOB:?能存放4G字節大小的數據,以二進制的形式
-
- CLOB:?能存放4G字節大小的數據,以字符串的形式
?3、管理表?
?創建表、修改表、刪除表
創建表:
1)基本語法:
create table table_name?(column_name datatype,...)
注意:同一用戶下(登陸數據庫的用戶)表名要唯一
2)練習:創建用戶信息表
所需字段 --- 字段類型
編號 -- 用戶名 -- 密碼 -- 郵箱 -- 注冊時間
create table userinfo(id number(6,0),username carchar2(20),userpwd varchar2(20),email varchar2(30),regdate date);
查看表中的字段:
? ? ? ? ? ??
修改表:(修改表的結構,不是修改表的數據)
1)添加字段:
alter table table_name add column_name datatype;
例如:alter table userinfo add remarks varchar2(500);
2)更改字段數據類型:
alter table table_name modify column_name datatype;
例如:
alter table userinfo modify remarks varchar2(400);
alter table userinfo modify userpwd number(6,0);
3)刪除字段:
alter table table_name drop column column_name;
例如:alter table userinfo drop column remarks;
4)修改字段名:
alter table table_name rename column column_name to new_column_name;
例如:alter table userinfo rename column email to new_email;
5)修改表名:
rename table_name to new_table_name;
例如:rename userinfo to new_userinfo;
?刪除表:
1)刪除表中的全部數據:(截斷表:清空表)truncate?比delete要快很多
truncate table table_name;
2)刪除表
drop table table_name;
四、操作表中的數據
?添加、修改、刪除數據
?1、添加數據?
1)insert語句:insert into table_name (column1,column2,...) values (value1,value2,...)
添加數據時,值的個數、類型和順序必須和字段的個數、類型和順序相同。
如果向表中的所有字段添加值,則表名后面的(column1,column2,...)內容可省略。
2)操作實例:(字符串要加單引號)
a. 向表中所有字段添加值:insert into userinfo values (1,'xxx','xxx@126.com',sysdate);
b. 向表中指定字段添加值:insert into userinfo (id,username,userpwd) values (2,'yy','123');
c. 向表中添加默認值:
-?在創建表的時候添加默認值:CREATE TABLE table_name(column_name datatype DEFAULT def_value,...);
-?修改字段時添加:ALTER TABLE table_name MODIFY column_name datatype DEFAULT def_value;
- 插入表時添加默認值:insert into 表名(默認字段名) values(1);
create table userinfo1 (id number(6,0),regdate date default sysdate);
例如:?insert into userinfo1 values(id) valuses(1);
sysdate 用于獲取當前系統的時間
?2、復制表數據
? 1)在建表時復制:
create table table_new as select column,...|* from table_old;
例子:
create table userinfo_new as select * from userinfo;(復制userinfo表中的全部數據)
復制一張表:create table 新表名 as select * from 舊表名; * 表示復制所有字段
復制一張表中的某幾個字段:create table 新表名 as select 字段1,字段2 from 舊表名;
2)在添加時復制:
insert into table_new [(column1,...)] select column1,...|* from table_old;
例子:
insert into userinfo_new select * from userinfo;
insert into userinfo_new(id,username) select id,username from userinfo;
向表中再次加入另一表中的數據:insert into 表1 select * from 表2;
在向表中插入數據時,來指定插入某些字段:insert into 表1(字段1,字段2) select 字段1,字段2 from 表2;
?3、修改數據?
修改表數據基本語法:
UPDATE table_name SET column1=value1,... [WHERE conditions];
(不指定條件,則為整個字段均修改)
無條件更新:
update table_name set column1=values1,.....;更新的字段的所有行全部變成相應值
有條件更新:
update table_name set column1=values1,.....?where conditions; 更新的字段的指定行變值
?4、刪除數據?
delete語句
刪除表數據基本語法:DELETE FROM table_name [WHERE conditions];
無條件刪除:delete from 表名;
有條件刪除:delete from 表名 where 條件;
truncate語句
刪除表數據基本語法:TRUNCATE TABLE table_name
1.truncate和 delete只刪除數據不刪除表的結構(定義)?
drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index); 依賴于該表的存儲過程/函數將保留,但是變為invalid狀態。
2.delete語句是dml,這個操作會放到rollback segement中,事務提交之后才生效;如果有相應的trigger,執行的時候將被觸發
truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger。
3.delete語句不影響表所占用的extent, 高水線(high watermark)保持原位置不動?
顯然drop語句將表所占用的空間全部釋放?
truncate 語句缺省情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始)。
4.速度,一般來說: drop> truncate > delete。
5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及。
6.使用上,想刪除部分數據行用delete,注意帶上where子句. 回滾段要足夠大. 想刪除表,當然用drop?
想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete
如果是整理表內部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入數據。
7.DELETE FROM table_name;與TRUNCATE TABLE table_name;區別:
兩者都是用來刪除表中的全部數據,但是TRUNCATE 的速度要比DELETE 快,因TRUNCATE 屬于數據定義語言中的,所以效率較高。
?
總結
以上是生活随笔為你收集整理的Oracle数据库之SQL基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jersey框架
- 下一篇: linux cmake编译源码,linu