Oracle 主键约束

合集下载

删除索引主键约束引起ORA-02429错误的解决方法

删除索引主键约束引起ORA-02429错误的解决方法

删除索引主键约束引起ORA-02429错误的解决方法2008-05-29 15:46drop index时出现如下错误:SQL> drop index oos_index;drop index oos_index*ERROR at line 1:ORA-02429: cannot drop index used for enforcement of unique/primary key我们知道当创建Primary key和unique约束时,如果在该key上不存在索引,则Oracle会自动创建对应的unique索引,而当你要删除该索引时,必须先Disable或Drop该约束。

看下面的例子:SQL>CREATE TABLE employees2 (3 empno NUMBER(6) PRIMARY KEY,4 name VARCHAR2(30),5 dept_no NUMBER(2)6 );Table created.SQL> select index_name,owner,table_NAME from all_indexes whereowner=’SFA’ AND table_name=’EMPLOYEES’;INDEX_NAME OWNER TABLE_NAME———————- ——————- —————–SYS_C007594 SFA EMPLOYEESSQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,INDEX_NAME FROM ALL_CONSTRAINTS WHERE TABLE_NAME=’EMPLOYEES’;CONSTRAINT_NAME C TABLE_NAME INDEX_NAME ———————————————————- ——————SYS_C007594 P EMPLOYEES SYS_C007594SQL> DROP INDEX SYS_C007594;DROP INDEX SYS_C007594*ERROR at line 1:ORA-02429: cannot drop index used for enforcement of unique/primary keySQL> ALTER TABLE employees2 MODIFY PRIMARY KEY DISABLE;Table altered.SQL> select index_name,owner,table_NAME from all_indexes whereowner=’SFA’ AND table_name=’EMPLOYEES’;no rows selectedSQL> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,INDEX_NAME FROM ALL_CONSTRAINTS WHERE TABLE_NAME=’EMPLOYEES’;CONSTRAINT_NAME C TABLE_NAME INDEX_NAME ———————————————————- ——————SYS_C007594 P EMPLOYEES SYS_C007594SQL> ALTER TABLE employees2 MODIFY PRIMARY KEY ENABLE;Table altered.SQL> select index_name,owner,table_NAME from all_indexes whereowner=’SFA’ AND table_name=’EMPLOYEES’;INDEX_NAME OWNER TABLE_NAME——————- —————–————-SYS_C007594 SFA EMPLOYEES从上面可以看出,如果创建了Primary Key约束,则Oracle会自动帮你创建相应的unique索引。

oracle_primary用法_概述及解释说明

oracle_primary用法_概述及解释说明

oracle primary用法概述及解释说明1. 引言1.1 概述在关系型数据库中,Primary Key(主键)是一种重要的数据库约束,用于唯一标识一个表中的每一行数据。

它是数据库设计中非常重要的概念之一,对于保障数据完整性和提高查询效率都具有很大作用。

本文将详细介绍Oracle数据库中Primary Key的用法及其相关解释说明。

1.2 文章结构本文由以下几个部分组成。

首先是引言部分,对文章进行概述,并介绍文章的结构。

接下来是Oracle Primary用法部分, 介绍了Primary Key的基本定义、作用以及如何定义和使用Primary Key。

然后是Primary Key的特点和限制部分, 包括唯一性约束、非空约束以及自动递增特性等。

随后是如何选择和设计Primary Key部分, 讨论根据业务需求选择合适的Primary Key类型、设计复合主键时需要考虑的因素以及索引对Primary Key性能的影响等方面内容。

最后是结论部分,总结了Primary Key在数据库设计中的重要性与应用价值,并给出了正确使用Primary Key提高数据完整性和查询效率的建议,并展望了未来Database设计发展趋势。

1.3 目的本文旨在全面介绍Oracle Primary Key的用法,帮助读者深入了解Primary Key 的概念、作用和限制,以及如何正确选择和设计Primary Key。

通过本文的阅读,读者将能够更好地理解Primary Key在数据库设计中的重要性,并能够合理运用它来提高数据库的性能和数据完整性。

此外,本文还对未来Database设计发展趋势进行了展望,为读者提供思考与探索的方向。

2. Oracle Primary用法:2.1 什么是Primary KeyPrimary Key(主键)是数据库表中的一列或一组列,其具有唯一性和非空性的特点。

每个数据库表都应该有一个Primary Key,它用于唯一标识表中的每行数据。

创建表的约束条件

创建表的约束条件

