精华内容
下载资源
问答
  • Oracle添加主键、删除主键、修改主键

    万次阅读 多人点赞 2019-04-01 16:48:43
    二、回归主题,主键添加、删除等操作 1.有命名主键 1)有命名主键添加 2)有命名主键的删除 3)有命名主键的修改 2.无命名主键 1)无命名主键的创建 2)无命名主键的删除 3)无命名主键的修改 附加: ...

     

    目录

    一、前提

    二、回归主题,主键的添加、删除等操作

    1.有命名主键

    1)有命名主键的添加

    2)有命名主键的删除

    3)有命名主键的修改

    2.无命名主键

    1)无命名主键的创建

    2)无命名主键的删除

    3)无命名主键的修改

    附加:

    user_constraints 和user_cons_columns表的作用及其联系 

     

    一、前提

    主键解释:

           一个表的唯一关键字 比如一个学生表 学号不能重复且唯一 ,学号就是关键字,即为主键。

    区别于外键:

           外键就是跟其他表联系的字段 ,还是比如有一张学生表 还有一张选课表,这个时候要修改学生表中的学号 ,选课表里对应的就也得变,这样就需要给选课表加学号作为外键约束,这样当你修改学号时 所有外键关联的就都改了

    二、回归主题,主键的添加、删除等操作

    1.有命名主键

    1)有命名主键的添加

    ①建表时添加主键(yy为主键“ID”的主键名称)

    CREATE TABLE table_test(
    
    id INT NOT NULL,       --注意:主键必须非空
    
    name VARCHAR(20) NOT NULL,
    
    address VARCHAR(20),
    
    constraint yy PRIMARY KEY(id)
    
    );

    ②建表后添加主键

    alter table table_test add constraint yy primary key(id);
    公式:alter table 表名 add constraint yy primary key(主键1,主键2);

    2)有命名主键的删除

    ALTER TABLE table_test DROP CONSTRAINT yy;
    公式:ALTER TABLE 表名DROP CONSTRAINT 主键名;

    3)有命名主键的修改

    需先删除主键,再进行添加

    2.无命名主键

    1)无命名主键的创建

    ①建表时添加主键(主键“ID”的主键名称需要查询出来,下文有方法)

    CREATE TABLE table_test(
    
    id INT NOT NULL,       --注意:主键必须非空
    
    name VARCHAR(20) NOT NULL,
    
    address VARCHAR(20),
    
    PRIMARY KEY(id)
    
    );

    ②建表后添加主键

    alter table table_test add primary key (id);
    公式:alter table 表名 add primary key(主键字段1,主键字段2...); 

    2)无命名主键的删除

    ①先查出来主键名(constraint_name),user_cons_columns表会在文末给出解释

    SELECT t.* from user_cons_columns t where t.table_name  = 'TABLE_TEST' and t.position is not null;
    公式:SELECT t.* from user_cons_columns t where t.table_name  = '表名' and t.position is not null;   --表名必须大写,如:TABLE_TEST

    ②再执行删除的SQL

    ALTER TABLE table_test DROP CONSTRAINT SYS_C0056038;  
    公式:ALTER TABLE 表名 DROP CONSTRAINT 主键名;

    3)无命名主键的修改

    需先删除主键,再进行添加

    附加:

    user_constraints 和user_cons_columns表的作用及其联系 


            user_constraints:是表约束的视图,描述的是约束类型(constraint_type)是什么,属于哪些表(table_name),如果约束的类型为R(外键)的话,那么r_constraint_name字段存放的就是被引用主表中的主键约束名。   
            user_cons_columns:是表约束字段的视图,说明表中的和约束相关的列参与了哪些约束。这些约束有主键约束,外键约束,索引约束.
            两者可以通过(owner,constraint_name,table_name)关联 

     

    展开全文
  • oracle添加主键的四种方法:

    千次阅读 2020-08-25 11:54:13
    oracle添加主键的四种方法: 原创 Oracle 作者:ultradb 时间:2016-11-02 19:40:22 2827 0 oracle添加主键的四种方法: 列级,表级建立主键 drop table constraint_test; 1.create table constraint_test ( name_id ...

    oracle添加主键的四种方法:
    原创 Oracle 作者:ultradb 时间:2016-11-02 19:40:22 2827 0
    oracle添加主键的四种方法:
    列级,表级建立主键
    drop table constraint_test;
    1.create table constraint_test
    ( name_id number not null constraint cons_name_id primary key,
    old number )
    2.create table constraint_test
    ( name_id number primary key,
    old number )

    drop table constraint_test;
    3.create table constraint_test
    (
    name_id number not null,
    old number ,
    constraint cons_name_id primary key ( name_id )
    );

    drop table constraint_test;

    4.create table constraint_test
    (
    name_id number not null,
    old number
    );
    alter table constraint_test add constraint cons_name_id primary key ( name_id );

    外键

    drop table course ;
    drop table students ;
    create table students
    (code number ,
    name varchar2(10),
    country varchar2(30)
    );

    alter table students add constraint pk_st_cod primary key ( code);
    insert into students values(0001,‘zhangsan’,‘shanghai’);
    insert into students values(0002,‘lisi’,‘beijing’);
    insert into students values(0003,‘wangwu’,‘guangzhou’);

    create table course
    (id number,
    code number,
    name varchar2(10),
    subject varchar2(30)
    );
    alter table course add constraint pk_co_id primary key ( id);
    alter table course add constraint fk_co_st foreign key ( code) references students(code);
    alter table students add foreign key pk_co_id on id;
    inser into course(id,code,name,subject) values(1,001,‘zhangsan’,‘yuwen’);
    inser into course(id,code,name,subject) values(2,001,‘zhangsan’,‘shuxue’);

    展开全文
  • 经常有开发人员找DBA,需要把唯一索引改为普通索引,或者把主键改为唯一索引或普通索引... 主键属性:普通索引+唯一约束+not null约束 或者唯一索引+not null约束 唯一索引属性:普通索引+唯一约束 最佳实践: ...

    经常有开发人员找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添加主键约束语句

    千次阅读 2019-06-20 10:30:21
    今天在复习ORACLE,看到添加主键约束这一部分,如果在创建表的时候没有添加主键,那么可以通过语句来添加主键,如下: ALTER TABLE table_name ADD CONSTRAINTS constraint_name PRIMARY KEY(column_name); 我...
    今天在复习ORACLE,看到添加主键约束这一部分,如果在创建表的时候没有添加主键,那么可以通过语句来添加主键,如下:
     ALTER TABLE  table_name
     ADD CONSTRAINTS  constraint_name PRIMARY KEY(column_name);
    

    我看到这里我产生了一个疑惑,为什么这里要写一个constraint_name(constraint是约束的意思),想了一会没想通,但是知道看到了下面。
    当你 移除主键约束的时候语句是这样的:

    ALTER TABLE table_name
    DROP CONSTRAINT constraint_name;
    在这里豁然开朗,这个名字的设立可以对以后的约束的移除提供了方便,这样理解和会帮助记忆语法。
    另外,当我们遇到困难一筹莫展的时候,不如先保留往下再看看,有时候会有意想不到的结果。

    展开全文
  • --删除表主键 ALTER TABLE jw_jxrw_wxlsrwkcb DROP CONSTRAINT PK_JW_JXRW_WXLSRWKCB; --删除索引 ...--添加主键 -- Create/Recreate primary alter table jw_jxrw_wxlsrwkcb add constraint PK_JW_
  • oracle 创建id主键序列的 脚本 及 使用方式 oracle 创建id主键序列的 脚本 及 使用方式
  • 文章目录1 主键约束2 外键约束 1 主键约束 方式1:(推荐:简单、明了、建表时创建) create table scott.sex ( sex_code varchar2(2) constraint pk_sex_sex_code primary key, description varchar2(10) ); -- ...
  • 现象:oracle添加主键,却可以插入重复的情况 原因:oracle添加主键需要手动开启,不同于mysql。 解决方法:https://blog.csdn.net/wm5920/article/details/80755437
  • 简单的建表联系,包括主键外键,帮助新手快速熟悉建表的语句操作
  • oracle主键自增

    2014-05-23 14:39:04
    oracle 数据库主键自增脚本 --第一步,创建表 --第二步,创建自增序列 --第三步,创建触发器
  • 到此这篇关于Navicat Premium中Oracle创建主键自增的方法的文章就介绍到这了,更多相关Navicat Premium主键自增内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
  • Oracle创建主键并实现自增

    千次阅读 2018-08-02 18:46:14
    1、创建数据库表 设置主键 create table users(  userid number(10) primary key, /*主键,not null*/  username varchar2(20) ); 附 删除表:drop table users; 2、创建序列自增 CREATE SEQUENCE user_...
  • oracle对表添加主键约束的sql语句

    万次阅读 2017-02-27 08:57:46
    –创建主外键(可以在创建表的同时添加主外键约束,也可以  ...—–方法一:表创建的同时,添加主键约束 语法: create table 表名  (  列名1 数据类型及长度 constraint 主键名称(一般主键名称为”
  • oracle数据库中表添加主键约束

    万次阅读 2017-10-04 15:22:18
    –创建完成后再添加约束 )—–方法一:表创建的同时,添加主键约束语法:create table 表名 ( 列名1 数据类型及长度 constraint 主键名称(一般主键名称为”PK_”开头) primary key, 列名2 数据类型及长度 not ...
  • 原来表中午主键新增一个主键 – 增加一个ID字段 – Add/modify columns alter table tablename add id number; –创建自增序列 – Create sequence create SEQUENCE seq_tablename minvalue 1 maxvalue ...
  • Oracle创建主键的三种方式

    千次阅读 2021-03-05 10:11:58
    Oracle中创建主键,可以有几种方式。第一种,在建表的时候同时指定主键,SQL> create table t_pk_01 (id number, constraint pk_id...
  • Navicat Premium中Oracle创建主键自增 1.选中表进入设计,选择触发器, 触发器名称,混合不选,每行,出发前,插入时,启用 2.下面展示触发器代码。 // A code block BEGIN SELECT SEQ_EXAM_KNOWLEDGE_BASE....
  • 1、创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar(8), age int); (2)有命名 create table students ( studentid int , student...
  • Oracle中给表添加主键、外键

    千次阅读 2018-12-12 10:58:25
    一、创建表的同时创建主键约束 1、无命名 create table student ( studentid int primary key not null, studentname varchar(8), age int); 2、有命名 create table students ( studentid int , studentname ...
  • –创建主外键(可以在创建表的同时添加主外键约束,也可以 –创建完成后再添加约束 )
  • Oracle 添加主键和索引

    千次阅读 2010-07-15 18:06:00
    数据的主键和索引一般情况下都是必须的,特别是表有大量数据的时候,索引和主键更是必不可少,这样可以提供数据的查询效率; 一、创建表的同时创建主键约束 (1)无命名 create table student ...
  • Oracle增加修改删除字段/主键

    万次阅读 2016-11-04 23:20:35
    修改字段名称 alter table xgj rename ...3、字段有数据,当修改后的类型和原类型不兼容时 ,...3、向表中添加主键约束 alter table student add constraint pk_student primary key (studentid);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,751
精华内容 24,300
关键字:

oracle添加主键