ITPub博客

首页 > 数据库 > Oracle > 修改表的主键:从有到无再到有

修改表的主键:从有到无再到有

原创 Oracle 作者:skyin_1603 时间:2016-10-13 00:32:02 0 删除 编辑
修改一个表的主键:从 有主键--无主键--有主键 的过程演绎:
有效解决因为CTAS方式备份而改变表主键约束导致后期无主键的情况。
步骤如下:

--查看表emp的表结构:
SQL> desc emp;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)
 
 --查看用户下的约束:
 SQL> col owner for a10;
SQL> select OWNER,CONSTRAINT_NAME
  2  from user_constraints;

OWNER      CONSTRAINT_NAME
---------- ------------------------------
SCOTT      FK_DEPTNO
SCOTT      PK_EMP
SCOTT      PK_DEPT
SCOTT      SYS_C0011992
SCOTT      SYS_C0011993
SCOTT      SYS_C0011994
SCOTT      SYS_C0011995
SCOTT      SYS_C0011996
SCOTT      SYS_C0011997
9 rows selected.
可看到表emp的主键PK_EMP。
 
-- 通过CTAS方式从表emp创建表t3:
 SQL> create table t3 as 
  2  select * from emp;
Table created.

--查看表t3表结构:
SQL> desc t3;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                              NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2) 
可看到没有任何约束,只复制了表结构
 
-- 给表t3添加主键:
 SQL> alter table t3 add constraint t3_pk primary key(empno);
Table altered.


--再次查看表t3的表结构:
SQL> desc t3;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)
 
--再次查看用户下的约束:
 SQL> select OWNER,CONSTRAINT_NAME
  2   from user_constraints;


OWNER      CONSTRAINT_NAME
---------- ------------------------------
SCOTT      FK_DEPTNO
SCOTT      T3_PK
SCOTT      PK_EMP
SCOTT      PK_DEPT
SCOTT      SYS_C0011992
SCOTT      SYS_C0011993
SCOTT      SYS_C0011994
SCOTT      SYS_C0011995
SCOTT      SYS_C0011996
SCOTT      SYS_C0011997
10 rows selected.
相比上一次,user增加了一个约束,

--查看表t3的数据:
SQL> select empno,ename
  2  from emp
  3  where deptno = 30;

     EMPNO ENAME
---------- ----------
      7499 ALLEN
      7521 WARD
      7654 MARTIN
      7698 BLAKE
      7844 TURNER
      7900 JAMES
6 rows selected.

--尝试插入一条重复主键empno的数据:
SQL> insert into t3 (empno,ename) values(7900,'SUXING');
insert into t3 (empno,ename) values(7900,'SUXING')
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.T3_PK) violated

看见报错,因为主键值empno=7900重复,则添加的主键约束t3_pk生效。


--尝试插入一天主键值不重复的数据:
SQL> insert into t3 (empno,ename) values(7911,'SUXING');
1 row created.
插入成功。

由此可知,如果知道该备份方式会改变表丢失约束的情况,可以主动重新改表
添加主键,恢复表原来的表结构与约束。但不提倡经常做这样的事情。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2126203/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 监听的配置
请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215118