表
表示基本的數(shù)據(jù)存儲結(jié)構(gòu)厢蒜,一個表通常由行和列(字段) 組成
創(chuàng)建表可以指定創(chuàng)建到那個表空間上法希, 如果不指定將默認(rèn)創(chuàng)建到用戶的默認(rèn)表空間里
創(chuàng)建表的類型
1. 堆表 : 數(shù)據(jù)安裝組織昌妹,以無序方式放在單獨(dú)的表字段中议忽, 也稱為標(biāo)準(zhǔn)表
2. 索引表 : 數(shù)據(jù)以“B樹” 解耦股恃鞋,存放在主鍵約束所對應(yīng)的的索引字段中
3. 簇表 : 簇由供需數(shù)據(jù)庫的組表組成洞慎, 在某些情況下爪幻。使用簇表可以節(jié)省空間弧圆, 提高SQL的性能
4. 分區(qū)表 : 數(shù)據(jù)被劃分為很小區(qū)間范圍赋兵,并且存儲到響應(yīng)的分區(qū)段中,每個分區(qū)段可以獨(dú)立和操作
數(shù)據(jù)類型
number(p搔预,s): 可##變長度數(shù)字 ## 霹期, p:數(shù)字可用的最大位數(shù)(如果有小數(shù),是小數(shù)點(diǎn)前后之和)s:小數(shù)點(diǎn)的最大位數(shù)拯田,最大精度不能超過38位历造,
number (4,2): 12.34
double , float : 都是number的子類型,38精度的浮點(diǎn)數(shù)
real : number的子類型18位精度的浮點(diǎn)數(shù)
int : integer 船庇,smallint : 38位精度的整數(shù)
long : 可變長的字符數(shù)據(jù)類型:2GB
xml
varchar2(size): 最大長度4000字節(jié)吭产,最小位1字節(jié)
nvarchar2(size) : 可變長字符串,最大長度4000個字節(jié)
char()
nchar()
date : 年月日
timestamp : 年月日時分秒和毫秒
clob : 大字符串對象可以存儲4GB的字符文本
nclob :
Blob : 二進(jìn)制文件
創(chuàng)建表
create table [schema.]table_name(
column_name data_type [defaulte expression] [constraint],
column_name data_type [defaulte expression] [constraint],
column_name data_type [defaulte expression] [constraint],
......
)
schema : 指定表所屬的用戶名
table_name : 創(chuàng)建表的表名
column_name : 列名,一個表每列必須具有唯一性
data_type : 列的數(shù)據(jù)類型
defaulte expression : 列的默認(rèn)值
constraint : 添加約束,表示該列的值必須滿足的規(guī)則
create table book(
bookid number(10) not null,
bookname varchar2(40),
author varchar2(40) ,
press varchar2(40) ,
bookprice number(4,2) ,
presstime date,
constraint pk_book_id primary key(bookid)
);
create table book2(
bookid number(10) not null,
bookname varchar2(40),
author varchar2(40) ,
press varchar2(40) ,
bookprice number(4,2) ,
presstime date,
constraint pk_book_id2 primary key(bookid)
)tablespace system;
修改表:
增加和刪除列
SQL> alter table book2 add c1 number;
表已更改鸭轮。
SQL> desc book2;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
BOOKPRICE NUMBER(4,2)
PRESSTIME DATE
C1 NUMBER
SQL> alter table book2 drop column c1;
表已更改臣淤。
SQL> desc book2;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
BOOKPRICE NUMBER(4,2)
PRESSTIME DATE
禁用指定的類(我們將不能使用該列,但是當(dāng)前列還占用存儲空間)
SQL> alter table book2 set unused(presstime);
表已更改。
刪除標(biāo)記為unused的列,可以將這些列從物理上刪除,收回占用的磁盤空間
SQL> alter table book2 drop unused column;
表已更改窃爷。
修改列
SQL> alter table book2 rename column bookprice to price;
表已更改邑蒋。
SQL> desc book2;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
PRICE NUMBER(4,2)
SQL> alter table book2 modify price number(6,3);
表已更改。
SQL> desc book2;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
PRICE NUMBER(6,3)
對表重命名
SQL> alter table book2 rename to book3;
表已更改按厘。
SQL> select table_name from tabs;
TABLE_NAME
------------------------------
BOOK3
BOOK
SALGRADE
BONUS
EMP
DEPT
已選擇6行医吊。
將表移動到另一個表空間
SQL> select table_name,tablespace_name from user_tables where table_name = 'BOOK4';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
BOOK4 SYSTEM
SQL> alter table book4 move tablespace users;
表已更改。
SQL> select table_name,tablespace_name from user_tables where table_name = 'BOOK4';
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
BOOK4 USERS
刪除表
drop table 表名;
刪除表并立即釋放該表所占用的資源空間
drop table 表名 purge;
不僅刪除表,還會將引用該表的視圖,約束,索引,觸發(fā)器等.全部一并刪除
drop table 表名 cascade constraints
完整性約束
數(shù)據(jù)庫中的數(shù)據(jù)正確性和相容性,用來防止想數(shù)據(jù)庫中添加不合語義的數(shù)據(jù).
表級別約束 : 定義在一個表中,可用于表中多列
列級別約束 : 對表中的一列進(jìn)行約束,只能應(yīng)用一列
約束的用途分類:
- primary key (主鍵約束)
主鍵是由一列或多列組成,唯一標(biāo)識
在一個表中,只能定義一個主鍵約束
不能重復(fù),并且不能包含null. - foreign key (外檢約束)
外鍵引用另一個表中的一列,取值范圍只能是引用中以存在的值
在使用外鍵約束的時候,被引用的列應(yīng)該具有主鍵約束,或者具有唯一性約束. - unique (唯一約束)
只能存儲唯一的值,可以存儲null
oralce將會自動為unique的列創(chuàng)建一個唯一索引
可以在同一個列上建立not null和unique約束(主鍵約束) - not null (非空約束)
指定一列不允許存儲空值,這就是一種強(qiáng)制的檢查約束 - check (檢查約束)
指定一列的值必須滿足某種條件
在check約束的表達(dá)式中,必須引用表中的一個或多個列,并且表達(dá)式的運(yùn)算結(jié)構(gòu)是一個布爾值.
一個列中可以定義多個檢查約束
檢查約束可以定義在表和列上.
SQL> alter table book4 modify bookname not null;
表已更改逮京。
SQL> desc book4;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME NOT NULL VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
BOOKPRICE NUMBER(4,2)
PRESSTIME DATE
SQL> alter table book4 modify bookname null;
表已更改卿堂。
SQL> desc book4;
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
BOOKID NOT NULL NUMBER(10)
BOOKNAME VARCHAR2(40)
AUTHOR VARCHAR2(40)
PRESS VARCHAR2(40)
BOOKPRICE NUMBER(4,2)
PRESSTIME DATE
添加主鍵:
create table table_name(
id number(10) primary key,
...
)
為已經(jīng)創(chuàng)建的表添加主鍵約束
alter table table_name add constraint pk_... primary key(列名)
alter table table_name add primary key(列名)
刪除約束:
alter table table_name drop constraint 約束的名稱;
檢查約束
create table book(
age number(3) constraint ck_age check (age>0)
)
SQL> alter table book4 add constraint ck_book4_price check(bookprice>10);
表已更改。
創(chuàng)建外鍵:
-- Create the table in the specified schema
CREATE TABLE classes
(
classid number(10) NOT NULL PRIMARY KEY, -- primary key column
cname NVARCHAR2(50) NOT NULL,
stunum NVARCHAR2(50) NOT NULL
-- specify more columns here
);
CREATE TABLE student(
sid number(4),
sname varchar2(30),
classid number(10) references classes(classid)
);
為已有表添加外鍵:
alter table student add constraint fk_student_cid foreign key(classid) references classes(classid)
引用類型:
cascade
如果定義外鍵約束時使用cascade關(guān)鍵字,那么當(dāng)父表中被引用列刪除時,子表中對應(yīng)的數(shù)據(jù)將同時被刪除.
set null
當(dāng)刪除父表中引用列數(shù)據(jù)的時候,子表中的數(shù)據(jù)列將被設(shè)置成null
no action
當(dāng)刪除父表中數(shù)據(jù)會被提示違反外鍵約束.
創(chuàng)建用戶必須擁有create user 系統(tǒng)權(quán)限
修改: alter user 用戶名 identified by 密碼
授予用戶登錄權(quán)限
grant create session to user1
修改默認(rèn)表空間
alter user user1 default tablespace 表空間名稱
讓密碼失效
alter user 用戶名 password expire;
鎖定用戶
alter user 用戶名 account lock懒棉;
解鎖
alter user 用戶名 account unlock;
刪除用戶
drop user 用戶名 [cascade]
登錄用戶
connect 用戶名/密碼
權(quán)限
權(quán)限是數(shù)據(jù)庫中執(zhí)行某種操作的能力.創(chuàng)建一個用戶,表示該用戶具有了連接和操作
數(shù)據(jù)庫的資格.但是要對數(shù)據(jù)庫進(jìn)行實(shí)際操作,則需要為用戶賦予相應(yīng)的操作權(quán)限.
系統(tǒng)權(quán)限
系統(tǒng)級控制數(shù)據(jù)庫的存取和使用,是否可以連接到數(shù)據(jù)庫.
創(chuàng)建會話,創(chuàng)建表,創(chuàng)建視圖,創(chuàng)建用戶等.
系統(tǒng)權(quán)限分類:
包含 any 關(guān)鍵字的系統(tǒng)權(quán)限 , 可以在任何Oracle模式(用戶)下進(jìn)行相應(yīng)的操作
不包含 any 關(guān)鍵字的系統(tǒng)權(quán)限, 只能在自身用戶模式中進(jìn)行相應(yīng)的操作.
select any ->可以查詢?nèi)魏斡脩粝旅娴谋? select -> 只能查詢自身用戶下面的表
create table
create session
manage tablespace
create/alter/drop user
create view;
對象權(quán)限
模式對象控制存取和使用的機(jī)制
對表,視圖,存儲過程和函數(shù)等操作的權(quán)限
insert,select,update,delete,alter,index
賦權(quán) :
grant 權(quán)限名稱 to 用戶名
grant create session to user1;
grant create session to user1 with admin option;
with admin option : 該用戶擁有賦予其他用戶賦予此權(quán)限的能力
權(quán)限回收:
revoke create table,create view from user1;
角色 :
角色是一組權(quán)限的集合.可以向用戶授予角色的所有權(quán)限,也可以收回角色權(quán)限.
可以使用預(yù)定義角色,也可以自定義角色.
SQL> select role,password_required from dba_roles;
ROLE PASSWORD
------------------------------ --------
CONNECT NO
RESOURCE NO
DBA NO
SELECT_CATALOG_ROLE NO
CONNECT : 用戶典型權(quán)限
alter session,create cluster,create database,create sequence,create synonym,create view等...
RESOURCE : 開發(fā)者權(quán)限
create table,操作表空間....
DBA : 管理員權(quán)限
select any table,create type,createt table....
SELECT_CATALOG_ROLE : 具有查詢數(shù)據(jù)字典的權(quán)限,并執(zhí)行部分存儲過程和函數(shù)的權(quán)限
創(chuàng)建角色:
create role role_name
not identified | identified by password;
修改默認(rèn)角色
alter user 用戶名 default role 角色名稱,角色名.....
刪除角色
drop role 角色名稱;
dba_roles : 數(shù)據(jù)庫中的所有角色
dba_role_privs : 授予用戶和角色的角色.
查詢當(dāng)前會話包含的所有角色
SQL> select * from session_roles;
ROLE
------------------------------
CONNECT
RESOURCE
創(chuàng)建用戶,授權(quán).
權(quán)限/角色