Oracle - 資料庫對象

来源:https://www.cnblogs.com/carlosouyang/archive/2019/05/17/10884039.html
-Advertisement-
Play Games

1 許可權管理 如何創建一個用戶並授予一定許可權? 1 --創建用戶 2 create user test01 identified by 123 3 4 -- 查看是否創建成功 5 select * from dba_users 6 where username = 'TEST01'; 7 8 -- ...


1 許可權管理

許可權性操作都要以 sysdba 什麼來操作。

如何創建一個用戶並授予一定許可權?

 1 --創建用戶
 2 create user test01 identified by 123
 3 
 4 -- 查看是否創建成功
 5 select * from dba_users
 6 where username = 'TEST01';
 7 
 8 -- 授權登錄(會話)許可權
 9 grant create session to test01;
10 
11 -- 預設用戶沒有任何表,而且不具備操作其他表的許可權。
12 --select * from emp;
13 
14 -- 授權 soctt.emp 所有許可權(all)給 test01,在此之後 test01 可以對 scott 下的 emp 表操作
15 grant all on scott.emp to test01;
16 -- 回收許可權
17 revoke all on scott.emp from test01;
18 
19 -- 分配創建表的許可權
20 grant create table to test01;
21 
22 -- 此時 test01 用戶可以建表,可以 select,但不能 insert 數據,需要給予表空間
23 grant unlimited tablespace to test01;
24 
25 -- 修改用戶密碼
26 alter user test01 identified by 1234;
27 
28 -- 級聯刪除用戶
29 drop user test01 cascade;
30 
31 -- 查看用戶許可權
32 select * from user_sys_privs;

2 視圖

視圖(view),稱為虛表,在資料庫中不存在實體。視圖本質上是對物理表(基表)的一種數據保護,讓開發者或者用戶只能看到基表中的部分數據。

2.1 創建視圖

1 create or replace view v$empinfo as
2 select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.deptno
3 from emp e;
4 
5 --還可以創建只讀視圖
6 create or replace view v$empinfo as
7 select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.deptno from emp e
8 with read only;

2.2 使用視圖

在使用視圖時,可以把視圖當作一個表來使用。

1 -- 使用視圖
2 select * from v$empinfo;
3 
4 -- 刪除視圖
5 drop view v$empinfo;
6 
7 -- 向視圖添加數據
8 insert into v$empinfo(empno,ename,job,mgr,hiredate,deptno)
9 values(1090,'cai90','singer',7839,sysdate,30);

通過視圖添加數據,數據最終添加到基本中,因為視圖是虛表。視圖一般只是基表的部分數據,通過視圖向基表添加數據時,基本的數據只能添加一部分,此時基表會對未提供的欄位置null。如果基表對未提供的欄位要求不能為null,此次添加會失敗。

1 -- 刪除數據
2 delete from v$empinfo where empno = 1090
3 
4 -- 更新數據
5 update v$empinfo set comm = 20
6 where empno = 1080

3 表

資料庫數據類型

  • number(x,y) - 數值型,最長是x位,y位小數
  • varchar2(maxlength) - 變長字元串,maxlength這個參數的上限是32767位元組
  • char(max_length) - 定長字元串,最大2000位元組
  • Date - 日期時間,只能精確到秒。
  • timestamp - 時間戳,精確到微秒
  • long - 長字元串,最大支持2GB

其他類型:

  • CLOB - 大文件,最大長度4G
  • BLOB - 存二進位文件
在資料庫設計時,如果要存大文件(視頻,音頻等),一定不要用BLOB/CLOB,通用的解決方案都是文件的地址。

3.1 表的創建

創建表的語法

1 CREATE TABLE [schema.]table(
2 column datatype [DEFAULT expr] , …
3 );

例如直接創建一個學生表

1 create table t_stuinfo(
2    sid number(4),
3    name varchar2(20),
4    phone char(11),
5    gender number(1),
6    birthday date,
7    address varchar2(100)
8 );

通過子查詢結果創建表

1 -- 通過其他表結構創建表
2 create table t_emp
3 as 
4 select * from emp;
5 
6 -- 只創建表的結構(複製表結構)
7 create table t_emp2
8 as
9 select * from emp where 1=2;

3.2 表的修改

對錶的屬性修改

 1 -- [1]給表添加欄位
 2 alter table t_stuinfo add grade number(2)
 3 
 4 -- [2]刪除表的欄位
 5 alter table t_stuinfo drop column grade 
 6 
 7 -- [3] 修改表欄位屬性
 8 alter table t_stuinfo modify(address varchar2(150))
 9 
10 -- [4]重命名
11 rename t_stuinfo to t_stuinfo2

對錶的內容修改

  • insert - 添加行
1 insert into t_emp2(empno,ename,job,mgr,hiredate,sal,comm,deptno)
2 values(1010,'cai10','singer',7938,sysdate,1000,1,10);
3 -- insert是事務操作,需要提交事務。
4 
5 -- 按順序添加可忽略欄位名
6 insert into t_emp2
7 values(1020,'cai20','singer',7938,sysdate,2000,2,10);
  • update - 修改表數據
