oracle 表的創建與管理 約束

来源:https://www.cnblogs.com/xianting/archive/2019/03/26/10595807.html
-Advertisement-
Play Games

在 Oracle 之中數據表就被稱為資料庫對象,而對象的操作語法一共有三種:· 創建對象:CREATE 對象類型 對象名稱 [選項];· 刪除對象:DROP 對象類型 對象名稱 [選項];· 修改對象:ALTER 對象類型 對象名稱 [選項]。 創建表 一般而言,預設值是為了防止用戶在增加數據時為 ...


在 Oracle 之中數據表就被稱為
資料庫對象,而對象的操作語法一共有三種:
· 創建對象:CREATE 對象類型 對象名稱 [選項];
· 刪除對象:DROP 對象類型 對象名稱 [選項];
· 修改對象:ALTER 對象類型 對象名稱 [選項]。

創建表

 

CREATE TABLE 表名稱 (
欄位 類型 [DEFAULT 預設值] ,
欄位 類型 [DEFAULT 預設值] ,
...
欄位 類型 [DEFAULT 預設值] 
)

 

一般而言,預設值是為了防止用戶在增加數據時為 null 的問題。

複製表

實際上所謂的複製表嚴格來講不是複製的含義,是針對於一個子查詢(返回多行多列)的結果進行表的創建,完整
語法如下:
CREATE TABLE 表名稱 AS 子查詢

註意點:關於事務與 DDL 的問題
· 事務可以控制的只是數據的更新操作(增加、修改、刪除),而 DDL 是不受事務控制的;
· 在 Oracle 之中,如果發生了 DDL 操作,那麼所有未提交的事務將會自動進行提交。

在 Oracle 之中有三類數據字典:
· user_*:用戶可以使用的數據字典;
· dba_*:管理員可以使用到的數據字典;
· all_*:包含了當前用戶可以訪問的全部數據字典信息(有可能某些數據字典不屬於此用戶)。

 

為表重命名

RENAME 舊的表名稱 TO 新的表名稱 ;

 

截斷表

TRUNCATE TABLE 表名稱 ;

表一旦被截斷,其所有占用的資源都將被徹底釋放。

刪除數據表

DROP TABLE 表名稱 ;

閃回操作

 

從 Oracle 10g 起為了方便用戶進行數據表的恢復。為 Oracle 增加了一個類似於 windows 的回收站功能,等於是所有
刪除是數據表,首先保存在回收站之中,如果用戶有需要也可以進行恢復。

範例:通過回收站恢復 emp10 數據表
FLASHBACK TABLE emp10 TO BEFORE DROP ;
範例:徹底刪除數據表,不讓刪除的數據表經過回收站,在刪除語句之後增加一個 PURGE
DROP TABLE emp10 PURGE ;
範例:刪除回收站之中的一個表
PURGE TABLE empnull ;
範例:清空回收站
PURGE RECYCLEBIN ;
只有 oracle 有此特性

修改表結構

1、 為表中增加數據列
ALTER TABLE 表名稱 ADD(
列名稱 數據類型 [DEFAULT 預設值],
列名稱 數據類型 [DEFAULT 預設值], ...)
2、 修改列結構
ALTER TABLE 表名稱 MODIFY(
列名稱 數據類型 [DEFAULT 預設值],
列名稱 數據類型 [DEFAULT 預設值], ...) ;

從標準的 SQL 來講,是一定要提供有數據表的修改操作的,但是從實際的開發來講,任何人都不允許有隨意修改數
據表結構的想法,而且更不能說自己去修改。

 

約束是保證表中數據完整性的一種有效檢測手

非空約束(NOT NULL,NK)

DROP TABLE member ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20) NOT NULL
) ;
INSERT INTO member(mid,name) VALUES(1,null)

此時,資料庫會提示如下錯誤信息:“ORA-01400: 無法將 NULL 插入 ("SCOTT"."MEMBER"."NAME")”。此時會
明確的顯示出那個欄位上違反了非空約束。

唯一約束(UNIQUE,UK)

