oracle-表空間-用戶-角色-權限-約束
一,表空間
1.1創建表空間
--問題:創建一個名為hp的表空間,指定數據文件為hp.dbf,大小為10m.
create tablespace hp datafile ‘C:\app\hp\hp.dbf‘ size 10M autoextend on next 5m maxsize unlimited;
1.2 刪除表空間
drop tablespace hp;
1.3思考題
刪除表空間的時候,如何刪除關聯的數據文件??
drop tablespace test_data including contents and datafiles;
二 創建用戶
2.1創建用戶
--語法結構:create user 用戶名 identified by 密碼 【default tablespace 表空間名】【temporary tablespace temp】
create user hope identified by 123456; create user hope1 identified by 123456 default tablespace users; create user hope2 identified by 123456 default tablespace users temporary tablespace temp;
2.2 修改用戶密碼
--語法結構:alter user 用戶名 identified by 密碼
alter user hope identified by 654321;
2.3 刪除用戶
--drop user 用戶名【cascade】
drop user hope;
drop user hope cascade;
三 權限和角色
--權限指執行特定類型SQL命令或訪問其他對象的權利
--系統權限:允許用戶執行某些數據庫操作
--對象權限:允許用戶對某一特定對象執行特定的操作
--角色是具有名稱的一組權限的組合
3.1 常用系統預定義角色
--CONNECT:臨時用戶
--RESOURCE:更為可靠和正式的用戶
--DBA:數據庫管理員角色,擁有管理數據庫的最高權限
--一般情況下,普通用戶,有connect和resource的角色就夠了。
3.2 賦予權限和角色
--語法結構:grant 角色1,角色2,。。。 to 用戶
grant connect to hope2
grant connect,resource to hope2;
--給hope2賦予查詢scott的emp表的權限
grant select on scott.emp to hope2; grant select,update on scott.emp to hope2;
--撤銷角色和權限:
--語法結構:revoke 角色1,角色2,。。。from 用戶
revoke resource from hope2; revoke connect,resource from hope2;
四 Oracle的數據類型@@
類型 |
語法 |
|
描述 |
文本類型 |
char(n) |
定長 |
最大2000字符,默認n=1 |
varchar2(n) |
變長 |
最大4000字符 |
|
nchar(n) |
定長 |
unicode數據類型,最大2000 |
|
nvarchar2(n) |
變長 |
unicode數據類型,最大4000 |
|
clob(character large Object) |
|
字符型大對象,最大8TB |
|
blob(birnary large Object) |
|
二進制數據,可存放圖片、聲音,最大8TB |
|
數值 |
number(p,s) |
變長 |
p-有效位,s-小數位;1<=p<=38,-84<=s<=127 |
日期 |
date |
|
默認格式:DD-MM-YYYY ‘16-05月-2017’ |
timestamp(n) |
|
|
4.1 文本類型
--char:可以存儲定長的字符串 char(200)
--varchar:可以存儲變長的字符串
--varchar2:可以存儲變長的字符串 varchar2(200)
--什麽時候用char,什麽時候用varchar(2) @@
當已知字符串長度用char比較合適
--不確定字符串長度時,用varchar2比較合適。
--nchar和nvarchar2可以存儲Unicode字符集
4.2 數值類型
--數值數據類型:numer
--number 等價於number(38,0)
--number(15)表示可以存儲一個15位的整數
--number(22,7)表示可以浮點數,整數部分有15位,小數點後有7位
--註意:不建議大家使用varchar,integer,float,double
4.2 日期數據類型
--與日期類型相關的函數
--sysdate:日期函數:顯示當前日期
select sysdate from dual;
--systimestamp:比Date更精確的一個時間
select systimestamp from dual;
--to_date(字符串,格式):將一個Oracle不認識的字符串,轉成Oracle認識的日期格式
select to_date(‘2018-01-05‘,‘yyyy-mm-dd‘) from dual;
--Date:日期類型,存儲日期和時間
--TimeStamp:比Date更精確的一種日期類型。
--默認日期格式:
--中文的Oracle:日-月-年 比如1998年7月1日 ->‘01-7月-1998’
--英文的Oracle:day-mon-year 比如1998年7月1日 ->‘01-JUL-1998‘
--Lob:
--BLOB:存儲二進制對象,如圖像、音頻和視頻文件
--CLOB:存儲字符格式的大型對象
五 表
5.1創建表
1.使用sql/plus創建
create table 表的名稱(字段名稱1 數據類型, 字段名稱2 數據類型…);
示例:
創建學生表,字段和類型如下所示:
字段 |
字段類型 |
id |
number |
name |
varchar2(20) |
sex |
char(2) |
birthday |
date |
score |
number(4,2) |
create table student(
id number,
name varchar2(20),
sex char(2),
birthday date,
score number(4,2)
)
2.使用plsql developer第三方工具創建
--創建表:實際上解決的是表結構的問題,表有幾個字段,每個字段的長度是多少,每個字段是什麽數據類型
--create table 表名(字段名1 數據類型1(長度),字段名2 數據類型2(長度),。。。);
create table student(stuno number(4),stuname varchar2(10),age number(2),addr varchar(50));
5.2 刪除表
drop table student;
5.3 修改表
1.修改表名
RENAME 舊的表名稱 TO 新的表名稱;
2. 添加列
ALTER TABLE 表名稱 ADD
(列名稱 數據類型 [DEFAULT 默認值],
列名稱 數據類型 [DEFAULT 默認值],
…);
3.修改列
ALTER TABLE 表名稱 MODIFY
(列名稱 數據類型 [DEFAULT 默認值],
列名稱 數據類型 [DEFAULT 默認值],
…);
4.刪除列
alter table 表名 drop column 列名;
alter table 表名 drop(列名1,列名2,...);
5.舉例
(1)給學生表添加班級編號
alter table students add(class_id number);
(2)學生姓名變成varchar2(30)
alter table students modify(name varchar2(30));
(3)刪除學生表的score字段
alter table students drop column score;
alter table students drop(score);
(4)把學生表名students修改成stu
SQL>rename students to stu;
六 約束
--問題:往表中插入數據的時候,可能出現一些問題,比如:重復插入數據,內容不對(性別)
--如何保證數據庫表中數據的完整性和一致性呢?
--常見的約束:主鍵(primary key),外鍵(foreign key),唯一(unique),非空(not null),默認(default),用戶自定義(check)
6.1 主鍵約束
--什麽是主鍵約束?主鍵約束就是給表定義一個主鍵,什麽是主鍵?
--主鍵主要是用來保證表記錄的唯一非空的。
--建表的時候添加主鍵
create table student(stuno number(4) primary key,stuname varchar2(10),age number(2),addr varchar(50)); insert into student values(1001,‘zhang‘,18,‘luoyang‘);
--再次插入相同記錄,違法主鍵約束,不允許插入
SQL> insert into student values(1001,‘zhang‘,18,‘luoyang‘);
insert into student values(1001,‘zhang‘,18,‘luoyang‘)
ORA-00001: 違反唯一約束條件 (SYS.SYS_C0010797)
--如果主鍵為null也不允許插入,同樣是違反了主鍵約束
SQL> insert into student values(null,‘zhang‘,18,‘luoyang‘);
insert into student values(null,‘zhang‘,18,‘luoyang‘)
--創建一張課程表:
create table course(cno number(4) primary key,cname varchar2(20),cscore number(2));
--創建一張成績表:學號和課程號共同作為一個主鍵,稱為聯合主鍵
--一張表只能有一個主鍵
create table score(sno number(4),cno number(4),score number(5,2),constraint pk_score primary key (sno,cno));
drop table course;
create table course(cno number(4) constraint pk_course primary key ,cname varchar2(20),cscore number(2));
作業:
- 刪除表空間時,如何刪除相關聯的數據文件
drop tablespace test_data including contents and datafiles;
2. 復習本周所講的所有內容,預習約束的相關內容,下周提問。
oracle-表空間-用戶-角色-權限-約束