oracle主键的设置方法

合集下载

oracle_primary用法_概述及解释说明

oracle_primary用法_概述及解释说明

oracle primary用法概述及解释说明1. 引言1.1 概述在关系型数据库中,Primary Key(主键)是一种重要的数据库约束,用于唯一标识一个表中的每一行数据。

它是数据库设计中非常重要的概念之一,对于保障数据完整性和提高查询效率都具有很大作用。

本文将详细介绍Oracle数据库中Primary Key的用法及其相关解释说明。

1.2 文章结构本文由以下几个部分组成。

首先是引言部分,对文章进行概述,并介绍文章的结构。

接下来是Oracle Primary用法部分, 介绍了Primary Key的基本定义、作用以及如何定义和使用Primary Key。

然后是Primary Key的特点和限制部分, 包括唯一性约束、非空约束以及自动递增特性等。

随后是如何选择和设计Primary Key部分, 讨论根据业务需求选择合适的Primary Key类型、设计复合主键时需要考虑的因素以及索引对Primary Key性能的影响等方面内容。

最后是结论部分,总结了Primary Key在数据库设计中的重要性与应用价值,并给出了正确使用Primary Key提高数据完整性和查询效率的建议,并展望了未来Database设计发展趋势。

1.3 目的本文旨在全面介绍Oracle Primary Key的用法,帮助读者深入了解Primary Key 的概念、作用和限制,以及如何正确选择和设计Primary Key。

通过本文的阅读,读者将能够更好地理解Primary Key在数据库设计中的重要性,并能够合理运用它来提高数据库的性能和数据完整性。

此外,本文还对未来Database设计发展趋势进行了展望,为读者提供思考与探索的方向。

2. Oracle Primary用法:2.1 什么是Primary KeyPrimary Key(主键)是数据库表中的一列或一组列,其具有唯一性和非空性的特点。

每个数据库表都应该有一个Primary Key,它用于唯一标识表中的每行数据。

oracle主键索引和普通索引

oracle主键索引和普通索引

oracle主键索引和普通索引在关系型数据库中,索引是提高查询效率的重要手段之一。

在Oracle数据库中,主键索引和普通索引是常见的两种索引类型。

本文将介绍它们的定义、特点以及适用场景,以帮助读者理解和正确使用这两种索引。

一、主键索引主键索引是一种用于唯一标识表中记录的索引类型。

在创建表时,可以通过定义主键来自动创建主键索引。

主键索引中的键值必须是唯一的,并且不能为空值。

1. 定义主键索引在创建表时,可以通过在列定义后使用PRIMARY KEY关键字来定义主键。

例如,创建一个名为"customer"的表,并为"customer_id"列定义主键索引,可以使用以下语句:CREATE TABLE customer (customer_id NUMBER PRIMARY KEY,first_name VARCHAR2(50),last_name VARCHAR2(50));2. 特点与优势- 主键索引的键值唯一且不能为空值,确保了表中记录的完整性。

- 主键索引物理上以B树的形式存储,查询速度较快。

- 主键索引可以被外键引用,用于维护表与表之间的引用完整性。

- 主键索引可以用于加速表的连接操作,提升查询性能。

3. 适用场景主键索引适合用于标识唯一记录的列,例如身份证号、学号等。

在高并发的系统中,主键索引的使用可以避免数据冲突和错误插入。

二、普通索引普通索引(也称为辅助索引)是一种非唯一索引类型,可以用于提高查询效率。

与主键索引不同,普通索引的键值可以重复且可以为空值。

1. 定义普通索引在创建表时,可以通过使用CREATE INDEX语句来定义普通索引。

例如,为"product_name"列创建一个普通索引,可以使用以下语句:CREATE INDEX idx_product_name ON products(product_name);2. 特点与优势- 普通索引可以加速查询速度,减少数据扫描的次数。

Oracle之主键的创建、添加、删除操作