1 update t_emp2
2 set ename = 'cai22',sal = 2200
3 where empno = 1020;
  • delete - 刪除行
1 delete from t_emp2
2 where empno = 1010;
3 
4 --刪除表中的所有數據-沒有事務-速度快
5 truncate table t_emp2;

4 序列

序列是oracle專有的對象,它用來產生一個自動遞增的數列。在資料庫開發設計表時,如果需要一個欄位的值是自增的話,優先考慮序列。

1 -- 創建序列
2 create sequence seq_empno
3 start with 1       --初始值
4 increment by 1;    --增量
5 
6 -- 序列中的下一個值,從定義(start with)的值開始,調用了 nextval 之後, currval 會變成 nextval 的值
7 select seq_empno.nextval from dual;
8 -- 獲取序列的當前值
9 select seq_empno.currval from dual;

5 事務

5.1 概念

事務(Transaction)是一個操作序列。這些操作要麼都做,要麼都不做,是一個不可分割的工作單位,是資料庫環境中的邏輯工作單位。事務是為了保證資料庫的完整性。

在 oracle 中,沒有事務開始的語句。一個 Transaction 起始於一條 DML (Insert、Update和Delete )語句,結束於以下的幾種情況:

  1. 用戶顯式執行 Commit 語句提交操作或 Rollback 語句回退。
  2. 當執行 DDL(Create、Alter、Drop) 語句事務自動提交。
  3. 用戶正常斷開連接時,Transaction 自動提交。
  4. 系統崩潰或斷電時事務自動回退。

5.2 保存點(save point)

可以在事務中添加保存點,再通過 rollback sp 的方式回滾到保存點的位置再提交事務,保留有效的工作進度。

 1 -- beginTrans
 2 insert into t_emp2 values(9,'cai40','singer',7938,sysdate,4000,4,10);
 3 insert into t_emp2 values(10,'cai50','singer',7938,sysdate,5000,5,10);
 4 select * from t_emp2;
 5 
 6 savepoint sp1;
 7 
 8 insert into t_emp2 values(11,'cai40','singer',7938,sysdate,4000,4,10);
 9 insert into t_emp2 values(12,'cai50','singer',7938,sysdate,5000,5,10);
10 select * from t_emp2;
11 
12 rollback to sp1;
13 
14 commit;

5.3 事務的特性

事務四大特征:原子性,一致性,隔離性和持久性。

  • 原子性(Atomicity)

一個原子事務要麼完整執行,要麼乾脆不執行。這意味著,工作單元中的每項任務都必須正確執行。如果有任一任務執行失敗,則整個工作單元或事務就會被終止。即此前對數據所作的任何修改都將被撤銷。如果所有任務都被成功執行,事務就會被提交,即對數據所作的修改將會是永久性的。

  • 一致性(Consistency)

一致性代表了底層數據存儲的完整性。它必須由事務系統和應用開發人員共同來保證。事務系統通過保證事務的原子性,隔離性和持久性來滿足這一要求; 應用開發人員則需要保證資料庫有適當的約束(主鍵,引用完整性等),並且工作單元中所實現的業務邏輯不會導致數據的不一致(即,數據預期所表達的現實業務情況不相一致)。例如,在一次轉賬過程中,從某一賬戶中扣除的金額必須與另一賬戶中存入的金額相等。支付寶賬號100 你讀到餘額要取,有人向你轉100 但是事物沒提交(這時候你讀到的餘額應該是100,而不是200) 這種就是一致性

  • 隔離性(Isolation)

隔離性意味著事務必須在不幹擾其他進程或事務的前提下獨立執行。換言之,在事務或工作單元執行完畢之前,其所訪問的數據不能受系統其他部分的影響。

  • 持久性(Durability)

持久性表示在某個事務的執行過程中,對數據所作的所有改動都必須在事務成功結束前保存至某種物理存儲設備。這樣可以保證,所作的修改在任何系統癱瘓時不至於丟失。

6 約束

當我們創建表的時候,同時可以指定所插入數據的一些規則,比如說某個欄位不能為空值,某個欄位的值(比如年齡)不能小於零等等,這些規則稱為約束。約束是在表上強制執行的數據校驗規則。

常見約束:

  1. NOT NULL 非空
  2. UNIQUE Key 唯一鍵
  3. PRIMARY KEY 主鍵
  4. FOREIGN KEY 外鍵
  5. CHECK 自定義檢查約束

6.1 主鍵約束

主鍵用於唯一標識一條記錄。主鍵值不可為空,也不允許出現重覆。

 1 -- 創建列級約束-顯式指定名稱,pk_sid
 2 create table t_stuInfo(
 3      sid number(4) [constraint pk_sid] primary key,    --約束規則名可以省略
 4      name varchar2(20)
 5 );
 6 
 7 
 8 -- 當對多個欄位進行約束的時候(除了非空約束,其它約束都可以採用這種方式,也只有這種方式可以選擇兩個主鍵)
 9 create table t_stuInfo3(
10    sid number(4),
11    phone char(11),
12    name varchar2(20),
13    [constraint pk_stuinfo] primary key(phone,name)
14 );

