oracle 主键约束复制,Oracle主键及约束
Oracle主鍵Primary Key包含非空約束及唯一約束。
添加主鍵的語(yǔ)句
alter table table_nameadd constraint cons_name primary key(col_name);
查看主鍵是否被創(chuàng)建成功
select dbms_metadata.get_ddl(‘OBJECT_TYPE‘,‘NAME‘,‘SCHEMA‘) from dual;
OBJECT_TYPE (TABLE,PARTITION,INDEX......)
NAME (OBJECT_NAME)
SCHEMA?(INSTANCE)
對(duì)應(yīng)object表中的相應(yīng)內(nèi)容:
select object_type,object_name,owner from dba_objects
獲取到的DDL語(yǔ)句中表示已經(jīng)創(chuàng)建了主鍵列,該列位于CUSTTEL上CREATE?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"
(?"CUSTTEL"?VARCHAR2(20),
"USERLEVEL"?NUMBER(*,0)?NOT?NULL?ENABLE,
"CUSTID"?VARCHAR2(20)
)?PCTFREE?10?PCTUSED?40?INITRANS?1?MAXTRANS?255?NOCOMPRESS?LOGGING
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"?;
ALTER?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"?MODIFY?("USERLEVEL"?NOT?NULL?ENABLE);
創(chuàng)建主鍵后發(fā)現(xiàn)該表增加了唯一索引及主鍵字段CREATE?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"
(?"CUSTTEL"?VARCHAR2(20),
"USERLEVEL"?NUMBER(*,0)?NOT?NULL?ENABLE,
"CUSTID"?VARCHAR2(20),
CONSTRAINT?"PK_PRIMARY"?PRIMARY?KEY?("CUSTTEL")
USING?INDEX?PCTFREE?10?INITRANS?2?MAXTRANS?255
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"??ENABLE
)?PCTFREE?10?PCTUSED?40?INITRANS?1?MAXTRANS?255?NOCOMPRESS?LOGGING
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"?;
CREATE?UNIQUE?INDEX?"NEWCCS"."PK_PRIMARY"?ON?"NEWCCS"."USERLEVELBYTEL_BAK"?("CUSTTEL")
PCTFREE?10?INITRANS?2?MAXTRANS?255
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"?;
ALTER?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"?ADD?CONSTRAINT?"PK_PRIMARY"?PRIMARY?KEY?("CUSTTEL")
USING?INDEX?PCTFREE?10?INITRANS?2?MAXTRANS?255
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"??ENABLE;
ALTER?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"?MODIFY?("USERLEVEL"?NOT?NULL?ENABLE);
驗(yàn)證:
反復(fù)向表中插入數(shù)據(jù) insert into userlevelbytel values(‘10010‘,‘3‘,‘ ‘);
出現(xiàn)如下錯(cuò)誤提示(唯一約束錯(cuò)誤):
ORA-00001: unique constraint (NEWCCS.PK_PRIMARY) violated
插入空值 insert into userlevelbytel values(‘‘,‘3‘,‘ ‘);
出現(xiàn)如下錯(cuò)誤提示(唯一約束錯(cuò)誤):
ORA-01400: cannot insert NULL into ("NEWCCS"."USERLEVELBYTEL_BAK"."CUSTTEL")
單獨(dú)添加唯一約束對(duì)比區(qū)別
刪除該表主鍵:
alter table userlevelbytel_bak drop constraint pk_primary;CREATE?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"
(?"CUSTTEL"?VARCHAR2(20),
"USERLEVEL"?NUMBER(*,0)?NOT?NULL?ENABLE,
"CUSTID"?VARCHAR2(20),
CONSTRAINT?"UNIQUE_CUSTTEL"?UNIQUE?("CUSTTEL")
USING?INDEX?PCTFREE?10?INITRANS?2?MAXTRANS?255?COMPUTE?STATISTICS
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"??ENABLE
)?PCTFREE?10?PCTUSED?40?INITRANS?1?MAXTRANS?255?NOCOMPRESS?LOGGING
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"?;
CREATE?UNIQUE?INDEX?"NEWCCS"."UNIQUE_CUSTTEL"?ON?"NEWCCS"."USERLEVELBYTEL_BAK"?("CUSTTEL")
PCTFREE?10?INITRANS?2?MAXTRANS?255?COMPUTE?STATISTICS
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"?;
ALTER?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"?MODIFY?("USERLEVEL"?NOT?NULL?ENABLE);
ALTER?TABLE?"NEWCCS"."USERLEVELBYTEL_BAK"?ADD?CONSTRAINT?"UNIQUE_CUSTTEL"?UNIQUE?("CUSTTEL")
USING?INDEX?PCTFREE?10?INITRANS?2?MAXTRANS?255?COMPUTE?STATISTICS
STORAGE(INITIAL?65536?NEXT?1048576?MINEXTENTS?1?MAXEXTENTS?2147483645
PCTINCREASE?0?FREELISTS?1?FREELIST?GROUPS?1?BUFFER_POOL?DEFAULT)
TABLESPACE?"NEWCCS"??ENABLE;
可以看到唯一約束被創(chuàng)建
測(cè)試:
反復(fù)插入非空記錄:
ORA-00001: unique constraint (NEWCCS.UNIQUE_CUSTTEL) violated
反復(fù)插入空記錄:
select * from userlevelbytel_bak where custtel is null;
查詢結(jié)果為多個(gè)重復(fù)的空記錄
這里面可以看出唯一約束僅對(duì)非空值進(jìn)行約束,而在Oracle中NULL值無法比較,因此即使反復(fù)插入,唯一約束也無法限制,但在組合約束條件下,比如(A,B,NULL)則是可以進(jìn)行比較的。
舉例:
alter table userlevelbytel_bak add constraint unique_custtel unique(custtel,userlevel);
反復(fù)插入空記錄:
ORA-00001: unique constraint (NEWCCS.UNIQUE_CUSTTEL) violated
原文:http://onlinekof2001.blog.51cto.com/3106724/1582962
總結(jié)
以上是生活随笔為你收集整理的oracle 主键约束复制,Oracle主键及约束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是场外配资?场外配资是怎么操作的?
- 下一篇: ANSI X9.19 MAC算法介绍