首页 数据库 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数据库中,外键和主键是非常重要的概念,它们能够帮助我们在不同表之间建立关联关系,保证数据的完整性和一致性。在实际的应用过程中,经常需要让外键自动关联到对应的主键上,以避免数据不一致的情况发生。下面将介绍如何通过具体的代码示例实现这一功能。首先,我们需要创建两个表,一个表作为主表,另一个表作为从表。在主表中创

荣耀90GT怎么设置返回键和主键? 荣耀90GT怎么设置返回键和主键? Feb 12, 2024 am 09:48 AM

随着时代的快速发展,现在的手机技术也是在不断进步的,以前手机会有各种按键,现在逐渐被淘汰了,不过还是有很多人习惯使用按键来控制手机,那么荣耀90GT怎么设置返回键和主键?下面就来一起看看吧!荣耀90GT怎么设置返回键和主键?荣耀90GT是一款华为手机,设置返回键和主键的方法如下:步骤一:打开设置:在手机桌面上找到“设置”图标,点击进入设置界面。步骤二:寻找“系统与更新”选项:在设置界面中,向下滑动屏幕,找到并点击进入“系统与更新”选项。步骤三:进入导航栏设置:在系统与更新界面中,向下滑动屏幕,找

荣耀X50Pro怎么设置返回键和主键? 荣耀X50Pro怎么设置返回键和主键? Mar 18, 2024 am 11:34 AM

荣耀X50Pro是最近刚刚正式发布的一款旗舰手机,这款手机采用了全新的外观设计,颜值确实是非常不错的,除了颜值之外这款手机的性能配置也很出色,那么荣耀X50Pro怎么设置返回键和主键?下面就让我们来一起看看吧!荣耀X50Pro怎么设置返回键和主键?1、在主屏幕上找到“设置”图标,点击“系统和更新”功能选项;2、点击系统和更新功能项目中的“系统导航方式”;3、荣耀手机提供三种返回键设置,可以根据自己的设置进行调整:荣耀X50Pro这款手机设置返回键和主键的方法还是很简单的,大家可以按照上面的步骤来

mysql主键用什么类型 mysql主键用什么类型 Jul 18, 2023 pm 03:11 PM

mysql主键可以用整数类型、自增长整数类型、UUID类型或者字符串类型。类型详细介绍:1、整数类型,最常见的主键类型之一,在MySQL中,可以使用不同的长度;2、自增长整数类型,可以自动分配唯一的整数值作为主键,这个类型非常适合用作主键,特别是在需要高并发插入数据的场景中;3、UUID类型,一种128位的全局唯一标识符,可以确保数据的全局唯一性;4、字符串类型,不推荐使用等。

如何在MySQL中使用外键来维护数据的完整性? 如何在MySQL中使用外键来维护数据的完整性? Aug 02, 2023 am 08:09 AM

如何在MySQL中使用外键来维护数据的完整性?引言:在数据库中,数据的完整性是非常重要的。通过使用外键,我们可以确保在数据库中的关联表之间保持数据的一致性和完整性。本文将向您介绍在MySQL中如何使用外键来维护数据的完整性。创建表格和关联:首先,我们需要创建两个表格,并将它们关联起来。假设我们有两个表格,一个是“orders”表格,另一个是“customer

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

本篇文章带大家深入了解下MySQL中的自增主键,希望对大家有所帮助!

See all articles