创建表的约束条件创建表的约束条件是在数据库中定义表结构时,为了保证数据的完整性和一致性,对表中的数据进行限制和规范的条件。

下面将介绍常见的表约束条件及其作用。

1. 主键约束:主键是用于标识表中每条记录的唯一标识符。

主键约束要求主键的值在表中是唯一的,并且不能为空。

主键可以是单个列,也可以是多个列的组合。

主键约束的作用是保证数据的唯一性和查询的高效性。

2. 唯一约束:唯一约束要求某个或某些列的值在表中是唯一的,但可以为空。

唯一约束的作用是保证数据的唯一性,可以用于限制某个字段的取值范围。

3. 非空约束:非空约束要求某个或某些列的值不能为空。

非空约束的作用是保证数据的完整性,防止出现空值。

4. 默认约束:默认约束是指在插入数据时,如果没有指定某个列的值,那么该列使用默认值。

默认约束的作用是提供默认值,简化数据插入操作。

5. 外键约束:外键约束用于建立两个表之间的关联关系,通过外键可以实现表与表之间的数据一致性和完整性。

外键约束要求外键列的值必须在主表中存在,或者为空。

外键约束的作用是保证数据的一致性和完整性,限制了数据之间的关联关系。

6. 检查约束:检查约束是对某个列的取值进行限制的条件,只有满足条件的数据才能插入或修改。

检查约束的作用是保证数据的合法性和一致性,可以用于限制某个字段的取值范围。

7. 级联约束:级联约束是指在对主表进行更新或删除操作时,自动更新或删除与之关联的从表中的数据。

级联约束的作用是保证关联表之间的数据一致性和完整性。

8. 域约束:域约束是在某个列的取值范围内进行限制的条件。

域约束的作用是保证数据的合法性和一致性,可以用于限制某个字段的取值范围。

9. 长度约束:长度约束是指对某个列的字符长度或数值长度进行限制的条件。

长度约束的作用是保证数据的完整性和一致性,可以用于限制某个字段的长度。

10. 唯一组合约束:唯一组合约束要求某几个列的组合在表中是唯一的。

唯一组合约束的作用是保证多个字段的组合值的唯一性。

oracle常用约束类型

oracle常用约束类型

oracle常用约束类型
Oracle数据库中常用的约束类型如下:
1. 主键约束(PRIMARY KEY):主键约束确保表中的每一行具有唯一标识,并且不允许主键字段为空。

一个表只能有一个主键。

2. 唯一约束(UNIQUE):唯一约束确保表中指定字段的值是唯一的,但允许空值。

可以在一个表中为多个字段设置唯一约束。

3. 外键约束(FOREIGN KEY):外键约束用于维护表之间的引用完整性。

一个表的外键引用另一个表的主键或唯一约束字段,在参照完整性下,一个表中的外键值必须与被引用表中的主键或唯一约束字段中的某个值相匹配,或者是NULL。

4. 检查约束(CHECK):检查约束用于确保表中的字段值满足特定条件。

例如,可以要求一个字段的值在一个指定的范围内,或符合一定的格式。

5. 非空约束(NOT NULL):非空约束用于保证特定字段的值不能为空。

当一个字段设置了非空约束,插入或更新记录时,需要为这个字段提供非空值。

数据库设计中的约束条件与规范建议

数据库设计中的约束条件与规范建议

数据库设计中的约束条件与规范建议在进行数据库设计时,约束条件和规范建议是非常重要的因素。

它们确保数据库的完整性、一致性和安全性。

本文将介绍数据库设计中常见的约束条件和规范建议,并提供相应的解决方法和建议。

1. 主键约束主键是用来唯一标识数据库表中每一行记录的字段。

它具有唯一性和非空性的特征,可以确保每一行记录都有一个唯一的标识符。

在设计数据库时,应该为每个表选择合适的主键,通常是一个自增长的整数或者能够唯一标识某个实体的字段。

同时,还应该为主键添加相应的索引,以提高查询性能。

2. 外键约束外键是用来确保表之间的关联关系的字段。

它建立了表之间的关联,使得特定的行可以通过引用其他表中的行来保持数据的一致性。

在设计数据库时,应该明确定义表之间的关系,并使用外键来确保这些关系的正确性。

在创建外键时,应该指定引用表和引用列,并为外键添加相应的索引,以提高查询性能。

3. 唯一约束唯一约束用于确保表中的某个字段的值是唯一的。

它可以防止重复的数据出现。

