首頁 資料庫 mysql教程 Oracle数据完整性约束:主键、外键、各种约束的创建删除语句

Oracle数据完整性约束:主键、外键、各种约束的创建删除语句

Jun 07, 2016 pm 05:32 PM
主鍵 外鍵

ORACLE对数据库完整性的约束: 三种方法维护数据完整性:ORACLE完整性约束,数据库触发器,应用程序代码。应尽量使用ORACLE完整性

Oracle对数据库完整性的约束: 

三种方法维护数据完整性:ORACLE完整性约束,数据库触发器,应用程序代码。

应尽量使用ORACLE完整性约束,可靠性和效率高,容易修改,使用灵活,记录在数据字典。

ORACLE五种约束:

非空 not null,定义 的列不能为空。只能在列级定义

唯一,unique,表中每一行所定义 的列或列值不能相同

主键primary key 不能包括空值,主键唯一标识表中每一行,一列或几列组合为主键

外键foreign key 指明一列或几列的组合为外键以维护从表chilD table和主表 parent table 之间的引用完整性referential integrity

条件约束check,表中每一行要满足约束条件。约束加上表上,创建表时可以定义

1.查询约束

查询表中是否有约束并显示约束名:显示表列所对应的约束的信息

BYS@bys1>select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.table_name = upper('&AA');
Enter value for aa: emp
old 1: select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.table_name = upper('&AA')
new 1: select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.table_name = upper('emp')

CONSTRAINT_NAME COLUMN_NAME
------------------------------ ---------------
PK_EMPNO EMPNO
查表中是否有主键约束

BYS@bys1>select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'P' and a.table_name =upper('&table_name');
Enter value for table_name: emp
old 1: select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'P' and a.table_name =upper('&table_name')
new 1: select a.constraint_name, a.column_name from user_cons_columns a, user_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'P' and a.table_name =upper('emp')

CONSTRAINT_NAME COLUMN_NAME
------------------------------ ---------------
PK_EMPNO EMPNO

查当前用户下的所有约束的信息

BYS@bys1>col owner for a10
BYS@bys1>col table_name for a10
BYS@bys1>select * from user_cons_columns;
OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
---------- ------------------------------ ---------- --------------- ----------
BYS PK_OBJ_ID TEST2 OBJECT_ID 1
BYS SYS_C0011203 TEST1 OBJECT_ID 1
BYS PK_EMPNO EMP EMPNO 1

 

查询当前用户的相关约束的状态信息,,可以查dba_constraints或USER_constraints

BYS@bys1>select constraint_name,table_name,constraint_type,status,deferrable,deferred,validated from dba_constraints where owner='BYS';
CONSTRAINT_NAME TABLE_NAME C STATUS DEFERRABLE DEFERRED VALIDATED
------------------------------ ---------- - -------- -------------- --------- -------------
SYS_C0011203 TEST1 P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED
PK_EMPNO EMP P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED
PK_OBJ_ID TEST2 P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED

SCOTT@bys1>select constraint_name,table_name,constraint_type,status,deferrable,deferred,validated from user_constraints;
CONSTRAINT_NAME TABLE_NAME C STATUS DEFERRABLE DEFERRED VALIDATED
------------------------------ ---------- - -------- -------------- --------- -------------
FK_DEPTNO EMP R ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED
PK_DEPT DEPT P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED
PK_EMP EMP P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED
SYS_C0011265 TEST P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED
PK_A TEST1 P ENABLED NOT DEFERRABLE IMMEDIATE VALIDATED

2.增加、删除、修改约束 增加与修改:

增删主键及外键

alter table dept add constraint pk_dept primary key(deptno);

alter table dept2 add primary key(dname); 不指定约束名,则由系统自动命令约束名。
alter table emp add constraint fk_deptno foreign key(deptno) references dept(deptno) on delete cascade;
alter table emp add constraint fk_deptno foreign key(deptno) references dept(deptno);

注:on delete cascade和on delete set null的作用是用来处理级联删除问题的,

如果你需要删除的数据被其他数据所参照(主、外键),那么你应该决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的.

你可以有三种方式:
禁止删除,这也是oracle默认的。
将那些参照本值的数据的对应列赋空,使用on delete set null关键字。即删除本表的列中的值,对本列有外键引用的表的相应的列有相应值行会被修改为NULL。
将那些参照本值的数据一并删除,使用on delete cascade关键字,即删除本表的列中的值,对本列有外键引用的表的相应的列有相应值行会被删除

增加CHECK 约束:

alter table dept add constraint valid_deptno check (deptno); DEPTNO列的值需要少于5000

SQL>alter table customer add constraint abc check (address in (’海淀’,’朝阳’,’东城’,’西城’,’通州’,’崇文’,’昌平’)); 增加客户的住址只能是’海淀’,’朝阳’,’东城’,’西城’,’通州’,’崇文’,’昌平’;

增加惟一约束

alter table customer add constraint aaa unique(cardId);

增加非空约束--注意增加非空约束时用的是关键字modify,其它四种约束都是ADD

SQL>alter table dept modify dname not null;

删除

对非空约束的删除:因为非空约束不能指定约束名,应该先通过查询表和列所对应的的约束信息,找出约束名,再删除。如下:

BYS@bys1>alter table dept drop constraint SYS_C0011725;

修改约束--大可以删除了重建

alter table dept2 modify constraint pk_d2 initially immediate;

删除指定名字的约束---可以是主键、外建或其它约束的名字

alter table emp drop constraint PK_EMPNO;

alter table scott.event drop constraint evtid_pk; 删除其它用户的约束--需要DBA权限

不用指定约束名,直接删除表中主键

altertable emp drop primary key cascade; 删除主键约束的时候,如果在些主键上的外键创建时未指定on delete cascade参数,直接删除主键报错,要加上cascade参数。