Oracle之主键的创建、添加、删除操作

Oracle之主键的创建、添加、删除操作⼀、创建表的同时创建主键约束1.1、⽆命名SQL> create table jack (id int primary key not null,name varchar2(20));Table createdSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK SYS_C00111001.2、有命名SQL> create table jack (id int ,name varchar2(20),constraint ixd_id primary key(id));Table createdSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK IXD_ID⼆、向表中添加主键约束SQL> create table jack as select * from dba_objects;Table createdSQL> desc jack;Name Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VARCHAR2(30) YOBJECT_ID NUMBER YDATA_OBJECT_ID NUMBER YOBJECT_TYPE VARCHAR2(19) YCREATED DATE YLAST_DDL_TIME DATE YTIMESTAMP VARCHAR2(19) YSTATUS VARCHAR2(7) YTEMPORARY VARCHAR2(1) YGENERATED VARCHAR2(1) YSECONDARY VARCHAR2(1) YNAMESPACE NUMBER YEDITION_NAME VARCHAR2(30) YSQL> alter table jack add constraint pk_id primary key(object_id);Table alteredSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK PK_ID----另外当索引创建好以后再添加主键的效果:SQL> create table jack as select * from dba_objects;Table createdSQL> create index ind_object_id on jack(object_id);Index createdSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK IND_OBJECT_IDSQL> desc jack;Name Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VARCHAR2(30) YOBJECT_ID NUMBER YDATA_OBJECT_ID NUMBER YOBJECT_TYPE VARCHAR2(19) YCREATED DATE YLAST_DDL_TIME DATE YTIMESTAMP VARCHAR2(19) YSTATUS VARCHAR2(7) YTEMPORARY VARCHAR2(1) YGENERATED VARCHAR2(1) YSECONDARY VARCHAR2(1) YNAMESPACE NUMBER YEDITION_NAME VARCHAR2(30) YSQL> alter table jack add constraint pk_id primary key(object_id);Table alteredSQL> desc jack;Name Type Nullable Default Comments-------------- ------------- -------- ------- --------OWNER VARCHAR2(30) YOBJECT_NAME VARCHAR2(128) YSUBOBJECT_NAME VARCHAR2(30) YOBJECT_ID NUMBERDATA_OBJECT_ID NUMBER YOBJECT_TYPE VARCHAR2(19) YCREATED DATE YLAST_DDL_TIME DATE YTIMESTAMP VARCHAR2(19) YSTATUS VARCHAR2(7) YTEMPORARY VARCHAR2(1) YGENERATED VARCHAR2(1) YSECONDARY VARCHAR2(1) YNAMESPACE NUMBER YEDITION_NAME VARCHAR2(30) YSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK IND_OBJECT_ID三、修改主键约束3.1、禁⽤/启⽤主键SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_ID P ENABLEDSQL> alter table jack disable primary key;Table alteredSQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------SQL> alter table jack enable primary key;Table alteredSQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_ID P ENABLED3.2、重命名主键SQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_ID P ENABLEDSQL> alter table jack rename constraint pk_id to pk_jack_id;Table alteredSQL> select a.table_name,a.index_name,b.constraint_name,b.constraint_type,b.status from user_indexes a,user_constraints b where b.table_name='JACK'and a.table_name=b.table_name; TABLE_NAME INDEX_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS------------------------------ ------------------------------ ------------------------------ --------------- --------JACK PK_ID PK_JACK_ID P ENABLED四、删除表中已有的主键约束4.1、⽆命名----先利⽤user_cons_columns表查得主键名:SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME------------------------------ ------------------------------ ------------------------------ ----------------JACK SYS_C0011105 JACK IDSQL> select table_name,index_name from user_indexes where table_name='JACK';TABLE_NAME INDEX_NAME------------------------------ ------------------------------JACK SYS_C0011105SQL> alter table jack drop constraint SYS_C0011105;Table altered4.2、有命名SQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME------------------------------ ------------------------------ ------------------------------ ------------------------JACK IXD_ID JACK IDSQL> alter table jack drop constraint IXD_ID;Table alteredSQL> select owner,constraint_name,table_name,column_name from user_cons_columns where table_name = 'JACK';OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME------------------------------ ------------------------------ ------------------------------ ------------------------。