6.2 非空約束

確保欄位值不允許為空,只能在列級定義。

1 create table t_stuInfo5(
2      sid number(4) primary key,
3      phone char(11) [constraint nn_phone] not null
4 );

6.3 唯一性約束

唯一性約束條件確保所在的欄位或者欄位組合不出現重覆值,唯一性約束條件的欄位允許出現空值,但只能出現一個。Oracle將為唯一性約束條件創建對應的唯一性索引。

1 create table t_stuInfo6(
2      sid number(4) primary key,
3      phone char(11) [constraint uq_phone] unique 
4 );

6.4 自定義約束

Check約束用於對一個屬性的值通過特定條件加以限制。

 1 -- 不顯示設定約束名
 2 create table t_stuInfo7(
 3      sid number(4) primary key,
 4      phone char(11) unique,
 5      age number(3) check(age>0 and age<100)
 6 );
 7 
 8 -- 顯示設定約束
 9 create table emp3(
10      id number(4) primary key,
11     age number(2)  check(age > 0 and age < 100),
12     salary number(7,2),
13     sex char(1),
14     constraint salary_check check(salary > 0)
15 );

6.5 外鍵約束

當表中的某個欄位和另外一個表的主鍵欄位相互關聯時,可以設定外鍵約束。從鍵受主鍵的約束,只能設為主鍵中擁有的值。

1 create table t_stuInfo8(
2      sid number(4) primary key,
3      phone char(11) unique,
4      tid number(4),
5      constraint fk_tid foreign key(tid) references t_teacher1(tid)
6 );

對於主表的刪除和修改主鍵值的操作,會對依賴關係產生影響,以刪除為例:當要刪除主表的某個記錄,即刪除一個主鍵值,那麼對依賴的影響可採取下列3種做法:

  1. RESTRICT方式:只有當依賴表中沒有一個外鍵值與要刪除的主表中主鍵值相對應時,才可執行刪除操作。
  2. CASCADE方式:將依賴表中所有外鍵值與主表中要刪除的主鍵值相對應的記錄一起刪除
  3. SET NULL方式:將依賴表中所有與主表中被刪除的主鍵值相對應的外鍵值設為空值

可以在建表時對外鍵約束的刪除規則進行設定,若不加以設定,預設採用第一種方式。

1 --FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO) [ON DELETE [CASCADE|SET NULL]]
2 -- cascade 的例子
3 create table t_stuInfo8(
4      sid number(4) primary key,
5      phone char(11) unique,
6      tid number(4),
7      constraint fk_tid foreign key(tid) references t_teacher1(tid) on DELETE CASCADE
8 );

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 直接上代碼 配置QQ郵箱的IMAP 進入qq電子郵件點擊 設置->賬戶里開啟 SMTP 服務(開啟IMAP/SMTP服務) 註意:在啟用QQ郵箱的14天之後才能開啟此服務 創建Sendmail 類 導入這兩個jar : public class Sendmail {private static fi ...
  • 然後再輸入: 再輸入: 這樣就安裝完畢了,因此我們可以在linux上的搜索框當中搜索谷歌瀏覽器,把它打開之後就可以固定到linux上的任務欄了。 備註:本篇博客是筆者第一次在linux下寫的,哈哈哈! ...
  • 1、安裝WLS 主要參考 "Windows10上使用Linux子系統(WSL)" 這篇文章進行安裝,不要通過lxrun /install /y去安裝,這種方法安裝貌似沒有wsl命令。 先把win 10 版本升級到16215.0以上,否則在Microsoft Store里的所有Linux都會顯示免費下 ...
  • 查看開放埠: 允許80埠開放: 允許22埠開放: 啟動防火牆: 重啟防火牆使埠配置生效: ...
  • 一、nethogs介紹 分享一個linux 下檢測系統進程占用帶寬情況的檢查。來自github上的開源工具。 它不依賴內核中的模塊。當我們的伺服器網路異常時,可以通過運行nethogs程式來檢測是那個程式占用了大量帶寬。節省了查找時間。 二、安裝方法 1.在epel 源中可以直接yum 安裝 2.源 ...
  • "posgresql 備份/恢復" "mysql 備份/恢復" "補充" posgresql 備份/恢復 1. 備份 bash DATE= BACK_DATA=xxapp data ${DATE}.out 這裡設置備份文件的名字, 加入日期是為了防止重覆 docker exec pg db pg_d ...
  • 1、當前目錄下打開CMD控制台視窗,執行如下bat命令: 2、如下圖例操作步驟: 打開CMD視窗 輸入命令 生成文件 結果截圖 ...
  • 有網友問及,看到Insus.NET幫他解決問題分享的截屏時,發現代碼中有顯示行號。而他的沒有。 Step1: Go to Tools > Options Step2: In the Options dialog box navigate to Text Editor > All Languages> ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...