重命令约束

alter table scott.emp rename constraint pk_emp to emp_empno_pk;

更多详情见请继续阅读下一页的精彩内容

相关阅读:

Oracle完整性约束

Oracle的约束和索引

从Oracle的约束到索引

Oracle常用数据类型和完整性约束

ORA-02291: 违反完整约束条件 …… - 未找到父项关键字

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql邏輯主鍵是什麼 mysql邏輯主鍵是什麼 Jul 10, 2023 pm 01:46 PM

mysql邏輯主鍵是指在資料庫中用來識別一筆記錄的欄位或欄位組合,但它並不是唯一的。邏輯主鍵通常被用於資料查詢和資料操作。邏輯主鍵可以是任何具有標識性質的字段,例如在用戶表中,用戶名可以作為邏輯主鍵,因為它可以用於標識一條記錄,但是它並不是唯一的。

紅米RedmiK70Pro如何設定返回鍵和主鍵? 紅米RedmiK70Pro如何設定返回鍵和主鍵? Feb 23, 2024 pm 01:40 PM

手機是現在中輕年人的必備之物,當然每個年齡層的人對手機需求是不一樣的。 RedmiK70Pro作為現在比較熱門的機型之一,內部擁有非常多樣的功能以及服務,可以滿足不同年齡層消費者們的需求。紅米RedmiK70Pro怎麼設定返回鍵和主鍵?也是需要了解清楚的,清楚之後才會決定要不要買這支手機,那就跟著小編一起來看看下面的內容吧!紅米RedmiK70Pro怎麼設定返回鍵和主鍵?若要存取手機的設定選單,您可以透過下拉通知欄或在主畫面上尋找設定圖示來開啟設定介面。在設定介面中,尋找並點擊“按鈕”或“導覽列”

如何讓MySQL外鍵和主鍵自動關聯? 如何讓MySQL外鍵和主鍵自動關聯? Mar 15, 2024 pm 12:54 PM

如何讓MySQL外鍵和主鍵自動關聯?在MySQL資料庫中,外鍵和主鍵是非常重要的概念,它們能夠幫助我們在不同表之間建立關聯關係,確保資料的完整性和一致性。在實際的應用過程中,經常需要讓外鍵自動關聯到對應的主鍵上,以避免資料不一致的情況發生。以下將介紹如何透過具體的程式碼範例實現此功能。首先,我們需要建立兩個表,一個表作為主表,另一個表作為從表。在主表中創

榮耀X50Pro怎麼設定返回鍵和主鍵? 榮耀X50Pro怎麼設定返回鍵和主鍵? Mar 18, 2024 am 11:34 AM

榮耀X50Pro是最近剛正式發表的旗艦手機,這款手機採用了全新的外觀設計,顏值確實是非常不錯的,除了顏值之外這款手機的性能配置也很出色,那麼榮耀X50Pro怎麼設定返回鍵和主鍵?下面就讓我們來一起看看吧!榮耀X50Pro怎麼設定返回鍵和主鍵? 1.在主畫面上找到「設定」圖標,點選「系統和更新」功能選項;2、點選系統和更新功能項目中的「系統導航方式」;3、榮耀手機提供三種返回鍵設置,可根據自己的設定進行調整:榮耀X50Pro這款手機設定返回鍵和主鍵的方法還是很簡單的,大家可以按照上面的步驟來

榮耀90GT怎麼設定返回鍵和主鍵? 榮耀90GT怎麼設定返回鍵和主鍵? Feb 12, 2024 am 09:48 AM

隨著時代的快速發展,現在的手機技術也是在不斷進步的,以前手機會有各種按鍵,現在逐漸被淘汰了,不過還是有很多人習慣使用按鍵來控製手機,那麼榮耀90GT怎麼設置返回鍵和主鍵?下面就來一起看看吧!榮耀90GT怎麼設定返回鍵和主鍵?榮耀90GT是一款華為手機,設定返回鍵和主鍵的方法如下:步驟一:開啟設定:在手機桌面上找到「設定」圖標,點選進入設定介面。步驟二:尋找「系統與更新」選項:在設定介面中,向下滑動螢幕,找到並點選進入「系統與更新」選項。步驟三:進入導覽列設定:在系統與更新介面中,向下滑動螢幕,找

mysql主鍵用什麼類型 mysql主鍵用什麼類型 Jul 18, 2023 pm 03:11 PM

mysql主鍵可以用整數型別、自增長整數型別、UUID型別或字串型。類型詳細介紹:1、整數類型,最常見的主鍵類型之一,在MySQL中,可以使用不同的長度;2、自增長整數類型,可以自動分配唯一的整數值作為主鍵,這個類型非常適合用作主鍵,特別是在需要高並發插入資料的場景中;3、UUID類型,一種128位元的全域唯一標識符,可以確保資料的全域唯一性;4、字串類型,不建議使用等。

一文聊聊MySQL中的自增主鍵 一文聊聊MySQL中的自增主鍵 Jul 05, 2022 am 10:08 AM

這篇文章帶大家深入了解下MySQL中的自增主鍵,希望對大家有幫助!

如何在MySQL中使用外鍵來維護資料的完整性? 如何在MySQL中使用外鍵來維護資料的完整性? Aug 02, 2023 am 08:09 AM

如何在MySQL中使用外鍵來維護資料的完整性?引言:在資料庫中,資料的完整性是非常重要的。透過使用外鍵,我們可以確保在資料庫中的關聯表之間保持資料的一致性和完整性。本文將向您介紹在MySQL中如何使用外鍵來維護資料的完整性。建立表格和關聯:首先,我們需要建立兩個表格,並將它們關聯起來。假設我們有兩個表格,一個是「orders」表格,另一個是「customer

See all articles