导航:首页 > 数据处理 > 怎么停止数据库主键约束

怎么停止数据库主键约束

发布时间:2022-12-27 04:42:51

数据库可以没有主键么,如果可以怎么取消已有的主键

可以没有主键,要是想取消的话 就修改一下字段,让那个为主键的变成平常的字段,然后就可以取消了,

⑵ 数据库可以没有主键么,如果可以怎么取消已有的主键

可以没有主键。
不过,无论从程序方面还是数据库优化管理的方面,没有主键的表都是一个失败的表。
从数据库设计上说,绝大多数情况下,一个表都应该有主键。如果没有主键,很可能你的数据建模是有问题的。

⑶ 如何启用和禁用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;i<tableNames.length;i++){
generateSQL.append(" '");
generateSQL.append(tableNames[i].toUpperCase());//注意须转换成大写
generateSQL.append("',");
}
generateSQL.deleteCharAt(generateSQL.length()-1);
generateSQL.append(")");
List<Map<String, Object>> dataSet = DBTool.executeQuery(generateSQL.toString());

//启用or停止查询出的外键约束
for(int i=0;i<dataSet.size();i++){
Map<String, Object> record = dataSet.get(i);
Iterator<Entry<String, Object>> itor = record.entrySet().iterator();
while(itor.hasNext())
{
Entry<String, Object> e = itor.next();
DBTool.executeUpdate(e.getValue().toString(),UpdateType.ALTER);
}
}

⑷ 数据库不能删除主键约束吗

删除主键约束方法 在服务器资源管理器中,选择包含该主键的表,再从“数据”菜单中单击“打开表定义”。该表在“表设计器”中打开。 在表网格中右击包含该主键的行,然后选择“移除主键”以将该设置从启用切换到禁用。

⑸ 如何用sql语句删除主键约束,并且在修改了列

alter table t drop constraint 主键的约束名

⑹ 用SQL语句如何删除表的主键约束

/*撤消主键*/
alter table [Student] drop primary key (S_id)
/*增加主键*/
alter table [Student] add primary key (S_id)

⑺ 如何用sql语句实现删除主键约束的功能

如何用sql语句实现删除主键约束的功能
/*撤消主键*/
alter table [Student] drop primary key (S_id)
/*增加主键*/
alter table [Student] add primary key (S_id)

阅读全文

与怎么停止数据库主键约束相关的资料

热点内容
大数据什么是绩效考核 浏览:622
旅游优惠信息哪里看 浏览:600
高速倒车多久会收到信息 浏览:401
杭州联通信息中心电话是多少 浏览:356
电力系统单机信息上传是怎么工作 浏览:68
东凤最大的市场是哪个 浏览:97
杭州地铁技术管理人员待遇怎么样 浏览:176
工厂合资技术分多少 浏览:986
罗马交易所的币是哪里来的 浏览:343
为什么交易猫发货了没反应 浏览:768
哪些渠道可以获取到新店信息 浏览:280
系统技术升级中请稍后登录什么意思 浏览:334
产权转让怎么交易 浏览:754
如何看懂产品的分析 浏览:958
如何把手薄数据做成表格 浏览:934
数据分析设计需要什么软件 浏览:80
小程序中wps编辑完成后如何保存 浏览:729
如何地推卖产品 浏览:228
证券交易所为什么是会员制 浏览:788
怎么下载网站程序 浏览:919