oracle实现主键id自增

oracle实现主键id自增

oracle实现主键id⾃增公司现在项⽬数据库使⽤oracle,oracle实现表主键⾃增⽐mysql⿇烦mysql 在表主键auto_increment 打钩即可。

oracle没有改属性,就相对⿇烦。

特此记录⼀下⾃增⽅法测试案例如下第⼀步创建⼀张测试表table1sql语句create table table1(id int not null,name varchar2(20),sex varchar2(4))添加表注释、字段注释comment on table table1 is '测试表稍后会删除'comment on column is '姓名'comment on column table1.sex is '性别'第⼆步:创建序列create sequence table1_idminvalue 1 //⾃增字段最⼩值nomaxvalue //最⼤值没有就算nomaxvalueincrement by 1 //每次增值1start with 1 //起始值nocache; //不缓存第三步:创建触发器create or replace trigger table1_tg_insertIdbefore insert on table1 for each rowbeginselect table1_id.nextval into:new.id from dual;end;第四步:测试开始插⼊两条数据insert into table1(name,sex) values ('zhangsan','nan');insert into table1(name,sex) values ('lisi','nan');查询数据。

ORACLE数据库实现主键自增

ORACLE数据库实现主键自增

ORACLE数据库实现主键⾃增ORACLE数据库是甲⾻⽂公司的⼀款关系数据库管理系统。

实现主键⾃动增长需要四个步骤:1.创建表格(必须有主键)-- 创建学⽣表(student)主键为:s_idCREATE TABLE student(s_id NUMBER(10) NOT NULL PRIMARY KEY ,-- 主键列 s_ids_name VARCHAR2(50), -- 学⽣姓名 s_names_age NUMBER(8) -- 学⽣年龄 s_age);2.创建⾃增序列-- 创建⾃增序列(seq_student)CREATE SEQUENCE seq_studentINCREMENT BY1--每次增加1,可以写⾮0的任何整数START WITH1-- 从1开始(起始值)MAXVALUE 999-- 设置最⼤值:设置为 NOMAXVALUE 表⽰⽆最⼤值MINVALUE 1-- 设置最⼩值NOCYCLE -- 不循环⼀直增加CACHE 20; -- 设置20个缓存,不使⽤缓存则写 NOCACHE到这⼀步就可以使⽤了,不过使⽤的时候必须按格式调⽤格式:⾃增序列的名字.nextval (我这⾥的序列名为seq_student )insert into student values (seq_student.nextval,'李四',28);3.创建触发器(插⼊数据时触发)create trigger tri_student_ins --每个触发器名不可⼀样before insert on student for each row when (new.s_id is null) --student:换为⾃⼰的表名;s_id 换为⾃⼰的主键名beginselect seq_student.nextval into:new.s_id from dual; -- seq_student:换为上⼀步创建的⾃增序列名;s_id 换为主键名end;4.插⼊数据测试insert into student values (DEFAULT,'测试',28);注意点:1.创建表格时:必须有主键!2.创建⾃增序列时:序列名不要太复杂,id⾃增根据功能灵活变通!3.创建触发器时:根据⾃⼰的表名,主键名,序列名更换需要更换的位置。

使用powerdesigner创建oracle数据库表,设置表主键列为自动增长

使用powerdesigner创建oracle数据库表,设置表主键列为自动增长

使用powerdesigner创建oracle数据库表,设置表主键列为自动增长powerdesigner 版本12.5创建表就不说了。

下面开始介绍设置自动增长列。

1 在表视图的列上创建。

