oracle某用户下,二张表,sx(学号,姓名),sy(学号,年龄),学号是主码,
现在新建一张表sx_sy(学号,姓名,年龄),建表sx_sy的时候没有定义主码,我想把表sx_sy的学号定义为主码,
但是,不论是用pl/sql,或者是sqlplus或者oracle的em,都无法成功。通过pl/sql更改 或者 在em中找到表sx_sy直接在约束条件中定义学号为主码,显示:“无法验证-违反主键”sqlplus中:alter table sx_sy add primary key(学号);提示是“无效的alter table选项”请问这是什么原因?怎样才能把sx_sy的学号属性改为主码呢?

解决方案 »

  1.   

    alter table sx_sy add constraint primary key(学号);另外,最好为该主键命个人类名,不要采用机器名。
      

  2.   

    无法验证-违反主键,sx_sy学号可能有重复值。
      

  3.   

    若是 有重复值 的原因,
    查找、删除重复值的sql语句分别怎么写呢?
      

  4.   

    http://dev.csdn.net/author/Rayfly/b850da865b3b4cc89008a2004dad56fc.html
      

  5.   

    其实我面临的是这样的问题:
    两张表,sx(a,b,c),sy(a,b,d),本来表sx中a是主键,表sy中b是主键、a是外码。
    我想把sy的主键改为a,这时就出现了“无法验证-违反主键”的问题了!
     
    按照后面的回复,我估计是sy中a的记录有重复(不知道对不对?),那么,我在sy表的b还是主键的情况下,查询、删除有重复记录a的sql怎么写呢?
    (4楼回复的链接中的几种方法好像都不能立即解决我面临的问题,麻烦依照sx,sy两张表详细写一写sql语句)谢谢了~