Oracle主键约束

一 作用
确保表当中每一行数据的唯一性
 
二 主键特点
非空 唯一
一张表中只能设计一个主键约束
主键约束可以由多个字段构成,这种情况被称为联合主键或复合主键
 
三 主键约束
1、在创建表时设置主键约束
CREATE TABLE tabl_name(
column_name datatype PRIMARY_KEY,...
)
  1. SQL> create table userinfo_p
  2. 2(id number(6,0) primary key,
  3. 3 username varchar2(20),
  4. 4 userpwd varchar2(20));
  5. 表已创建。
  6. SQL> desc userinfo_p
  7. 名称是否为空?类型
  8. -----------------------------------------------------------------------------
  9. ID NOT NULL NUMBER(6)
  10. USERNAME VARCHAR2(20)
  11. USERPWD VARCHAR2(20)
CONSTRAINT constraint_name
PRIMARY KEY(column_name1,...)
  1. SQL> create table userinfo_p1(
  2. 2 id number(6,0),
  3. 3 username varchar2(20),
  4. 4 userpwd varchar2(20),
  5. 5 constraint pk_id_username primary key(id,username));
  6. 表已创建。
  7. SQL> desc userinfo_p1;
  8. 名称是否为空?类型
  9. -----------------------------------------------------------------------------
  10. ID NOT NULL NUMBER(6)
  11. USERNAME NOT NULL VARCHAR2(20)
  12. USERPWD VARCHAR2(20)
  13. SQL> desc user_constraints
  14. 名称是否为空?类型
  15. -----------------------------------------------------------------------------
  16. OWNER VARCHAR2(30)
  17. CONSTRAINT_NAME NOT NULL VARCHAR2(30)
  18. CONSTRAINT_TYPE VARCHAR2(1)
  19. TABLE_NAME NOT NULL VARCHAR2(30)
  20. SEARCH_CONDITION LONG
  21. R_OWNER VARCHAR2(30)
  22. R_CONSTRAINT_NAME VARCHAR2(30)
  23. DELETE_RULE VARCHAR2(9)
  24. STATUS VARCHAR2(8)
  25. DEFERRABLE VARCHAR2(14)
  26. DEFERRED VARCHAR2(9)
  27. VALIDATED VARCHAR2(13)
  28. GENERATED VARCHAR2(14)
  29. BAD VARCHAR2(3)
  30. RELY VARCHAR2(4)
  31. LAST_CHANGE DATE
  32. INDEX_OWNER VARCHAR2(30)
  33. INDEX_NAME VARCHAR2(30)
  34. INVALID VARCHAR2(7)
  35. VIEW_RELATED VARCHAR2(14)
  36. SQL>select constraint_name from user_constraints where table_name='USERINFO_P1';
  37. CONSTRAINT_NAME
  38. ------------------------------
  39. PK_ID_USERNAME
  40. SQL>select constraint_name from user_constraints where table_name='USERINFO_P';
  41. CONSTRAINT_NAME
  42. ------------------------------
  43. SYS_C0011056
 
2、在修改表时添加主键约束
ADD CONSTRAINT constraint_name
PRIMARY KEY(column_name1,...);
  1. SQL> alter table userinfo
  2. 2 add constraint pk_id primary key(id);
  3. 表已更改。
  4. SQL> desc user_constraints
  5. 名称是否为空?类型
  6. -----------------------------------------------------------------------------
  7. OWNER VARCHAR2(30)
  8. CONSTRAINT_NAME NOT NULL VARCHAR2(30)
  9. CONSTRAINT_TYPE VARCHAR2(1)
  10. TABLE_NAME NOT NULL VARCHAR2(30)
  11. SEARCH_CONDITION LONG
  12. R_OWNER VARCHAR2(30)
  13. R_CONSTRAINT_NAME VARCHAR2(30)
  14. DELETE_RULE VARCHAR2(9)
  15. STATUS VARCHAR2(8)
  16. DEFERRABLE VARCHAR2(14)
  17. DEFERRED VARCHAR2(9)
  18. VALIDATED VARCHAR2(13)
  19. GENERATED VARCHAR2(14)
  20. BAD VARCHAR2(3)
  21. RELY VARCHAR2(4)
  22. LAST_CHANGE DATE
  23. INDEX_OWNER VARCHAR2(30)
  24. INDEX_NAME VARCHAR2(30)
  25. INVALID VARCHAR2(7)
  26. VIEW_RELATED VARCHAR2(14)
  27. SQL>select constraint_name from user_constraints where table_name='USERINFO';
  28. CONSTRAINT_NAME
  29. ------------------------------
  30. PK_ID
3、更改约束名称
RENAME CONSTRAINT old_name
TO new_name
  1. SQL> alter table userinfo
  2. 2 rename constraint pk_id to new_pk_id;
  3. 表已更改。
  4. SQL>select constraint_name from user_constraints where table_name='USERINFO';
  5. CONSTRAINT_NAME
  6. ------------------------------
  7. NEW_PK_ID
4、删除主键约束
DISABLE|ENABLE CONSTRAINT constraint_name
  1. SQL> alter table userinfo
  2. 2 disable constraint new_pk_id;
  3. 表已更改。
  4. SQL>select constraint_name,status from user_constraints where table_name='USERINFO';
  5. CONSTRAINT_NAME STATUS
  6. --------------------------------------
  7. NEW_PK_ID DISABLED
DROP CONSTRAINT constraint_name
  1. SQL> alter table userinfo
  2. 2 drop constraint new_pk_id;
  3. 表已更改。
  4. SQL>select constraint_name,status from user_constraints where table_name='USERINFO';
  5. 未选定行
DROP PRIMARY KEY[CASCARDE]
CASCARDE用于级联删除。
  1. SQL> desc userinfo_p
  2. 名称是否为空?类型
  3. -----------------------------------------------------------------------------
  4. ID NOT NULL NUMBER(6)
  5. USERNAME VARCHAR2(20)
  6. USERPWD VARCHAR2(20)
  7. SQL> alter table userinfo_p
  8. 2 drop primary key;
  9. 表已更改。
  10. SQL> desc userinfo_p
  11. 名称是否为空?类型
  12. -----------------------------------------------------------------------------
  13. ID NUMBER(6)
  14. USERNAME VARCHAR2(20)
  15. USERPWD VARCHAR2(20)

猜你喜欢

转载自cakin24.iteye.com/blog/2388736