oracle怎么禁用外键,oracle添加外键语句
oracle删除外键字段,擦查询问题
1.查询所有表的外键的:
丘北网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站等网站项目制作,到程序开发,运营维护。创新互联于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
select table_name, constraint_name from user_constraints where constraint_type = 'R';
2.禁用所有外键约束, 使用下面的sql生成对应sql脚本:
select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type = 'R';
生成的sql类似下面的语句:
alter table BERTH disable constraint BERTH_FK;
alter table BOLLARD disable constraint BOLLARD_FK;
alter table YARD_UNAVAIL_REGION disable constraint YARD_UNAVAIL_REGION_FK;
3.启用所有外键约束, 使用下面的sql生成对应sql脚本:
select 'alter table ' || table_name || ' enable constraint ' || constraint_name || ';' from user_constraints where constraint_type = 'R';
生成的sql类似下面的语句:
alter table BERTH enable constraint BERTH_FK;
alter table BOLLARD enable constraint BOLLARD_FK;
alter table YARD_UNAVAIL_REGION enable constraint YARD_UNAVAIL_REGION_FK;
4.删除所有外键约束, 使用下面的sql生成对应sql脚本:
select 'alter table ' || table_name || ' drop constraint ' || constraint_name || ';' from user_constraints where constraint_type = 'R';
生成的sql类似下面的语句:
alter table BERTH drop constraint BERTH_FK;
alter table BOLLARD drop constraint BOLLARD_FK;
alter table YARD_UNAVAIL_REGION drop constraint YARD_UNAVAIL_REGION_FK;
Oracle中禁用了外键约束对系统有没有影响
禁用了外键约束,那么你的数据可能就不符合 此处外键约定的规则。
对你的数据的逻辑肯定有影响,对你的应用程序可能产生影响。
至于Oracle系统本身,则没有什么影响
如何启用和禁用oracle&DB2数据库外键约束
特总结了Oracle和DB2数据库下如何禁用外键约束的方法。
一、Oracle数据库:
禁用约束基本语法:
alter table 数据库表名 disable constraint 约束名
假设现在需要关闭pub_organ的外键约束:
1、 首先查询pub_organ存在哪些外键约束,此时需要用到oracle的字典表user_constraints。
select * from user_constraints where table_name='PUB_ORGAN';
上图就是查询结果,其中各字段含义如下:
OWNER: 表的所有者
CONSTRAINT_NAME: 约束名称
CONSTRAINT_TYPE: 约束类型(R代表外键,P代表主键,C代表check约束)
TABLE_NAME: 表名称
SEARCH_CONDITION: check约束的具体信息
STATUS: ENABLED表示当前约束是启用的,DISABLED表示当前约束未启用。
2、 查询出表存在哪些约束后,即可以通过alter语句启用或禁用指定的约束了。
如禁用pub_organ表的外键PUBORGAN_FK1,则可以使用如下命令实现:
alter table PUB_ORGAN disable constraint PUBORGAN_FK1;
执行后,再次查询字典表user_constraints,如下:
此时往数据库表pub_organ中插入数据时就不再受外键约束的影响了。
启用约束基本语法:
alter table 数据库表名 enable constraint 约束名
如现在需要重新启用pub_organ的外键约束,可以使用如下命令:
alter table PUB_ORGAN enable constraint PUBORGAN_FK1;
二、DB2数据库:
禁用约束基本语法:
ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 NOT ENFORCED
启用约束基本语法:
ALTER TABLE 表名称 ALTER FOREIGN KEY 约束名称 ENFORCED
相关字典表:SYSIBM.SYSTABCONST
如:select * from SYSIBM.SYSTABCONST where tbname='PUB_ORGAN';
各字段含义如下:
NAME: 约束名称
DEFINER: 定义者
CONSTRAINTTYP: 约束类型(P代表主键,F代表外键)
TBNAME: 表名称
ENFORCED: 是否启用(Y代表启用,N代表未启用)
三、封装成java接口、批量执行
在实际工作中,经常会将若干个表,或者所有数据库表的外键一起禁用,此时需要批量执行相关命令,笔者根据工作实际,使用java封装了相关接口,以方便使用。
对外暴露接口如下:
/*
* 启用当前用户指定tableName的所有外键约束
* 入参使用可变参数(jdk5新特性)
* 调用方式:
* 1、enableFK("pub_organ")
* 2、enableFK("pub_organ","pub_stru")
* 3、enableFK(new String[]{"pub_organ","pub_stru"})
*/
public static void enableFK(String...tableNames){
disableORenbaleFK(true,tableNames);
}
/*
* 禁用当前用户指定tableName的所有外键约束
*/
public static void disableFK(String...tableNames){
disableORenbaleFK(false,tableNames);
}
/*
* 启用当前用户所有表的外键约束
*/
public static void enableAllFK(){
disableORenableAllConstraint(true);
}
/*
* 禁用当前用户所有表的外键约束
*/
public static void disableAllFK(){
disableORenableAllConstraint(false);
}
其中核心处理代码如下:
if(tableNames==null||tableNames.length==0){
throw new RuntimeException("入参tableNames不能为空!");
}
//查询指定表的外键约束
String sql = null;
String dbType = getDBType();
if(dbType.contains("ORACLE")){
sql = "select 'alter table ' || table_name || ' disable constraint ' || constraint_name from user_constraints where constraint_type='R' and TABLE_NAME in(";
if(isEnable){
sql = sql.replace("disable", "enable");
}
}else if(dbType.contains("DB2")){
sql = "select 'ALTER TABLE ' || TBNAME || ' ALTER FOREIGN KEY ' || NAME ||' NOT ENFORCED ' FROM SYSIBM.SYSTABCONST WHERE CONSTRAINTYP='F' and TBNAME in(";
if(isEnable){
sql = sql.replace("NOT ENFORCED", "ENFORCED");
}
}else{
throw new RuntimeException("数据库类型无效(仅支持Oracle和DB2),dbType="+dbType);
}
StringBuffer generateSQL = new StringBuffer(sql);
for(int i=0;itableNames.length;i++){
generateSQL.append(" '");
generateSQL.append(tableNames[i].toUpperCase());//注意须转换成大写
generateSQL.append("',");
}
generateSQL.deleteCharAt(generateSQL.length()-1);
generateSQL.append(")");
ListMapString, Object dataSet = DBTool.executeQuery(generateSQL.toString());
//启用or停止查询出的外键约束
for(int i=0;idataSet.size();i++){
MapString, Object record = dataSet.get(i);
IteratorEntryString, Object itor = record.entrySet().iterator();
while(itor.hasNext())
{
EntryString, Object e = itor.next();
DBTool.executeUpdate(e.getValue().toString(),UpdateType.ALTER);
}
}
ORACLE语句怎么删除外键约束,只是删约束,不是删表
可用sql语句删除外键约束,也可以用其他工具操作(如PL/SQL)。
一、语句删除:
alter table 表名 drop constraint 外键名;
二、工具删除:
1、登录PL/SQL到指定数据库。
2、左侧找到Tables选项。
3、找到相应的表,如emp,然后找到Foreign keys选项。
4、右键显示出来的外键,点击“删掉”即可。
本文名称:oracle怎么禁用外键,oracle添加外键语句
网站地址:http://azwzsj.com/article/hcesdc.html