双击表视图,打开table properties ———>columens ,双击要设置的列(显示列的序号的那个按钮,单击后,会显示横向的黑色箭头)。

打开column properties 对话框。

在‘general’ 项中,最下面,找到sequence,下拉框后面,有三个按钮就‘create’,‘select’,‘properties’。

新建的话就点击‘create' 打开sequence properties 对话框,general 中的name,code 随意修改切换到physical options 项,输入下面几项内容start with 1increment by 1minvalue 1maxvalue 根据自己需要决定是否要设定。

没有的话,选择no max valueno cache 勾选输入完后,点击应用。

创建完毕。

在preview 中可以看到相应的创建代码同时,在table properties———>preview 的创建代码中,自动加入了触发器trigger 的创建代码。

创建完成。

使用:到table properties———>preview 中拷贝table 的创建代码,赋值到plsql中执行。

提示:不知道是我的powerdesigner 设置问题还是怎么回事,table 的创建代码中没有自动加入sequence 的创建部分。

所以,还要到sequence properties ———>preview 中,把sequence的创建代码拷贝到表创建的代码中放到cteate table .... 和create trigger ...中间例如:create table G_EC_LotteryCategory (lcId NUMBER(3) not null,lcName NVARCHAR2(30),lcAbbr NVARCHAR2(20),constraint PK_G_EC_LOTTERYCATEGORY primary key (lcId))/create sequence Sequence_LotCateIDincrement by 1start with 1nomaxvalueminvalue 1nocache;create trigger tib_g_ec_lotterycategory before inserton G_EC_LotteryCategory for each rowdeclareintegrity_error exception;errno integer;errmsg char(200);dummy integer;found boolean;begin-- Column lcId uses sequence Sequence_LotCateIDselect Sequence_LotCateID.NEXTVAL INTO :new.lcId from dual;-- Errors handlingexceptionwhen integrity_error thenraise_application_error(errno, errmsg);end;/在plsql 中执行上端代码。

oracle中如何设置自增主键

oracle中如何设置自增主键

首先,你要有一张表!CREATE TABLE example(ID Number(4) NOT NULL PRIMARY KEY,NAME V ARCHAR(25),PHONE V ARCHAR(10),ADDRESS V ARCHAR(50));如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶!然后,你需要一个自定义的sequenceCREATE SEQUENCE emp_sequenceINCREMENT BY 1 -- 每次加几个START WITH 1 -- 从1开始计数NOMAXV ALUE -- 不设置最大值NOCYCLE -- 一直累加,不循环NOCACHE -- 不建缓冲区以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:CREATE TRIGGER "触发器名称" BEFOREINSERT ON example FOR EACH ROW WHEN (new.id is null)beginselect emp_sequence.nextval into: new.id from dual;end;打完收工!下面你就试试插入数据吧!INSERT INTO example(Name,phone,address) Values(''Cao'',''56498543'',''Heibei'');=============================================================ORACLE SEQUENCE的简单介绍(自增长字段)- -在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。

oracle建表的时候同时创建主键,外键,注释,约束,索引

oracle建表的时候同时创建主键,外键,注释,约束,索引

