`

oracle 表约束的添加、修改以及约束的禁用启用(转)

 
阅读更多

 

--禁用所有外键约束的Sql代码
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'

--启用所有外键约束的Sql代码
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'  

执行查询出外键,然后执行即可

 

以下提到的内容都很简单,所以不详细说明,仅罗列一些语法:

一、主外键的添加、删除

1、向表中添加外键约束,把emp表的deptno字段设置为emp表的外键,引用自dept表

      ALTER TABLE emp  ADD CONSTRAINT FK_test FOREIGN KEY(deptno) REFERENCES dept(deptno);

2、向表中添加主键约束 alter table emp add constraint pk_emp primary key(empno);

3、创建表的同时创建主键约束

(1)无命名 create table EMP( empno int  primary key not null, ename varchar(20), deptno int);

(2)有命名 create table EMP( empno int , ename varchar(20), deptno int , constraint PK_EMP primary key(empno));

4、删除表中已有的主键约束

(1)无命名可用 SELECT * from user_cons_columns;

      如:SELECT * from user_cons_columns where table_name='EMP';

        查找表中主键名称得emp表中的主键名为PK_EMP

        alter table student drop constraint  PK_EMP;

(2)有命名 alter table emp drop constraint PK_EMP;

 

二、更改表的结构

  1.编辑表的字段

  修改一个列的数据类型(一般限于修改长度,修改为一个不同类型时有诸多限制):

  语法:

  ALTER TABLE 表名 MODIFY(列名,数据类型);

  eg1:

  alter table skate_test modify (author number(10,0) )

  在修改列的长度时候,只能编辑比现有字段实际存的长度还要大,否则提示下面的错误:

  ORA-01441: 无法减小列长度, 因为一些值过大

  eg2:

  alter table skate_test modify (author varchar2(10) )

  在修改列的数据类型的时候,所修改的列必须为空,否则提示下面的错误:

  ORA-01439: 要更改数据类型, 则要修改的列必须为空

  2.增加一个列

  语法:

  ALTER TABLE 表名 ADD(列名,数据类型);

  eg1:

  ALTER TABLE skate_test ADD(author NUMBER(38,0) not null);

  3.给列改名:

  语法:

  ALTER TABLE 表名 RENAME COLUMN 当前列名 TO 新列名;

  eg1:

  ALTER TABLE skate_test RENAME COLUMN author TO authorer_new

  4.删除一个列

  语法:

  ALTER TABLE 表名 DROP COLUMN 列名;

  eg1:

  alter table skate_test drop column author

  5.将一个表改名

  语法:

  ALTER TABLE 当前表名 RENAME TO 新表名;

  eg1:

  alter table skate_test rename to test_sakte

  5.给表加注释

  comment column on 表名.列名 is '注释内容';   //修改表的列的注释

  COMMENT ON TABLE MOVO_NEW.TEST_SAKTE  IS '注释内容';  //修改表的注释

 

三、主键、外键等约束的启用与禁用

这里以外键为例来说明

执行下面的查询语句,我们会得到当前用户下所有可以被查询到的表的外键,并生相应的修改语句。我们指需要把生成的结果copy出来执行就OK了。

不过对于alter语句的使用还是要谨慎,使用之前需要考虑清楚。

--删除所有外键约束 的Sql代码
select 'alter table '||table_name||' drop constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP drop constraint FK_TEST;
--禁用所有外键约束的Sql代码
select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints where constraint_type='R'
--alter table EMP disable constraint FK_TEST;
--启用所有外键约束的Sql代码
select 'alter table '||table_name||' enable constraint '||constraint_name||';' from user_constraints where constraint_type='R'  
--alter table EMP enable constraint FK_TEST;

这里有一点需要注意,在上面的查询语句中where条件后带的约束类型 constraint_type='R' ,我们这里指定的是'R',可以猜想到,出来R之外还有其他的约束类型。

下面列出constraint_type的其他几种类型及相应的含义:

Type Code Type Description Acts On Level
C Check on a table Column
O Read Only on a view Object
P Primary Key Object
R Referential AKA Foreign Key Column
U Unique Key Column
V Check Option on a view Object

所以,我们需要禁用哪类约束,就将查询条件做相应的调整就好。

分享到:
评论

相关推荐

    Oracle 约束错误约束错误

    在本文中,我们将讨论 Oracle 中的约束错误,特别是 ORA-02292 错误,该错误通常发生在试图删除或修改父表中的记录,但子表中存在对应的记录时。 ORA-02292 错误的原因是由于试图删除或修改父表中的记录,但子表中...

    禁用启用所有外键约束.tst

    本主题将围绕"禁用启用所有外键约束"这一话题展开,主要探讨如何在不同的数据库系统中进行操作。 首先,让我们来看看如何在MySQL中禁用和启用外键约束: 1. **禁用外键约束**: 在MySQL中,可以使用以下SQL语句...

    视图禁用与启用

    约束禁用 –如果有大批量数据导入时,我们可以采用禁用约束的方法, 主要的好处,首先效率高,另外有主外键约束的表之间导 入时,不用考虑导入的先后顺序。 –禁用约束语法: ALTER TABLE table DISABLE ...

    09oracle约束.pptx

    外键约束的规则包括:从表不能引用不存在的键值,主表的键值更改会影响从表,以及不能在主表无关联记录时向从表添加记录。 约束在Oracle中的状态: Oracle提供了四种约束状态来管理约束的启用和验证: - 禁止的非...

    Oracle数据库Constraint约束的常用操作及异常处理[归类].pdf

    2. 新建约束:创建约束,禁用约束,加载数据,然后启用约束并捕获异常。 约束的常见操作 1. 定义约束:使用ALTER TABLE语句定义约束,例如: ```sql ALTER TABLE t ADD CONSTRAINT ch_100 UNIQUE (id) DISABLE; ``...

    oracle电子文档:数据库约束.rar

    4. **禁用/启用约束**:在进行批量数据导入或更新时,可能需要临时禁用约束,以避免违反约束条件,然后在操作完成后重新启用。`ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;` 和 `ALTER TABLE table...

    Oracle数据库的完整性约束规则详解

    - **启用约束**:同样地,可以重新启用之前禁用的约束。 ```sql ALTER TABLE table_name ENABLE CONSTRAINT constraint_name; ``` - **删除约束**:如果不再需要某个约束,可以使用DROP CONSTRAINT命令彻底...

    Oracle 约束 总结

    ### Oracle约束总结 在Oracle数据库中,为了确保数据的一致性和完整性,我们常常需要使用到各种类型的约束。本文将详细地介绍Oracle中的五种主要约束类型:非空(NOT NULL)、唯一(UNIQUE)、主键(PRIMARY KEY)...

    oracle 系统表大全

    - 约束与表相关联,可以通过`CREATE TABLE`或`ALTER TABLE`命令添加、修改或删除。 - **临时禁用约束**: - `ALTER TABLE book_example DISABLE CONSTRAINT book_example_1;`:暂时禁用表`book_example`上的约束`...

    数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf

    约束的操作包括创建约束(通常在创建表时)、追加约束(在表创建后)、启用和禁用约束。启用和禁用约束是临时的,可以在需要时调整约束的活动状态,例如在导入大量数据或进行复杂更新时。 例如,下面的SQL语句展示...

    Oracle约束详解

    Oracle约束是数据库设计中的关键元素,用于确保数据的完整性和一致性。在Oracle数据库系统中,约束是用来限制可以插入或更新到表中的数据类型和值。它们是预防性地确保数据质量的规则,防止意外的数据输入错误或不...

    Oracle批量执行sql语句之禁用所有表的外键

    总之,Oracle批量执行SQL语句禁用所有表的外键约束是一项实用的技巧,它能帮助你在数据导入或迁移过程中避免因外键约束导致的错误。但务必谨慎操作,并确保在操作完成后及时恢复这些约束,以保持数据库的健康状态。

    Oracle系统表查询

    ### Oracle系统表查询详解 #### 一、Oracle系统表与数据字典 Oracle数据库通过一系列系统表(也称为数据字典视图)来管理数据库元数据。这些表提供了关于数据库对象的重要信息,如表空间、表、索引等。数据字典`...

    2020_Oracle19c数据迁移图文详解.docx

    - 执行SQL命令禁用这些表的外键约束。 2. **导入数据**: - 使用数据泵的`content=data_only`参数仅导入数据。 3. **启用外键约束**: - 数据导入完成后,重新启用外键约束。 ##### 3. 解决表空间不同的问题 **...

    Oracle 系统表大全

    - **禁用/启用约束**: - 示例命令: ```sql ALTER TABLE book_example DISABLE CONSTRAINT book_example_1; ALTER TABLE book_example ENABLE CONSTRAINT book_example_1; ``` - **设置列约束**: - NOT ...

    Oracle面试题集锦

    12. **重建母表**:先禁用子表的外键约束,重建母表后再启用外键约束。 13. **归档与非归档模式**:归档模式支持完全恢复,但需要更多的存储空间和归档日志;非归档模式简化备份,但只能恢复到最后一个检查点。 14...

    ORACLE经典常用语句总结

    通过此语句可以暂时禁用或重新启用表`TABLE_NAME`上的约束`KEY_NAME`。 #### 4. 查询约束 ```sql SELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE, STATUS FROM USER_CONSTRAINTS; ``` 此查询语句用于查看...

    oracle database 10g 中文手册

    - **描述**:禁用了约束条件,且不允许对有约束条件的列进行任何修改。 - **应用场景**:适用于需要验证现有数据,但不允许修改数据的情况。 **3. ENABLE NOVALIDATE** - **描述**:启用约束条件,但仅检查新...

Global site tag (gtag.js) - Google Analytics