DROP TABLE member ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20) NOT NULL ,
email VARCHAR2(20) UNIQUE
) ;
範例:增加正確的數據
INSERT INTO member(mid,name) VALUES (1,'王小強') ;
INSERT INTO member(mid,name,email) VALUES (1,'王大強','[email protected]') ;
在使用唯一約束的時候一定要記住,null 不屬於重覆的統計範疇。
範例:增加錯誤的數據
INSERT INTO member(mid,name,email) VALUES (1,'王中強','[email protected]') ;
此時出現了錯誤的提示信息:“ORA-00001: 違反唯一約束條件 (SCOTT.SYS_C0011101)”。但是與之前的非空約束相
比,此時的提示信息非常不明確。
DROP TABLE member PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20)NOT NULL ,
email VARCHAR2(20) ,
CONSTRAINT uk_email UNIQUE(email)
) ;

此時,如果保存的數據出現了錯誤,則提示信息“ORA-00001: 違反唯一約束條件 (SCOTT.UK_EMAIL)”。
除了非空約束之外,所有的約束都一定要按照以上的方式進行設置,因為只有一個正常的名稱才方便系統進行約束
的維護

主鍵約束(PRIMARY KEY,PK)

主鍵約束 = 非空約束 + 唯一約束。

DROP TABLE member PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20)NOT NULL ,
CONSTRAINT pk_mid PRIMARY KEY(mid)
) ;
觀察複合主鍵
DROP TABLE member PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20) ,
CONSTRAINT pk_mid_name PRIMARY KEY(mid,name)
) ;
INSERT INTO member(mid,name) VALUES(1,'學冰') ;
INSERT INTO member(mid,name) VALUES(1,'學刁') ;
INSERT INTO member(mid,name) VALUES(2,'學刁') ;
正常人都不用,知道就行了,千萬別用。

檢查約束(CHECK,CK)

DROP TABLE member PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20)NOT NULL ,
sex VARCHAR2(10) ,
age NUMBER(3) ,
CONSTRAINT pk_mid PRIMARY KEY(mid) ,
CONSTRAINT ck_sex CHECK (sex IN ('','')) ,
CONSTRAINT ck_age CHECK (age BETWEEN 0 AND 250)
) ;

即使設置了多個檢查約束,那麼也是一個一個約束進行過濾的。
但是在這裡有一個提示:一般而言,你所設置的約束越多,在進行數據更新操作的時候性能就越低。所以很多時候
一些數據的檢查操作都會交給程式完成

 主-外鍵約束(FOREIGN KEY,FK)

DROP TABLE member PURGE ;
DROP TABLE book PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20)NOT NULL ,
CONSTRAINT pk_mid PRIMARY KEY(mid) 
) ;
CREATE TABLE book(
bid NUMBER ,
title VARCHAR2(20) ,
mid NUMBER ,
CONSTRAINT pk_bid PRIMARY KEY(bid) ,
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid)
) ;

限制一:在刪除主表之前,請一定要保證先刪除子表。所以在刪除數據表的時候應該先刪除子表後再刪除父表。

範例:強制刪除
DROP TABLE member CASCADE CONSTRAINT ;
但是必須註意的是,強制刪除是無法徹底刪除的,所刪除的數據表會保存在回收站之中。但是不建議使用強制刪除
表的操作,還是建議按照先刪除子表再刪除父表的方式進行。

限制二:作為外鍵的欄位在主表之中必須具備主鍵約束或者是唯一約束。

限制三:數據的級聯操作問題

· 為了方便數據的刪除,提供有一個級聯刪除操作,在主表數據刪除的時候對應的子表數據會同時刪除掉,在建立
外鍵的時候使用 ON DELETE CASCADE 來設置。

範例:設置級聯刪除
DROP TABLE book PURGE ;
DROP TABLE member PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20)NOT NULL ,
CONSTRAINT pk_mid PRIMARY KEY(mid) 
) ;
CREATE TABLE book(
bid NUMBER ,
title VARCHAR2(20) ,
mid NUMBER ,
CONSTRAINT pk_bid PRIMARY KEY(bid) ,
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) ON DELETE CASCADE
) ;

