1、什么是Oracle
- ORACLE數據庫系統是美國ORACLE公司(甲骨文)提供的以分布式數據庫為核心的一組軟件產品,是最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。
ORACLE 通常應用于大型系統的數據庫產品。
ORACLE 數據庫是目前世界上使用最為廣泛的數據庫管理系統,作為一個通用的數據庫系統,它具有完整的數據管理功能;作為一個關系數據庫,它是一個完備關系的產品;作為分布式數據庫它實現了分布式處理功能。
?英文官網:Database | Oracle
?中文官網:數據庫 | Oracle 中國
------ 來自百度百科
2、DB-Engines排名
3、ORACLE 體系結構
-
數據庫
-
Oracle 數據庫是數據的物理存儲,是一組存儲數據的文件。 這就包括(數據文件 ORA 或者 DBF、控制文件、聯機日志、參數文件)。
-
其實 Oracle 數據庫的概念和其它數據庫不一樣,這里的數據庫是一個操作系統只有一個庫。可以看作是 Oracle 就只有一個全局的數據庫,這一點和MySQL不太一樣。
-
-
實例
- 一個Oracle 實例(Oracle Instance)有一系列的后臺進程(Backguound Processes)和內存結構(Memory Structures)組成。是管理數據庫文件的。一個數據庫可以有 n 個實例。但通常情況下,一個實例對應一個數據庫。
-
數據文件(dbf)
-
數據文件是數據庫的物理存儲單位。也就是說最終數據落到磁盤上是以文件形式存在的,這個文件就叫做數據文件,后綴名是dbf。
-
數據庫的數據是存儲在表空間中的,真正是在某一個或者多個數據文件中。而一個表空間可以由一個或多個數據文件組成,一個數據文件只能屬于一個表空間。一旦數據文件被加入到某個表空間后, 就不能刪除這個文件,如果要刪除某個數據文件,只能刪除其所屬于的表空間才行。
-
-
表空間
-
表空間是 Oracle 對物理數據庫上相關數據文件(ORA 或者 DBF 文件)的邏輯映射。一個數據庫在邏輯上被劃分成一到若干個表空間,每個表空間包含了在邏輯上相關聯的一組結構。每個數據庫至少有一個表空間(稱之為 system? 表空間)。
-
每個表空間由同一磁盤上的一個或多個文件組成,這些文件叫數據文件(datafile)。一個數據文件只能屬于一個表空間。表空間下還有進一步的邏輯劃分。
-
由于 oracle 的數據庫不是普通的概念,oracle 是有用戶和表空間對數據進行 管理和存放的。但是表不是有表空間去查詢的,而是由用戶去查的。因為不同用戶可以在同一個表空間建立同一個名字的表!這里區分就是用戶了!
-
注:表的數據,是有用戶放入某一個表空間的,而這個表空間會隨機把這些表數據放到一個或者多個數據文件中。
-
-
用戶
- 用戶是在表空間下建立的。用戶登陸后只能看到和操作自己的表, ORACLE的用戶與 MYSQL 的數據庫類似,每建立一個應用需要創建一個用戶
- MySQL中是一個用戶可以查看、管理操作多個數據庫,不同的應用創建不同的數據庫
- Oracle是一個數據庫下可以創建不同的用戶,每個用戶可以操作屬于自己的表。正好和MySQL的概念是反過來的
4、Oracle語法之DDL操作:創建表空間、用戶以及用戶賦權
-
創建表空間
- SQL語句:
-
--1、查看已有表空間的存儲路徑 select name from v$datafile;--2、創建表空間 create tablespace sql50 datafile '/home/app/oracle/oradata/orcl/sql50.dbf' size 100m autoextend on next 10m;
- 解釋:
-
sql50 為表空間名稱 datafile 用于設置物理文件名稱 size 用于設置表空間的初始大小 autoextend on 用于設置自動增長,如果存儲量超過初始大小,則開始自動擴容 next 用于設置擴容的空間大小
-
創建用戶
- SQL語句:
-
--1、查看當前所有用戶 select username from all_users;--2、創建新用戶 create user sql50_user identified by 123456 default tablespace sql50;
- 解釋:
-
sql50_user 為創建的用戶名。 identified by 用于設置用戶的密碼 default tablesapce 用于指定默認表空間名稱
-
用戶賦權
- SQL語句:
-
-- 給用戶賦予dba權限 grant dba to sql50_user;-- 給用戶對某個表(table_name)的select權限: grant select on table_name to sql50_user;-- 授予創建會話權限 grant create session to sql50_user;-- 授予使用表空間的權限(這里假設表空間名為sql50) grant unlimited sql50 to sql50_user;-- 授予對teachers表的SELECT和INSERT權限 grant select, insert on teachers to sql50_user;-- 提交更改 COMMIT;
- 解釋:
-
系統權限:控制用戶對數據庫的整體訪問,如CREATE SESSION(創建會話)、CREATE TABLE(創建表)等 對象權限:控制用戶對特定數據庫對象(如表、視圖、序列等)的訪問,如SELECT(查詢)、INSERT(插入)、UPDATE(更新)、DELETE(刪除)等 如果需要授予多個權限,可以在一個GRANT語句中列出所有權限,或使用多個GRANT語句。
- 注意事項:
- 權限最小化原則:為了避免安全風險,建議只授予用戶所需的最小權限。
- 權限撤銷:如果需要撤銷用戶的權限,可以使用REVOKE語句,語法與GRANT相似,但關鍵字為REVOKE。
- 權限傳遞:Oracle還支持權限的傳遞,即用戶A可以將權限授予用戶B,用戶B又可以將權限授予用戶C,但需要注意權限傳遞的限制和安全性問題。
- 角色管理:Oracle中的角色是權限的集合,可以將一組權限授予一個角色,然后將角色授予多個用戶,從而簡化權限管理。
5、Oracle語法之DML操作:表的創建、修改與刪除
-
創建表
-
SQL語法:
-
? CREATE TABLE table_name (column1 datatype [DEFAULT expression] [constraint],column2 datatype [DEFAULT expression] [constraint],... );
-
解釋:
-
table_name:表的名稱。 column1, column2, ...:列的名稱。 datatype:列的數據類型,如 VARCHAR2, NUMBER, DATE 等。 DEFAULT expression:為列指定默認值。 constraint:為列添加約束,如 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK 等。
-
數據類型:
-
1. 字符型(1)CHAR : 固定長度的字符類型,最多存儲 2000 個字節(2)VARCHAR2 :可變長度的字符類型,最多存儲 4000 個字節(3)LONG : 大文本類型。 最大可以存儲 2 個 G 2.數值型NUMBER : 數值類型例如:NUMBER(5) 最大可以存的數為 99999NUMBER(5,2) 最大可以存的數為 999.99 3.日期型(1)DATE:日期時間型,精確到秒(2)TIMESTAMP:精確到秒的小數點后 9 位 4.二進制型(大數據類型)(1)CLOB : 存儲字符,最大可以存 4 個 G(2)BLOB:存儲圖像、聲音、 視頻等二進制數據,最多可以存 4 個 G
-
實例:
-
-- 創建 Student 學生表 CREATE TABLE Student ( s_id VARCHAR(20), s_name VARCHAR(20) NOT NULL, s_birth VARCHAR(20) NOT NULL, s_sex VARCHAR(10) NOT NULL, PRIMARY KEY(s_id) );-- 創建 Course 課程表 CREATE TABLE Course ( c_id VARCHAR(20), c_name VARCHAR(20) NOT NULL, t_id VARCHAR(20) NOT NULL, PRIMARY KEY(c_id) );
- 注意:如果需要給表添加注釋,需要額外的語句實現
-
-
修改表
-
增加字段
-
增加字段語法:
-
ALTER TABLE 表名稱 ADD(列名1 類型 [DEFAULT 默認值],列名2 類型 [DEFAULT 默認值]...)
-
示例:
-
-- 我們給學生表中添加身高和體重兩個字段 ALTER TABLE student ADD (s_height number,s_weight number );
-
-
修改字段
-
修改字段語法:
-
ALTER TABLE 表名稱 MODIFY(列名1 類型 [DEFAULT 默認值],列名2 類型 [DEFAULT 默認值]... );
- 示例:
-
-- 這是修改字段的示例
-
-
修改字段名
-
修改字段名語法:
-
ALTER TABLE 表名稱 RENAME COLUMN 原列名 TO 新列名;
-
示例:
-
-- 這是修改字段名示例
-
-
刪除字段名
-
刪除字段名語法:
-
-- 刪除一個字段 alter table 表名稱 drop column 列名;-- 刪除多個字段 alter table 表名稱 drop (列名1, 列名2 ...);
-
示例:
-
-- 這是刪除字段名的示例 ALTER TABLE student DROP (s_height,s_weight );
-
-
-
刪除表
- SQL語法:
-
DROP TABLE 表名;