在设计数据库时,应该在需要唯一性的字段上添加唯一约束,以保证数据的一致性。

需要注意的是,唯一约束并不会自动创建索引,因此在添加唯一约束后,还应该手动创建相应的索引。

4. 默认值约束默认值约束用于指定当插入新行时,如果没有为某个字段提供值,该字段应该采用的默认值。

在设计数据库时,根据业务需求,可以为字段指定适当的默认值。

这可以简化应用程序的开发和维护工作,并确保数据的完整性。

5. 检查约束检查约束用于限制字段的取值范围或格式。

它可以确保数据的一致性和合法性。

在设计数据库时,应该在需要进行合法性检查的字段上添加检查约束。

例如,可以使用正则表达式来验证邮件地址的格式,或者使用trigger触发器来实现更复杂的检查逻辑。

6. 规范化规范化是一种数据库设计过程,旨在减小数据的冗余性并提高数据存储的效率。

它是数据库设计中的一种最佳实践,应该在设计过程的早期考虑。

规范化过程通常包括将表拆分为更小的、更具体的实体,通过建立关联来实现数据的一致性和完整性。

oracle主键的设置方法

oracle主键的设置方法

主键:1.主键约束:一个表只能有一个主键约束。

主键可以是单个字段,也可以是多个字段。

无论是哪种情况,其所有字段都是NOT NULL。

2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。

3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束;主键所有字段都是not null,unique可以是null;相同点在于都能保证唯一性。

4.主键、Unique与索引:主键约束与Unique约束默认会成为索引。

当主键和Unique有多个字段时,有索引前缀性问题,即where语句中的条件必须有主键或者unique的第一个字段,否则不会使用索引。

5. 外键与主键、Unique:外键必须为另外一张表(父表)的主键或者唯一索引。

如果要添加记录,而父表中没有则报错。

反之,如果要删除父表中的记录,而子表中有记录,也会报错。

但是如果在创建外键约束时,如果使用on delete cascade,则删除父表中数据时,不报错而直接把子表关联的数据删除。

如果要删除父表,则需要加上cascade constraints,此时子表的foreign key被去除,表中记录保持不变。

外键:外键是该表是另一个表之间联接的字段外键必须为另一个表中的主键外键的用途是确保数据的完整性。

它通常包括以下几种:实体完整性,确保每个实体是唯一的(通过主键来实施).oracle主键的设置方法有2种:一种是设置自增长主键,另一种是生成唯一序列;1.自增长主键SQL> create table Prim_key_Increase_Test(2 id number(10) primary key,3 name varchar2(30)4 );表已创建。

SQL> create sequence Prim_key_Incre_Sequence2 minvalue 13 nomaxvalue4 start with 15 increase by 16 nocycle7 nocache;increase by 1*第5 行出现错误:ORA-00933: SQL 命令未正确结束SQL> 55* increase by 1SQL> c /increase/increment/5* increment by 1SQL> r1 create sequence Prim_key_Incre_Sequence2 minvalue 13 nomaxvalue4 start with 15 increment by 16 nocycle7* nocache序列已创建。

Oracle 10g删除主键约束后无法删除唯一约束索引问题的模拟与分析

Oracle 10g删除主键约束后无法删除唯一约束索引问题的模拟与分析
insert into t values (1,1)
*
ERROR at line 1:
ORA-00001: unique constraint (SEC.PK_T) violated
【问题原因】
这个问题的原因可以参考MOS的[ID 309821.1]文章,文章中给出了具体原因。
Oracle 10G Does not Drop User Index Associated With Unique/Primary Key Constraints [ID 309821.1]
Table altered.
经确认,约束和索引均被删除后,尝试插入两条重复数据,成功。
sec@ora10g> select OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,INDEX_OWNER,INDEX_NAME from user_constraints where table_name = 'T';
6.删除主键约束
sec@ora10g> alter table t drop constraint pk_t cascade;
Table altered.
7.确认约束和索引删除情况
sec@ora10g> select OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,INDEX_OWNER,INDEX_NAME from user_constraints where table_name = 'T';
原来是Oracle在的10g版本中对内部函数"atbdui"进行了调整,导致在删除约束的时候无法删除用户创建的索引。

all_constraints表结构

all_constraints表结构

all_constraints表结构在Oracle数据库中,all_constraints是一个非常重要的系统表,它存储了所有约束(包括主键、外键、唯一性约束、检查约束等)的信息。

在日常的数据库开发与管理中,使用all_constraints表可以方便地查看已经存在的约束,以及进行约束的修改或删除等工作。

