plsql欄位約束

来源:https://www.cnblogs.com/h-w-b/archive/2020/03/11/12462962.html
-Advertisement-
Play Games

第五章 欄位約束 初識約束 約束是資料庫用來確保數據滿足業務規則的手段,對數據做的條件限制。 約束的類型 1. 主鍵約束(PRIMARY KEY) 2. 唯一性約束(UNIQUE) 3. 非空約束(NOT NULL) 4. 檢查約束(CHECK) 5. 外鍵約束(FOREIGN KEY) 主鍵約束( ...


第五章  欄位約束

 

初識約束

  約束是資料庫用來確保數據滿足業務規則的手段,對數據做的條件限制。

 

約束的類型

1. 主鍵約束(PRIMARY KEY)

2. 唯一性約束(UNIQUE)

3. 非空約束(NOT NULL)

4. 檢查約束(CHECK)

5. 外鍵約束(FOREIGN KEY)

 

 

主鍵約束(PRIMARY KEY)

  1. 非空加唯一約束;

  2. 一個表只有一個主鍵;

  3. 主鍵會預設加索引;

student_id number primary key

 

alter table student add constraint stu_id_pk primary key(stu_id);

 

唯一性約束(UNIQUE)

對於UNIQUE約束來講,索引是必須的。如果不存在,就自動創建一個(UNIQUE的唯一性本質上是通過索引來保證的)

UNIQUE允許null值,UNIQUE約束的列可存在多個null。這是因為,Unique唯一性通過btree索引來實現,而btree索引中不包含null。所以,這也造成了在where語句中用null值進行過濾會造成全表掃描。

student_num  number unique

alter table table_name add constraint student_code_uq unique(student_num);

刪除約束

alter table table_name drop constraint constraint_name;

 

非空約束(NOT NULL)

   非空約束作用的列也叫強制列。顧名思義,強制鍵列中必須有值,當然建表時候若使用default關鍵字指定了預設值,則可不輸入。

score_name varchar2(32) not null

 

alter table table_name modify student_name not null;

 

檢查約束(CHECK)

檢查約束可用來實施一些簡單的規則,比如列值必須在某個範圍內。檢查的規則必須是一個結果為true或false 的表達式

student_sex    varchar2(1) check(student_sex in('男','女')),

alter table student add constraint stu_sex_ck check(stu_sex in('男','女'));

 

score_value number check(score_value between 0 and 100)

 

alter table student add constraint stu_age_ck check(stu_age between 1 and 100);

 

外鍵約束(FOREIGN KEY)

  外鍵約束定義在具有父子關係的子表中,外鍵約束使得子表中的列對應父表的主鍵列,用以維護資料庫的完整性。不過出於性能和後期的業務系統的擴展的考慮,很多時候,外鍵約束僅出現在資料庫的設計中,實際會放在業務程式中進行處理。外鍵約束註意以下幾點:

  1. 外鍵約束的子表中的列和對應父表中的列數據類型必須相同,列名可以不同
  1. 對應的父表列必須存在主鍵約束(PRIMARY KEY)或唯一約束(UNIQUE)
  2. 外鍵約束在子表裡,外鍵的取值範圍不能大於父表鍵值
  3. 如果想刪除主表的主鍵,需要先刪除子表的關聯欄位

student_num  number references table_name(student_num)

 

alter table student add constraint tea_id_fk foreign key(tea_id) references teacher (tea_id);

 

註意:

不過在真正的企業開發中,除了主鍵約束這類具有強需求的約束,像外鍵約束,檢查約束更多時候僅僅出現在資料庫設計階段,真實環境卻很少應用,更多是放到程式邏輯中去進行處理。


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

-Advertisement-
Play Games
更多相關文章
  • DDL執行 線上伺服器執行DDL,更新表結構,需要謹慎,結構更改會導致全表被獨占鎖定(新版本有改善) 避免這種情況,使用COPY策略,而不是直接執行ALTER TABLE語句 思路:創建一個新表,滿足新要求,將舊表數據逐條導入新表,同時表上可以執行其他任務,導入的過程其他任務都記錄在日誌,導入完成後 ...
  • 關係數據結構 列:對象某一方面的特征 行:一個對象各個方面的特征 關係模型的數據結構是單一的關係,關係模型的數據結構是一張扁平的二維表,實體以及實體間的聯繫均用二維表來表示,關係模型建立在集合代數的基礎上 外碼:設F是基本關係R的一個或一組屬性,它不是R的碼,KS是基本關係S的主碼,如果F與KS相對 ...
  • NDB群集安裝 介紹 https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-basics.html NDBCLUSTER (也稱為NDB)是一種記憶體存儲引擎,提供高可用性和數據持久性功能。 的NDBCLUSTER存儲引擎可以與一系列故障切換和負載 ...
  • 分表 通常指:通過應用程式層,將數據劃分到不同的表中進行存儲 對比分區,分區是在伺服器層完成的分區演算法 分表會導致客戶端明顯的改變,在伺服器端出現結構相同的多張表,甚至可以把多張表分到不同的伺服器上 以賬單表為例:資料庫可能會有這樣的情況 create table bill201710( id in ...
  • 第八章 游標和觸發器 初識游標 在PL/SQL塊中執行SELECT、INSERT、DELETE和UPDATE語句時,ORACLE會在記憶體中為其分配上下文區(Context Area),即緩衝區。游標是指向該區的一個指針,或是命名一個工作區(Work Area),或是一種結構化數據類型。它為應用等量齊 ...
  • 分區: 分區也是MySQL優化中的一個重要方式 將一個表中的數據和索引,分散到不同的文件中進行存儲 通常情況下,一個表,對應一組數據和索引文件,一個表的數據和索引集中存儲在這組文件中 當一個表出現了大量的記錄時,可以將其分佈到不同的數據和索引文件中進行存儲 Innodb來說,一個表對應多個ibd文件 ...
  • 第七章 使用PL/SQL編程 初識PL/SQL(Procedure Language & Structured Query Language) PL/SQL是Oracle在標準SQL語言上的過程性擴展,允許嵌入SQL語句,定義變數和常量允許過程語言結構(條件分支語句和迴圈語句)允許使用異常來處理Or ...
  • 第六章 項目案例1 需求: 1. 建立一個銀行賬戶的表bank_account,具備以下欄位和約束 2. 完成該表基本CRUD 3. 模擬轉賬流程 4. 模擬異常之後的業務回滾 開發文檔: 1. 按需求建表 2. 遵循編碼規範,創建項目,包結構 3. 書寫該表的CRUD JDBCDao 4. 模擬轉 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...