oracle建表的时候同时创建主键,外键,注释,约束,索引--主键create table emp (id number constraint id_pr primary key ,name1 varchar(8));create table emp9 (id number ,name1 varchar(8) ,constraint aba_pr primary key(id,name1));--外键create table emp1(id number references emp(id),name varchar(8));--复合外键create table emp0(id number ,name varchar(8) ,constraint fk_nam1e foreign key(id,name) references emp9(id,name1));--主键另外写法create table emp2(id number,name varchar(8),id1 number, constraint pk_id primary key(id),constraint fk_name foreign key(id1) references emp(id))--check 约束的写法create table emp4(id number check(id in(1,2 ,3)),name varchar(8));不带约束名称的:create table userInfo (id number(6) primary key,--主键name varchar2(20) not null,--⾮空sex number(1),age number(3) default 18,birthday date,address varchar2(50),email varchar2(25) unique,--唯⼀tel number(11),deptno number(2) references dept(deptno)—外键);带约束名称:create table userInfo (id number(6) constraint id_pk primary key,name varchar2(20) constraint name_nn not null,sex number(1),age number(3) default 18,birthday date,address varchar2(50),email varchar2(25) constraint email_uqe unique,tel number(11),deptno number(2) constraint dept_deptno_ref references dept(deptno));列模式:create table userInfo (id number(6),name varchar2(20),sex number(1),age number(3) default 18,birthday date,address varchar2(50),email varchar2(25),tel number(11),deptno number(2),constraint id_pk primary key (id),--也可以两个以上,联合主键constraint dept_deptno_ref foreign key (deptno) references dept(deptno),constraint emial_name_uqe unique (email, name));Alter模式:alter table userInfo add(msn varchar2(20));alter table userInfo modify(msn varchar2(25));alter table userInfo drop(msn);alter table userInfo drop constraint id_pk;alter table userInfo add constraint id_pk primary key (id);3、创建视图create table v$_dept_viewasselect deptno, dname from dept;--重新编译视图alter view v$_dept_view compile;提⽰:视图⼀般是⼀个表或多个表的查询或⼦查询,这样可以减少代码量,但同时增加了对数据库视图的维护程度,如:某个表字段被删除或是修改,视图也要重新创建或修改,同时占⽤了数据库的⼀部分空间;视图就是⼀个虚拟的表格;4、创建索引普通索引:create index idx_dpt_dname on dept(dname);联合索引:create index idx_dept_dname_deptno on dept(dname, deptno);--唯⼀索引create unique index idx_emp_ename on scott.emp(ename);--反向键索引create index idx_emp_rev_no on scott.emp(empno) reverse;--位图索引create bitmap index idx_emp_name on scott.emp(dname);--索引组织表,⼀定要有主键create table tab (id int primary key,name varchar2(20)) organization index;--索引组织表的insert效率⾮常低--分区表索引create index idx_name on table(col) local/global;--索引分区提⽰:当给表创建主键或唯⼀键约束时,系统也会创建⼀个约束给该字段;同样创建索引也会占⽤数据库空间;索引在访问、查询的时候效率有提⾼,但是在修改表的时候效率就会降低;5、创建序列create sequence seq;select seq.nextval from dual;insert into tab values(sql.nextval, ‘music’);create sequence seqtabstart with 2 –从2开始increment by 3—每次加3nomaxvalue—没有最⼤值minvalue 1—最⼩值1nocycle—不循环nocache;--不缓存--修改序列,不能修改起始值alter sequence seqtabmaxvalue 1000;6、创建同义词同义词,顾名思义就是说别名、或是另⼀个名字。

Oracle创建表并设置主键自增

Oracle创建表并设置主键自增

Oracle数据库如何创建表并设置主键自增
首先我们使用oracle sql developer官方管理工具来新建表并色织主键自增,首先连接数据库想必不用多说。

创建表
在表那个文件夹上右键选择新建表
弹出如下图所示:
输入你想要的表名和列名并设置数据类型主键一定要设置NUMBER类型
设置主键
只要在主键那一行单件一下最前面的小方块就行,产生如何所示的效果即可:
主键的标识就是那个小钥匙。

设置主键自增
下面我们设置主键自增,选中主键所在那一行,找到下面的身份列单击(如图所示):
如下图所示看到类型点击下拉菜单选择列序列:
此时系统自动生成触发器和序列不用做任何修改点击确定那个么一个主键自增的表就已经成功的生成了。

测试
下面我们测试一下数据插入是否成功,这里我们直插入name列不插入主键看看主键是否能够自增。

Select一下发现主键确实自动生成并且自增了,如果不放心可以多加几条测试数据,这里我就不多加描述了。