下面就让我们来仔细了解一下all_constraints的结构和具体用法。

1. 表结构简介all_constraints表的结构非常简洁明了,主要包含以下几个字段:- OWNER:约束所属的对象所有者。

- CONSTRAINT_NAME:约束的名称。

- CONSTRAINT_TYPE:约束的类型。

该字段的值包括:P(主键)、U(唯一性约束)、R(外键)、C(检查约束)等。

- TABLE_NAME:约束所属的表名。

- SEARCH_CONDITION:约束的条件表达式(仅适用于检查约束)。

- R_OWNER:远程表的所有者(仅适用于外键)。

- R_CONSTRAINT_NAME:远程表的约束名称(仅适用于外键)。

使用all_constraints表,我们可以方便地查询各种约束的信息,并在需要的时候对其进行修改或删除。

2. 查询约束信息我们可以使用SELECT语句来查询特定表的所有约束信息,例如:SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,SEARCH_CONDITIONFROM all_constraintsWHERE TABLE_NAME = 'EMPLOYEES';这条SQL语句将返回所有属于EMPLOYEES表的约束的名称、类型和条件表达式。

3. 查询主键信息我们可以使用以下SQL语句来查询特定表的主键信息:SELECT CONSTRAINT_NAME, COLUMN_NAMEFROM all_cons_columnsWHERE TABLE_NAME = 'EMPLOYEES' AND CONSTRAINT_NAME = (SELECT CONSTRAINT_NAME FROM all_constraintsWHERE TABLE_NAME = 'EMPLOYEES' AND CONSTRAINT_TYPE = 'P');该语句将返回所有属于EMPLOYEES表的主键列的名称。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 主键约束
主键约束用于惟一地确定表中的每一行数据。

在一个表中,最多只能有一个主键约束,主键约束即可以是一个列组成的,也可能是由两个或两个以上列组成的。

对于表中的每一行数据,主键约束列都是不同的,主键约束同时也具有非空约束。

如果主键约束由一列组成时,该主键约束被称为行级约束。

如果主键约束由两个或两个以列组成时,则该主键约束被称为表级约束。

这两种不同类型的主键,在定义上有一点差异。

例如,在定义EMPLOYEES表时,为表定义了一个表级主键约束EMP_PK,该主键约束由EMPNO列组成:
SQL> create table employees(
2 empno number(10),
3 ename varchar2(20) not null,
4 sex char(2),
5 salary number(8,2),
6 hiredate date default sysdate,
7 job varchar2(10),
8 email varchar2(50),
9 deptno number(3) not null,
10 constraint EMP_PK primary key (empno,ename));
表已创建。

使用ALTER TABLE语句增加主键约束的部分语法形式如下:
alter table table_name
add constraint constraint_name primary key(column1[,column2]);
如果表上已经存在主键约束,那么当试图在该表上再增加一个主键约束时,系统就会生生一个错误信息。

即使在不同的列上增加约束也是如此。

例如,当在EMPLOYEES表的EMAIL列上再增加一个约束时,系统将产生“表中能具有一个主键”的错误消息。

如下所示:
SQL> alter table employees
2 add constraint emp_email_pk primary key (email);
add constraint emp_email_pk primary key (email)
*
第 2 行出现错误:
ORA-02260: 表只能具有一个主键
与NOT NULL约束相同,当为表添加主键约束时,如果该表中已经存在数据,并且主键列具有相同的值或存在NULL值,则添加主键约束的操作将失败。

如果要为PRIMARY KEY约束指定名称,则必须使用CONSTRAINT关键字,如上面的示例所示。

如果要使用系统自动为其分配的名称,则可以省略CONSTRAINT关键字。

例如,下面的语句在创建EMPLOYEES表时在EMPNO列上定义了一个主键约束:
create table employees(
empno number(10) primary key,

);
同样,使用ALTER TABLE … ADD添加匿名约束的语句形式如下:
alter table employee_history
add primary key (employee_id);
如果想要为表删除PRIMARY KEY约束时,则可以使用如下的ALTER TABLE … DROP 语句来完成:
SQL> alter table employees
2 drop constraint EMP_PK;
表已更改。

在表中增加主键约束时,一定要根据实际情况确定。

例如,在EMPLOYEES表的EMPNO 列上增加主键约束是合理的,因为该列的数据是不允许相同的。

但是,在ENAME、SALARY 等列上创建主键约束是不合理的。

相关文档
最新文档