精华内容
下载资源
问答
  • Oracle创建主键自增表
    2021-05-04 02:52:27

    Oracle创建主键自增表

    Oracle创建主键自增表

    1、创建表

    create table Test (

    userid number(10) NOT NULL primary key, /*主键,自动增加*/ username varchar2(20)

    );

    2、创建自动增长序列

    Create Sequence Test_Sequence

    Increment by 1 -- 每次加几个

    start with 1 -- 从1开始计数

    nomaxvalue -- 不设置最大值 ,设置最大值:maxvalue 9999 nocycle -- 一直累加,不循环

    cache 10;

    3、创建触发器

    Create trigger Test before

    insert on test for each row /*对每一行都检测是否触发*/ begin

    select Test_Sequence.nextval into:http://www.wendangwang.comerid from dual;

    end;

    / /*退出sqlplus行编辑*/

    4、提交

    commit;

    5、测试

    insert into Test (Username) values('test');

    更多相关内容
  • 到此这篇关于Navicat Premium中Oracle创建主键自增的方法的文章就介绍到这了,更多相关Navicat Premium主键自增内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
  • 1、创建表 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprimarykey,/*主键,自动增加*/ usernamevarchar2(20) ); 2、创建自动增长序列 代码如下: CREATESEQUENCETestIncrease_Sequence INCREMENTBY...
  • Oracle创建主键的三种方式

    千次阅读 2021-03-05 10:11:58
    Oracle创建主键,可以有几种方式。第一种,在建表的时候同时指定主键,SQL> create table t_pk_01 (id number, constraint pk_id...

    Oracle中创建主键,可以有几种方式。

    第一种,在建表的时候同时指定主键,

    SQL> create table t_pk_01 (id number, constraint pk_id_01 primary key(id));
    Table created.
    

    创建主键约束的同时,他会自动创建一个唯一索引,

    SQL> select table_name, constraint_name, constraint_type from user_constraints where table_name='T_PK_01';
    TABLE_NAME                     CONSTRAINT_NAME                C
    ------------------------------ ------------------------------ -
    T_PK_01                        PK_ID_01                       P
    
    
    SQL> select table_name, index_name, uniqueness from user_indexes where table_name='T_PK_01';
    TABLE_NAME                     INDEX_NAME                     UNIQUENES
    ------------------------------ ------------------------------ ---------
    T_PK_01                        PK_ID_01                       UNIQUE
    

    第二种,创建表,再alter table增加主键约束,

    SQL> create table t_pk_02 (id number);
    Table created.
    
    
    SQL> alter table t_pk_02 add constraint pk_id_02 primary key (id);
    Table altered.
    

    我们从10046来看下alter table到底做了什么,

    SQL> alter session set events '10046 trace name context forever, level 12';
    Session altered.
    
    
    SQL> alter session set tracefile_identifier='bisal';
    Session altered.
    
    
    SQL> alter table t_pk_02 add constraint pk_id_02 primary key (id);
    Table altered.
    
    
    SQL> alter session set events '10046 trace name context off';
    Session altered.
    
    
    SQL> select distinct(m.sid),p.pid,p.tracefile from v$mystat m,v$session s,v$process p where m.sid=s.sid and s.paddr=p.addr;
           SID        PID   TRACEFILE
    ---------- ----------- -------------------------------------------------------------------------------
           189         22   /u01/app/oracle/diag/rdbms/dcm/DCM/trace/DCM_ora_18653_bisal.trc
    

    从trace我们能看到,对T_PK_02加了share模式锁,指定nowait,先创建的约束,然后创建了唯一索引,

    ...
    LOCK TABLE "T_PK_02" IN SHARE MODE  NOWAIT
    ...
    alter table t_pk_02 add c
    ...
    update con$ ...
    ...
    insert into con$ ...
    ...
    CREATE UNIQUE INDEX "BISAL"."PK_ID_02" on "BISAL"."T_PK_02"("ID") NOPARALLEL
    

    第三种,分开创建主键约束和主键索引。

    主要有两个场景。

    (1) 当使用CTAS创建表时,

    SQL> create table t_pk_03 as select * from t_pk_01;
    Table created.
    

    主键约束并未带过来,

    SQL> select table_name, constraint_name, constraint_type from user_constraints where table_name='T_PK_03';
    no rows selected
    
    
    SQL> select table_name, index_name, uniqueness from user_indexes where table_name='T_PK_03';
    no rows selected
    

    此时如果表中存在很多的数据,直接使用方法2,可能会带来两个问题,

    1. 创建唯一索引的用时。

    2. 唯一索引允许包含空值,因为主键约束不允许空值,还需要判断字段是否为空的用时。

    对(1),从trace,我们可以看到,默认创建唯一索引的时候,并未指定online,因此用时取决于数据量。

    对(2),如果字段设置NOT NULL,应该不需要判断,如果没设置,则需要判断字段中是否含空值,还是取决于表的数据量。

    因此,可以选择先在线创建唯一索引,再增加主键约束,从trace能看到,此时增加主键约束的过程中,不会再操作索引,

    SQL> create unique index pk_id_03 on t_pk_03(id) online;
    Index created.
    
    
    SQL> alter table t_pk_03 add constraint pk_id_03 primary key (id);
    Table altered.
    

    (2) 往往在生产环境,数据表空间和索引表空间是分开的,如果采用第一种和第二种的方式,主键索引会创建在执行用户的默认表空间,很可能是数据表空间,因此分开创建,还可以在创建索引的时候,指定tablespace,明确索引表空间,

    SQL> create unique index pk_id_03 on t_pk_03(id) tablespace xxx;
    Index created.
    

    近期更新的文章:

    小白学习MySQL - 数据库软件和初始化安装

    小白学习MySQL - 闲聊聊

    Redis和Sentinel的安装部署和配置

    “火线”和“零线”

    通过索引提升SQL性能案例一则

    如何手动添加jar包到maven本地库?

    1元股权转让的一点思考

    如何打造一个经常宕机的业务系统?

    Linux恢复误删文件的操作

    Linux的scp指令使用场景

    Oracle处理IN的几种方式

    如何搭建一支拖垮公司的技术团队?

    IP地址解析的规则

    MySQL的skip-grant-tables

    国产数据库不平凡的一年

    Oracle要求顺序的top数据检索问题

    日常工作中碰到的几个技术问题

    了解一下sqlhc

    Oracle的MD5函数介绍

    Oracle 19c的examples静默安装

    sqlplus登录缓慢的解决

    VMWare 11安装RedHat Linux 7过程中碰到的坑

    COST值相同?是真是假?

    Oracle 11g的examples静默安装

    同名的同义词和视图解惑

    v$和v_$的一些玄机

    文章分类和索引:

    公众号700篇文章分类和索引

    展开全文
  • 本节文章主要介绍了oracle删除主键查看主键约束及创建联合主键,示例代码如下,需要的朋友可以参考下
  • 我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在Oracle没有自增主键的设置,我们可以通过这篇文章介绍的方法实现,有需要的朋友们可以参考借鉴,下面来一起看看吧。
  • 一般的情况下,表的主键是必要的,没有主键的表可以说是不符合设计规范的。SELECT table_name FROM User_tablestWHERE NOTEXISTS(SELECT table_name FROM User_constraints c WHERE constraint_type ='P' AND t....

    一般的情况下,表的主键是必要的,没有主键的表可以说是不符合设计规范的。

    SELECT table_name FROM User_tables

    t WHERE NOT

    EXISTS (SELECT table_name FROM User_constraints c WHERE constraint_type =

    'P' AND t.table_name=c.table_name)

    其它相关数据字典解释user_tables 表

    user_tab_columns 表的列

    user_constraints 约束

    user_cons_columns 约束与列的关系

    user_indexes 索引

    Oracle建立自增主键

    首先,你要有一张表!CREATE TABLE example(

    ID Number(4) NOT NULL PRIMARY KEY,

    NAME VARCHAR(25),

    PHONE VARCHAR(10),

    ADDRESS VARCHAR(50));如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!然后,你需要一个自定义的sequence

    CREATE SEQUENCE emp_sequence

    INCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXVALUE -- 不设置最大值NOCYCLE -- 一直累加,不循环NOCACHE -- 不建缓冲区以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq

    ,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:CREATE TRIGGER "触发器名称" BEFORE

    INSERT ON example FOR EACH ROW WHEN (new.id is null)

    begin

    select emp_sequence.nextval into: new.id from dual;

    end;打完收工!下面你就试试插入数据吧!INSERT INTO example(Name,phone,address)

    Values('Cao','56498543','Heibei');

    Primary Key与Unique Key

    Primary key 与Unique

    Key都是唯一性约束。但二者有很大的区别:

    1、Primary key的1个或多个列必须为NOT

    NULL,如果列为NULL,在增加PRIMARY

    KEY时,列自动更改为NOT NULL。而UNIQUE KEY

    对列没有此要求。

    2、一个表只能有一个PRIMARY

    KEY,但可以有多个UNIQUE KEY。

    下面以测试说明:

    SQL> create table t (a int,b int,c int,d

    int);

    Table created.

    SQL> desc t

    Name Null? Type

    -----------------------------------------

    -------- -----------

    A NUMBER(38)

    B NUMBER(38)

    C NUMBER(38)

    D NUMBER(38)

    SQL> alter table t add constraint pk_t primary key (a,b);

    Table altered.

    SQL> desc t

    Name Null? Type

    -----------------------------------------

    -------- ----------------

    A NOT NULL NUMBER(38)

    B NOT NULL NUMBER(38)

    C NUMBER(38)

    D NUMBER(38)

    可以看到A、B两个列都自动改为了NOT NULL

    SQL> alter table t modify (a int null);

    alter table t modify (a int null)

    *

    ERROR at line 1:

    ORA-01451: column to be modified to NULL cannot be modified to

    NULL

    可以看到,列A不允许改为NULL

    SQL> alter table t drop constraint pk_t;

    Table altered.

    SQL> alter table t add constraint uk_t_1 unique (a,b);

    Table altered.

    SQL> desc t

    Name Null? Type

    -----------------------------------------

    -------- -----------

    A NUMBER(38)

    B NUMBER(38)

    C NUMBER(38)

    D NUMBER(38)

    我们看到列A又变回了NULL。

    注意到,在删除主键时,列的NULLABLE会回到原来的状态。如果在创建主键后,对原来为NULL的主键列,显式设为NOT

    NULL,在删除主键后仍然是NOT

    NULL。比如在创建主键后,执行下面的操作,可以看到:

    SQL> alter table t modify (b int not null);

    Table altered.

    SQL> alter table t drop constraint pk_t;

    Table altered.

    SQL> desc t

    Name Null? Type

    -----------------------------------------

    -------- ----------

    A NUMBER(38)

    B NOT NULL NUMBER(38)

    C NUMBER(38)

    D NUMBER(38)

    再做如下的实验:

    SQL> drop table t;

    Table dropped.

    SQL> create table t (a int,b int,c int,d int);

    Table created.

    SQL> alter table t add constraint uk_t_1 unique (a,b);

    Table altered.

    SQL> alter table t add constraint uk_t_2 unique (c,d);

    Table altered.

    可以看到可以增加两个UNIQUE

    KEY。看看能不能增加两个主键:

    SQL> alter table t add constraint pk_t primary key (c);

    Table altered.

    SQL> alter table t add constraint pk1_t primary key

    (d);

    alter table t add constraint pk1_t primary key (d)

    *

    ERROR at line 1:

    ORA-02260: table can have only one primary key

    由此可以看到一个表只能有一个主键。

    SQL> alter table t drop constraint pk_t;

    Table altered.

    SQL> insert into t (a ,b ) values (null,null);

    1 row created.

    SQL> /

    1 row created.

    SQL> insert into t (a ,b ) values (null,1);

    1 row created.

    SQL> /

    insert into t (a ,b ) values (null,1)

    *

    ERROR at line 1:

    ORA-00001: unique constraint (SYS.UK_T_1) violated

    SQL> insert into t (a ,b ) values (1,null);

    1 row created.

    SQL> /

    insert into t (a ,b ) values (1,null)

    *

    ERROR at line 1:

    ORA-00001: unique constraint (SYS.UK_T_1) violated

    主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。

    展开全文
  • Navicat Premium中Oracle创建主键自增 1.选中表进入设计,选择触发器, 触发器名称,混合不选,每行,出发前,插入时,启用 2.下面展示触发器代码。 // A code block BEGIN SELECT SEQ_EXAM_KNOWLEDGE_BASE....

    Navicat Premium中Oracle创建主键自增

    1.首先需要创建序列,一定要注意先创建序列

    // An highlighted block
    create sequence SEQ_EXAM_USER(序列名)
    INCREMENT BY 1 -- 自增1
    START WITH 1 --1开始计数
    NOMAXVALUE --不设置最大值
    NOCYCLE --一直累加,不循环
    NOCACHE-- 不建缓冲区
    

    2.选中表进入设计,选择触发器,
    触发器名称,混合不选,每行,触发前,插入时,启用
    在这里插入图片描述
    3.下面展示触发器代码

    // An highlighted block
    BEGIN
      SELECT SEQ_EXAM_USER.nextval  (这里就用到序列名)
        INTO :NEW.ID
        FROM DUAL;
    END;
    

    4.两个引用写一下就大功告成了
    在这里插入图片描述

    展开全文
  • 1、主键创建方法一:直接在sql语句中声明字段主键约束create table table_name (id type[length]constraintpk_nameprimary key,name tyoe[length],age type[length],class_id);方法二:alter更改表添加约束alter ...
  • 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 创建id主键序列的 脚本 及 使用方式 oracle 创建id主键序列的 脚本 及 使用方式
  • 一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...
  • Oracle 创建自增主键

    2022-03-19 15:55:59
    Oracle没有这个auto_increment属性,所以它无法像MySQL般在表内定义自增主键。但是,Oracle里的序列,可间接实现自增主键的作用。 序列: 序列(Sequence),又叫序列生成器,用于提供一系列的数字,开发人员使用...
  • 在设计数据库表的时候发现Oracle没有自增主键的设置,Google了解到Oracle本身并不支持自增主键,需要通过序列(Sequence)和触发器(Trigger)实现。 创建表Student Create Table Student( id number(12) primary ...
  • Oracle添加主键、删除主键、修改主键

    万次阅读 多人点赞 2019-04-01 16:48:43
    目录 一、前提 二、回归主题,主键的添加...1)无命名主键创建 2)无命名主键的删除 3)无命名主键的修改 附加: user_constraints 和user_cons_columns表的作用及其联系 一、前提 主键解释: 一个表...
  • oracle 设置主键SQL

    2021-09-12 09:28:53
    --一个主键 ALTER TABLE tableName ADD CONSTRAINT tableName_PK PRIMARY KEY ("主键"); --多个主键(若表中已经存在主键,需要删除后才能设置组合主键) ALTER TABLE tableName ADD CONSTRAINT tableName_PK PRIMARY ...
  • ORACLE 设置主键自增

    2021-10-22 16:45:11
    例:当前有表,名【test_incr】,其主键【tid】需要设置自增。 1、首先,创建【test_incr】...2、创建完自增序列后,写一个触发器,每次插入数据时,自动触发自增,并将得到的值赋予主键。 create or replace trigg.
  • oracle创建自增主键的方法
  • Oracle如何创建自增长主键Oracle主键常用的分为UUID和自增长int两种,下面简单说下各自的优缺点:UUID的优点1、生成方便,不管是通过sys_guid() 还是java的uuid都能很方便的创建UUID。2、适合批量数据中的插入和更新...
  • 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创建主键生成序列

    千次阅读 2015-10-15 10:39:55
    主键生成序列 create sequence seq_pcwang_emp start with 1 increment by 1
  • oracle创建主键语句

    千次阅读 2014-11-20 15:38:15
    alter table 表 add constraint 键名(MAILMESSAGE_pk) primary key 列(MASSID) enable validate;
  • --删除表主键 ALTER TABLE jw_jxrw_wxlsrwkcb DROP CONSTRAINT PK_JW_JXRW_WXLSRWKCB; --删除索引 drop index PK_JW_JXRW_WXLSRWKCB;--添加主键 -- Create/Recreate primary alter table jw_jxrw_wxlsrwkcb add ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,125
精华内容 44,450
关键字:

oracle创建主键