oracle主键自增,触发器

oracle主键自增,触发器

create or replace trigger trig_emp_view_update --定义触发器的名字
after update of sal on emp_view --定义修改触发器,在执行完后触发。
for each row --每次操作都会引起触发
rollback;
--验证触发器
update emp_view set sal = 900 where empno = 7369; --验证修改一条
update emp_view set sal = 1000 where empno in (7369,7900); --验证修改多条记录
----2、增加触发器
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL CURRVAL=返回sequence的当前值 NEXTVAL=增加sequence的值,
然后返回sequence值
第二步写触发器
create or replace trigger zuocheng_id
select * from student; ---有成绩的字段 studentid,studentname ,score
delete from student where studentid=5;
commit;
create or replace trigger trig_student
after insert on student
when (new.sal > old.sal)
declare num number(7,2);
begin
num := :new.sal - :old.sal;

oracle数据库创建表且主键自增

oracle数据库创建表且主键自增

oracle数据库创建表且主键⾃增Oracle数据库中,设置ID⾃增并不像MySQL中那么简单,Oracle中需要设置⼀个序列。

现在给出⽅式,具体如下:第⼀步:建⽴⼀个表create table ContestDB(TID NUMBER(10) PRIMARY KEY,TEAMNUM varchar(50) not null,MARKNUM varchar(50));第⼆步:设置ID⾃增第⼀种⽅式:不使⽤触发器1 CREATE SEQUENCE SEQ_TID;2 INSERT INTO ContestDB VALUES(SEQ_TID.NEXTVAL,'B20007009','B001 ');3 INSERT INTO ContestDB VALUES(SEQ_TID.NEXTVAL,'B20007010','B003 ');第⼆种⽅式:使⽤Trigger 触发器1 --⾃定义⼀个序列2 create sequence ContestDB_sequence3 increment by 1 --每次增加⼏个,我这⾥是每次增加14 start with 1 --从1开始计数5 nomaxvalue --不设置最⼤值6 nocycle --⼀直累加,不循环7 nocache --不建缓冲区8 --创建⼀个触发器9 CREATE TRIGGER ContestDB_trigger10 BEFORE INSERT ON ContestDB11 FOR EACH ROW12 WHEN (new.TID is null) --只有在tid为空时,启动该触发器⽣成tid号13 begin14 select ContestDB_sequence.nextval into :new.TID from sys.dual;15 end;1617 insert into ContestDB(TEAMNUM,MARKNUM) values('A20007013','A002');1819 insert into ContestDB(TEAMNUM,MARKNUM) values('A20007014','A003');。

Oracle创建主键自增表示例代码

Oracle创建主键自增表示例代码

Oracle创建主键⾃增表⽰例代码前⾔本篇⽂章给⼤家主要介绍的是在oracle中如果创建⾃增长表的⽅法,这⾥要⽤到序列。

下⾯话不多说,我们来看⽰例代码。

⽰例代码create table tb_student(id NUMBER(10) not null,createtime DATE not null,constraint PK_tb_student primary key (id));comment on table "tb_student" is'学⽣表';comment on column "tb_student"."id" is'主键id';comment on column "tb_student"."createtime" is'创建时间';--创建序列create sequence seq_tb_studentminvalue 1nomaxvaluestart with 1increment by 1nocycle --⼀直累加,不循环nocache;--创建触发器,如果insert语句不指定ID⾃动插⼊增长值CREATE OR REPLACE TRIGGER tr_tb_studentBEFORE INSERT ON tb_student FOR EACH ROW WHEN (new.id is null)beginselect seq_tb_student.nextval into:new.id from dual;end;注意:触发器是⾮必须的,可以从业务上严格要求指定插⼊值。

注意oracle限制对象名的字符长度不能超过30个字符,所以表名要控制在⼀定的长度否则后⾯创建序列可能会超过限制,建议表名控制在27个字符以下。

