精华内容
下载资源
问答
  • 这种方式的效果alter的方式是一样的 以上内容就是来自于小编为大家分享的关于Oracle如何添加主键约束方面的知识,同时也希望小编所为大家分享的知识能够为大家起到帮助,那么如果大家还想要了解更多关于其他方面的...

    工具/材料

    SQL Developer 操作方法 01

    首先打开SQL Developer软件,找一个没有主键约束的表,如下图所示

    621f517043e318286828ff481a2b336c.png 02

    然后我们新建一个查询,在界面中输入如下的约束修改语句,如下图所示,主要通过add constranint来添加约束

    921a9b08bdb7c4251a70aa161a283e15.png 03

    编写完约束添加语句以后,点击工具栏中的执行按钮,如下图所示,如果输出栏显示已变更则证明主键约束创建成果

    161014424b40ad99bac98e33fcb4e6b8.png 04

    然后我们进入STUDENT表的约束添加页中可以看到,我们加的主键约束已经添加进去了,如下图所示

    514191f62e25c87efa6acc0aad2c81f0.png 05

    另外,创建表的时候可以直接添加主键约束,如下图所示,直接在表创建语句中添加constraint即可

    38d36dd42e5c07a2902d1d2994a3e712.png 06

    表创建完以后,记得在左侧刷新数据库信息,如下图所示,因为你创建的信息不刷新的话不会更新

    9dd98697b22ae76b7aae84080363e6cd.png 07

    最后打开你所创建的表,看到你添加的主键约束已经加入进来了,这种方式的效果alter的方式是一样的

    9236f8e7287bf63a8c2a8c264fbcf2f1.png

    以上内容就是来自于小编为大家分享的关于Oracle如何添加主键约束方面的知识,同时也希望小编所为大家分享的知识能够为大家起到帮助,那么如果大家还想要了解更多关于其他方面的知识,也欢迎小编对站长进行留言,我们将会听取用户们的建议,让本站越做越好。

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,多谢。

    展开全文
  • 主键用唯一索引+主键约束两步骤来创建,可直接变更为唯一索引 唯一索引用普通索引+唯一约束两步骤来创建,可以直接变更为普通索引 主键不同创建方式,不同的ddl变更结果:测试表如下 create table TEST01 ( ...

    经常有开发人员找DBA,需要把唯一索引改为普通索引,或者把主键改为唯一索引或普通索引...

    主键属性:普通索引+唯一约束+not null约束 或者唯一索引+not null约束

    唯一索引属性:普通索引+唯一约束

     

    最佳实践:

    主键用唯一索引+主键约束两步骤来创建,可直接变更为唯一索引

    唯一索引用普通索引+唯一约束两步骤来创建,可以直接变更为普通索引

     

    主键不同创建方式,不同的ddl变更结果:测试表如下

    create table TEST01
    (
      col_date date,
      col2_str VARCHAR2(100),
      col3_str VARCHAR2(40),
      col4_str VARCHAR2(40),
      col5_str VARCHAR2(40)
    );

    1)、直接添加主键约束

    alter table TEST01 add constraint PK_TEST01 primary key (COL_DATE);
    --查看该表上索引情况
    set linesize 400
    col owner for a10
    col index_name for a20
    col index_type for a10
    col table_owner for a10
    col table_name for a20
    col uniqueness for a10
    col constraint_name for a20
    col constraint_type for a10
    col index_owner for a10
    col STATUS for a10
    select owner,index_name,index_type,table_owner,table_name,uniqueness from DBA_INDEXES where table_name='TEST01';
    
    OWNER      INDEX_NAME           INDEX_TYPE TABLE_OWNE TABLE_NAME           UNIQUENESS
    ---------- -------------------- ---------- ---------- -------------------- ----------
    SCOTT      PK_TEST01            NORMAL     SCOTT      TEST01               UNIQUE
    --查看下该表上约束情况
    OWNER      CONSTRAINT_NAME      CONSTRAINT TABLE_NAME           INDEX_OWNE INDEX_NAME           STATUS
    ---------- -------------------- ---------- -------------------- ---------- -------------------- ----------
    SCOTT      PK_TEST01            P          TEST01               SCOTT      PK_TEST01            ENABLED
    可以看到直接添加主键约束后,Oracle会自动帮你创建一个和约束名相同的唯一索引,并且添加了主键约束。

    能否把主键直接变更为唯一索引?

    alter table test01 disable constraint PK_TEST01;
    --检查索引和约束情况
    select owner,index_name,index_type,table_owner,table_name,uniqueness from DBA_INDEXES where table_name='TEST01';
    
    no rows selected
    select t.owner,t.constraint_name,t.constraint_type,t.table_name,t.index_owner,t.index_name,STATUS  from dba_constraints t where t.table_name='TEST01';
    
    OWNER      CONSTRAINT_NAME      CONSTRAINT TABLE_NAME           INDEX_OWNE INDEX_NAME           STATUS
    ---------- -------------------- ---------- -------------------- ---------- -------------------- ----------
    SCOTT      PK_TEST01            P          TEST01                                               DISABLED
    可以看到没有索引了

    结论:不能直接变更,禁用/删除主键约束后,会发现系统自动创建的唯一索引消失。

     

    2)、创建唯一索引+主键约束

    alter table test01 drop constraint PK_TEST01;
    create unique index scott.uidx_col_date on scott.test01(col_date);
    alter table TEST01 add constraint PK_TEST01 primary key (COL_DATE);
    --检查索引和约束情况
    select owner,index_name,index_type,table_owner,table_name,uniqueness from DBA_INDEXES where table_name='TEST01';
    
    OWNER      INDEX_NAME           INDEX_TYPE TABLE_OWNE TABLE_NAME           UNIQUENESS
    ---------- -------------------- ---------- ---------- -------------------- ----------
    SCOTT      UIDX_COL_DATE        NORMAL     SCOTT      TEST01               UNIQUE
    
    select t.owner,t.constraint_name,t.constraint_type,t.table_name,t.index_owner,t.index_name,STATUS  from dba_constraints t where t.table_name='TEST01';
    
    OWNER      CONSTRAINT_NAME      CONSTRAINT TABLE_NAME           INDEX_OWNE INDEX_NAME           STATUS
    ---------- -------------------- ---------- -------------------- ---------- -------------------- ----------
    SCOTT      PK_TEST01            P          TEST01               SCOTT      UIDX_COL_DATE        ENABLED
    可以看到主键约束中使用到了创建的唯一索引

    能否把主键直接变更为唯一索引?

    alter table test01 disable constraint PK_TEST01;
    --检查索引和约束情况
    select owner,index_name,index_type,table_owner,table_name,uniqueness from DBA_INDEXES where table_name='TEST01';
    
    OWNER      INDEX_NAME           INDEX_TYPE TABLE_OWNE TABLE_NAME           UNIQUENESS
    ---------- -------------------- ---------- ---------- -------------------- ----------
    SCOTT      UIDX_COL_DATE        NORMAL     SCOTT      TEST01               UNIQUE
    
    select t.owner,t.constraint_name,t.constraint_type,t.table_name,t.index_owner,t.index_name,STATUS  from dba_constraints t where t.table_name='TEST01';
    
    OWNER      CONSTRAINT_NAME      CONSTRAINT TABLE_NAME           INDEX_OWNE INDEX_NAME           STATUS
    ---------- -------------------- ---------- -------------------- ---------- -------------------- ----------
    SCOTT      PK_TEST01            P          TEST01                                               DISABLED
    可以看到创建的唯一索引还在的

    结论:可以直接变更,禁用/删除主键约束后,会发现分开创建的唯一索引还在。

     

    和主键创建方式类似,唯一索引也可以用普通索引+唯一约束来创建,好处是可以禁用/删除唯一约束,直接变更为普通索引

    create index scott.idx_col_date on scott.test01(col_date);
    alter table TEST01 add constraint UK_TEST01 unique (COL_DATE);
    --检查索引和约束情况
    select owner,index_name,index_type,table_owner,table_name,uniqueness from DBA_INDEXES where table_name='TEST01';
    
    OWNER      INDEX_NAME           INDEX_TYPE TABLE_OWNE TABLE_NAME           UNIQUENESS
    ---------- -------------------- ---------- ---------- -------------------- ----------
    SCOTT      IDX_COL_DATE         NORMAL     SCOTT      TEST01               NONUNIQUE
    
    select t.owner,t.constraint_name,t.constraint_type,t.table_name,t.index_owner,t.index_name,STATUS  from dba_constraints t where t.table_name='TEST01';
    
    OWNER      CONSTRAINT_NAME      CONSTRAINT TABLE_NAME           INDEX_OWNE INDEX_NAME           STATUS
    ---------- -------------------- ---------- -------------------- ---------- -------------------- ----------
    SCOTT      UK_TEST01            U          TEST01               SCOTT      IDX_COL_DATE         ENABLED

     

    展开全文
  • oracle“删除”主键约束的方法有两个1:alter table 表名 drop primary key;这个是把主键从表中去除,而不是真正的删除主键例子:创建表:create table test_table_students (student_id number not null,student_...

    oracle“删除”主键约束的方法有两个

    1:alter table 表名 drop primary key;

    这个是把主键从表中去除,而不是真正的删除主键

    例子:

    创建表:create table test_table_students (student_id number not null,student_name varchar(20) not null,student_telephone long not null);

    创建主键:alter table test_table_students add constraint test_key_students primary key (student_id,student_name);

    第一次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (1,'alice',136133);

    第二次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (1,'peter',136133); 提示主键约束

    第三次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (2,'alice',136133); 提示主键约束

    删除主键约束:alter table test_table_students drop primary key;

    第四次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (1,'peter',136134); 插入成功

    第五次插入数据:insert into test_table_students (student_id,student_name,student_telephone) values (2,'alice',136135); 插入成功

    删除刚才两行数据:delete from test_table_students where student_telephone=136134;delete from test_table_students where student_telephone=136135;

    第二次添加主键约束:alter table test_table_students add constraint test_key_students primary key (student_id,student_name);约束名被占用

    2:alter table 表名 drop constraint 约束名;

    这个是把主键删除,可以再次添加同名主键

    例子:

    创建表:create table new_table_students (student_id number not null,student_name varchar(20) not null,student_telephone long not null);

    创建主键:alter table new_table_students add constraint new_key_students primary key (student_id,student_name);

    第一次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (1,'alice',136133);

    第二次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (1,'peter',136133); 提示主键约束

    第三次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (2,'alice',136133); 提示主键约束

    删除主键约束:alter table new_table_students drop constraint new_key_students;

    第四次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (1,'peter',136134); 插入成功

    第五次插入数据:insert into new_table_students (student_id,student_name,student_telephone) values (2,'alice',136135); 插入成功

    删除刚才两行数据:delete from new_table_students where student_telephone=136134;delete from new_table_students where student_telephone=136135;

    第二次添加主键约束:alter table new_table_students add constraint new_key_students primary key (student_id,student_name);再次添加成功

    展开全文
  • 1、主键约束作用:确保表中每一行数据是唯一的,要求非空且唯一2、一张表中只能设置一个主键约束主键约束可以由多个字段构成(联合主键或复合主键)。1、在创建表时设置主键约束CREATE TABLE table_name (column1 ...

    1、主键约束作用:

    确保表中每一行数据是唯一的,要求非空且唯一

    2、一张表中只能设置一个主键约束;

    主键约束可以由多个字段构成(联合主键或复合主键)。

    1、在创建表时设置主键约束

    CREATE TABLE table_name (

    column1 datatype PRIMATY KEY,

    ...);

    f7a1122d17660a7fd172d473884d8d09.png

    创建联合主键:

    CREATE TABLE table_name (

    column1 datatype,

    ...)

    CONSTRAINT constraint_name PRIMARY KEY (column1,column2,..)

    a769870a0e9d9c01dfdb612946bdf87c.png

    通过user_constraints数据字典查询表中主键的名称:

    8431d0ce65b887f920c8f071b52cf265.png

    2、修改表时添加主键约束

    ALTER TABLE table_name

    ADD CONSTRAINT contraint_name PRIMARY KEY (column1,column2...);

    --修改添加主键约束时,表中最好没数据,或现有数据改字段不为空

    4f447726a75e70f1d8f0959d12049454.png

    3、更改约束的名称

    ALTER TABLE table_name

    RENAME CONSTRAINT old_contraintname  TO new_constraintname;

    dde8fe7b778727bf907bd0709b56b936.png

    4、删除约束

    1)禁用或启用主键约束

    ALTER TABLE table_name

    DISABLE |ENABLE CONSTRAINT constraint_name;

    6d1a4d82de525c0b5209d0b658ace08b.png

    2)永久删除主键

    ALTER TABLE table_name

    DROP CONSTRAINT constraint_name;

    3074f5c14edee9495f1194a824635e10.png

    3)通过primary key的方式也可以删除主键约束

    ALTER TABLE table_name

    DROP PRIMARY KEY;

    36720253348de6b0b5fac676a33e2eac.png

    【oracle】约束之主键约束

    标签:user   column   table   strong   主键   http   修改   primary   new

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:https://www.cnblogs.com/xlzhangq/p/13227830.html

    展开全文
  • 1、分别用两种方法创建主键createtabletest1(idnumber,namevarchar2(10));insertintotest1values(1,'t1');insertintotest1values(2,'t2');commit;altertabletest1addconstraintpk_test1primarykey(id);...
  • Oracle主键约束

    2021-05-07 07:45:00
    添加主键的语句alter table table_nameadd constraint cons_name primary key(col_name);查看主键是否被创建成功select dbms_metadata.get_ddl(‘OBJECT_TYPE‘,‘NAME‘,‘SCHEMA‘) from dual;OBJECT_TYPE ...
  • 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。...接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。SQL> select * from v$version;BANNER---------------------...
  • oracle主键约束添加删除1、创建表的同时创建主键约束一、无命名create table accounts (accounts_number number primary key,accounts_balance number);二、有命名create table accounts (accounts_number number ...
  • Oracle 添加主键和索引

    千次阅读 2021-05-08 00:35:31
    数据的主键和索引一般情况下都是必须...一、创建表的同时创建主键约束(1)无命名create table student (studentid int primary key not null,studentname varchar(8),age int);(2)有命名create table students (stud...
  • 1.主键约束: 一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。3.主键与Unique:...
  • 数据的主键和索引一般情况下都是必须...一、创建表的同时创建主键约束(1)无命名create table student (studentid int primary key not null,studentname varchar(8),age int);(2)有命名create table students (stud...
  • 一、前提 主键解释: 一个表的唯一关键字 比如一个学生表 学号不能重复且唯一 ,学号就是关键字,即为主键。 区别于外键: ...①建表时添加主键(yy为主键“ID”的主键名称) CREATE TABLE table_te
  • Oracle 删除主键

    2021-05-01 09:07:44
    1、创建表的同时创建主键约束(1)无命名CREATE TABLE STUDENT(STUDENT_ID INT PRIMARY KEY NOT NULL,STUDENT_NAME VARCHAR2(8),AGE INT);(2)有命名CREATE TABLE STUDENT (STUDENT_ID INT ,STUDENT_NAME VARCHAR2(8),...
  • 约束:控制你输入的具体值要满足的具体要求约束的作用:定义规则 你创建的表之后,可以定义那些字段必须输入,那些字段必须输入在某一个范围内的值,什么样...如果不想给非空插入之就需要设置默认值在修改表时添加非...
  • Oracle并行添加主键

    2021-05-01 07:08:19
    2.考虑先并行添加惟一性索引,再添加主键SQL> create unique index pk_t on t(object_id) parallel 2 online; Index createdSQL> alter table t add constraint pk_t primary key (object_id); Table ...
  • Oracle一直用了将近四年了,但是...除了知道主键是唯一性约束,并且创建主键Oracle自动创建主键索引外,其余知之甚少。今天要建一张表,主键是sequence,但是还有其他几个重要的字段,templateid,decltype,custo...
  • 作用:定义规则,确保数据完整性1,非空约束1.1在创建表时设置非空约束create table table_name(column _name datatype not null,)1.2在修改表时添加非空约束ALTER TABLE table_name MODIFY COLUMN_NAME datatype NOT...
  • oracle添加联合主键,oracle联合主键alter table tablename add constraint unionkeyname primary key (column1,column2);上面语句中:tablename为要添加联合约束的表unionkeyname为添加的联合约束的名称column1,...
  • SQL> desc tName Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VAR...
  • oracle删除主键查看主键约束及创建联合主键1,主键的删除ALTER TABLE TABLENAME DROP PRIMARY_KEY执行上面的SQL可以删除主键;如果不成功可以用ALTER TABLE TABLENAME DROP CONSTRAINTS COLUMN CASCADE; --删除约束...
  • oracle添加主键 primary key

    千次阅读 2021-05-03 04:14:48
    根据数据库三范式就是每个表建议要有主键,每个字段不可再分,表与之间不存在部分依赖数据库的优化首先考虑的也是主键主键会在对应的字段加唯一约束、加not null,建 索引怎么为表加主键呢1,建表同时SQL>...
  • 满意答案shilvmengl2014.03.24采纳率:40%等级:10已帮助:218人如果你是想在主键约束启用的情况下插入违约数据那是不可能的。可以考虑先禁掉约束,再插入违约数据,然后更改约束到enable novalidate状态。我做了个...
  • 1、创建表的同时创建主键约束(1)无命名 create table student ( studentid int primary key not null, studentname varchar(8), age int);(2)有命名 create table students ( studentid int , studentname varchar(8...
  • --班级表CREATE TABLE TCLASS(cl_id NUMBER,cl_name VARCHAR...--给TCLASS表添加主键ALTER TABLE TCLASS ADD CONSTRAINT PK_TCLASS_CL_IDPRIMARY KEY(cl_id);---学生表CREATE TABLE STUDENT(st_id VARCHAR2(30),--单...
  • 我有一些没有主键的列,并且要添加一个主键列.NAME Age-------------Peter 45Bob 25John 56Peter 45这很好,但我的客户使用数据库用户没有权限添加序列或触发器.我想阻止联系数十名DBA管理员来更改用户权限或运行我的...
  • 序列: CREATE SEQUENCE SEQ_a START WITH 1... 索引主键: ALTER TABLE a ADD CONSTRAINT pk_a PRIMARY KEY (id)USING INDEX TABLESPACE indx ; CREATE [UNIQUE] INDEX u_a_NAME ON a(name)LOGGINGTABLESPACE INDX ;
  • 主键约束(两个特性)1:主键必须写2:主键不可重复create table stu01(sid varchar(100),sname varchar2(100)--constraint PK_stu01_sid primary key (sid))--添加约束(主键)alter table stu01 add constraint PK_stu...
  • Oracle 创建主键,外键, check... 在创建表时创建约束://添加主键约束Create table userinfo (userid number(20)constraint pk_user primary key ,uname varchar(20));Create table userinfo(userid number(20),un...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,502
精华内容 11,800
关键字:

oracle添加主键约束