導航:首頁 > 數據處理 > 怎麼停止資料庫主鍵約束

怎麼停止資料庫主鍵約束

發布時間: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)

閱讀全文

與怎麼停止資料庫主鍵約束相關的資料

熱點內容
文昌海鮮市場有什麼 瀏覽:48
哪些人不能進行證券交易 瀏覽:191
機頂盒怎麼加程序 瀏覽:181
市場調研分哪些 瀏覽:622
房產中介收房子應該走什麼程序 瀏覽:208
c程序循環語句是什麼 瀏覽:177
海信電視哪個市場好 瀏覽:442
成熟的男人和程序員應該選哪個 瀏覽:587
信息量是怎麼算 瀏覽:778
大數據什麼是績效考核 瀏覽:622
旅遊優惠信息哪裡看 瀏覽:600
高速倒車多久會收到信息 瀏覽:401
杭州聯通信息中心電話是多少 瀏覽:356
電力系統單機信息上傳是怎麼工作 瀏覽:68
東鳳最大的市場是哪個 瀏覽:97
杭州地鐵技術管理人員待遇怎麼樣 瀏覽:176
工廠合資技術分多少 瀏覽:986
羅馬交易所的幣是哪裡來的 瀏覽:343
為什麼交易貓發貨了沒反應 瀏覽:768
哪些渠道可以獲取到新店信息 瀏覽:280