总结以上就是Oracle创建主键⾃增表的全部内容,希望本⽂的内容对⼤家的学习或者使⽤Oracle带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,⼩编会尽快给⼤家回复的。

oracle主键生成策略

oracle主键生成策略
这是一个"时间(6)+序号(4)",一共10位.空间和性能应该比较好.希望高手指教~ 自己赞一个,觉得很不错,以后使用时就把这个改改就可以啦~
网络错误503请刷新页主 键 生 成 策 略
oracle的主键生成有好几种方法,比如sys_guid(),但太长,空间大,我觉得很不好.前台程序设置,自由度比较好,但是如果碰到循环插入,很不好处 理; 还有就是序列方案,比较可以,但如果每一个表都来一个序列那不就有点麻烦啊,今天发现一个好的方案,就是没有测试性能如何; 触发器方案示例: 1create or replace trigger trg_jhy_ai_custom_b_i 2before insert on jhy_ai_custom for each row 3begin 4select to_char(sysdate, 'yymmdd') || lpad(decode(max(substr(a.id,7,4)),null,0)+1,4,0) into :new.ID from jhy_ai_custom a 5where substr(a.id,1,6) = to_char(sysdate, 'yymmdd'); 6end;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

主键:
1.主键约束:一个表只能有一个主键约束。

主键可以是单个字段,也可以是多个字段。

无论是哪种情况,其所有字段都是NOT NULL。

2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL。

3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束;主键所有字段都是not null,unique可以是
null;相同点在于都能保证唯一性。

4.主键、Unique与索引:主键约束与Unique约束默认会成为索引。

当主键和Unique有多个字段时,有索引前缀性问题,即where语
句中的条件必须有主键或者unique的第一个字段,否则不会使用索引。

5. 外键与主键、Unique:外键必须为另外一张表(父表)的主键或者唯一索引。

如果要添加记录,而父表中没有则报错。

反之,如
果要删除父表中的记录,而子表中有记录,也会报错。

但是如果在创建外键约束时,如果使用on delete cascade,则删除父表中数据时
,不报错而直接把子表关联的数据删除。

如果要删除父表,则需要加上cascade constraints,此时子表的foreign key被去除,表中记录保持不变。

外键:
外键是该表是另一个表之间联接的字段
外键必须为另一个表中的主键
外键的用途是确保数据的完整性。

它通常包括以下几种:
实体完整性,确保每个实体是唯一的(通过主键来实施).
oracle主键的设置方法有2种:
一种是设置自增长主键,另一种是生成唯一序列;
1.自增长主键
SQL> create table Prim_key_Increase_Test(
2 id number(10) primary key,
3 name varchar2(30)
4 );
表已创建。

SQL> create sequence Prim_key_Incre_Sequence
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increase by 1
6 nocycle
7 nocache;
increase by 1
*
第5 行出现错误:
ORA-00933: SQL 命令未正确结束
SQL> 5
5* increase by 1
SQL> c /increase/increment/
5* increment by 1
SQL> r
1 create sequence Prim_key_Incre_Sequence
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increment by 1
6 nocycle
7* nocache
序列已创建。

SQL> create trigger Prim_key_trigger before
2 insert on Prim_key_Increase_Test for each row
3 begin
4 select Prim_key_Incre_Sequence.nextval into:New.id from dual;
5 end;
6 /
触发器已创建
SQL> commit;
提交完成。

SQL> insert into Prim_key_Increase_Test(id) values('181');
已创建1 行。

SQL> select * from Prim_key_Increase_Test;
ID NAME
---------- ------------------------------
1
SQL> insert into Prim_key_Increase_Test(id) values('181');
已创建1 行。

SQL> insert into Prim_key_Increase_Test(id) values('181');
已创建1 行。

SQL> select * from Prim_key_Increase_Test;
ID NAME
---------- ------------------------------
1
2
3
更多信息请查看IT技术专栏。

相关文档
最新文档