· 如果在刪除主表數據的時候不希望子表數據被一起刪除掉,則可以使用級聯更新操作,使用 ON DELETE SET
NULL 來設置。

範例:設置級聯更新
DROP TABLE book PURGE ;
DROP TABLE member PURGE ;
CREATE TABLE member(
mid NUMBER ,
name VARCHAR2(20)NOT NULL ,
CONSTRAINT pk_mid PRIMARY KEY(mid) 
) ;
CREATE TABLE book(
bid NUMBER ,
title VARCHAR2(20) ,
mid NUMBER ,
CONSTRAINT pk_bid PRIMARY KEY(bid) ,
CONSTRAINT fk_mid FOREIGN KEY(mid) REFERENCES member(mid) ON DELETE SET NULL
) ;

修改約束

首先明確:所有的約束一定要在表建立的同時就已經設置完成,不可能說表先去使用之後再回頭設置約束,所以以
下的這些

1、 為表中增加約束
ALTER TABLE 表名稱 ADD CONSTRAINT 約束名稱 約束類型(約束欄位) [選項] ;
但是需要提醒的是,此類的語法適合於唯一、主鍵、檢查、外鍵約束的添加,而無法添加非空約束
2、 刪除約束
ALTER TABLE 表名稱 DROP CONSTRAINT 約束名稱 ;

 

意義


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

-Advertisement-
Play Games
更多相關文章
  • 轉載https://blog.csdn.net/weixin_38187469/article/details/79273962 開啟mysql日誌 1、查看日誌是否啟用 mysql> show variables like 'log_bin'; 出現off就代表沒有開啟。 2、編輯my.cnf 退 ...
  • SVN 簡介: Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理著隨時間改變的數據。 這些數據放置在一個中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件伺服器, 不過它會記住每一次文件的變動。 這樣你就可以把檔案恢復到舊的版本 ...
  • 監控項目及使用模板 監控http和https: Template App HTTP Service Template App HTTPS Service 監控cpu,記憶體,網路等: Template OS Linux (Template App Zabbix Agent) 監控埠: Templat ...
  • 今天登錄遠程windows2008系統主機發現出現如下錯誤:要登錄到這台遠程電腦,您必須被授予允許通過終端服務登錄的許可權。預設地,"遠程桌面用戶"組的成員擁有該許可權。如果您不是"遠程桌面用戶"組或其它擁有該許可權的組的成員,或者如 果"遠程桌面用戶"組沒有該許可權,您必須手動授予這些許可權。經過查找中找 ...
  • TMUX天下第一 全世界所有用CLI Linux的人都應該用TMUX,我愛它! 以下是正文 Linux下麵常用的搜索命令有這些:find locate grep which whereis。其中在我用的SuSE上,並沒有locate,所以也不能用它神奇的手動更新資料庫和"高速"索引查找,而grep是 ...
  • 按道理來說zabbix就自帶的MySQL插件來監控mysql資料庫,但是你會發現,自帶的mysql監控項是很少的,根本滿足不了公司的需求。由於它本身自帶的模板太過簡單了,所以需要做更詳細的監控,而percona就提供了這個詳細監控的模版以及腳本,解決了監控不全面的問題。percona插件是安裝在za ...
  • Github 入門 什麼是 Github? github是一個基於git的代碼托管平臺,付費用戶可以建私人倉庫,我們一般的免費用戶只能使用公共倉庫,也就是代碼要公開。 Github 由Chris Wanstrath, PJ Hyett 與Tom Preston-Werner三位開發者在2008年4月 ...
  • 一、playbook介紹 playbook 是 Ansible 管理配置、部署應用的核心所在,一個playbook由有多“play組成”,而一個play實際就是一個task,每個task是由多個ansible基本模塊構成,這樣我們可以用 playbook 來描述想在遠程主機執行的一些列操作,包括安裝 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...