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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...