在Oracle中如何实现字段内的值自增呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Oracle中如何实现字段内的值自增呢?相关的知识,希望对你有一定的参考价值。

比方说新建一个emp表
一共有三个字段
id
name
password
如何实现id字段的自增呢?
具体SQL语句该怎么实现呢?谢谢了

在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。
1、Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;

一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
比如:
emp_sequence.CURRVAL
emp_sequence.NEXTVAL

可以使用sequence的地方:
- 不包含子查询、snapshot、VIEW的 SELECT 语句
- INSERT语句的子查询中
- NSERT语句的VALUES中
- UPDATE 的 SET中

可以看如下例子:
INSERT INTO emp VALUES
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);

SELECT empseq.currval FROM DUAL;

但是要注意的是:
- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?

- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

2、Alter Sequence
你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;

影响Sequence的初始化参数:
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。

可以很简单的Drop Sequence
DROP SEQUENCE order_seq;
参考技术A 序列

sql server中如何实现自增字段?

如何让一个表的主键自增?sql 建表语句是什么?

该字段有什么限制?必须是int的吗?

varchar的行不行?如果行那怎么算啊?a001 a002?
sql建表语句是什么?

方法如下:

例如:

create table student(

Sno int identity(1,1) primary key,

Sname varchar(100)

)

这样我们的Sno字段就可以实现自增了,第一个参数是标识种子(就是开始的值),第二个参数是标识增值(每次增加多少)

这里我们开始为1,每次增加1

如果做插入的话,则:

insert into student values('李四')

注意values里面不要写自增字段名的值,因为数据库会自动帮你生成。

例如第一行为 1 小明

insert into student values('李四')

变为 1 小明

2 李四

扩展资料

SQL SERVER几种数据迁移

使用数据库客户端(SSMS)的界面工具。右键选择要导出数据的数据库,选择“任务”——“导出数据”,而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等。

当然在可以在向导进行修改。需要注意的是如果标题不是英文而是中文,默认创建字段名也是中文,这将给后面数据更新操作带来麻烦,所以最好还是以有意义的英文字段名。把数据导入后,再通过执行语句,把数据插入/更新到业务表。

从SQLServer2005开始,可以直接在SSMS上查询出来的结果复制,然后粘贴到Excel上,对于少量数据来说,是非常快速方便的,需要注意的是长数字可能会变成科学记数法的形式,提前在Excel上指定列的格式为文本即可。

导入的话,ctrl + c 复制Excel上的数据,然后在选择相关表,编辑数据,把数据直接粘贴上去即可。但是不建议直接粘贴到业务表(如果表是空白没有数据,并且字段顺序对应,可以这样操作),而是建议先粘贴到一个新建的中间表中,然后再通过语句,把数据插入/更新到业务表。

这种方法的导出导入,适合于少量的数据,如5000行以内的记录,大于5000行以上就不建议了,速度较慢,如果数据过大,还一定成功。

参考资料

百度百科——SQL

参考技术A

1、CREATE TABLE表名(字段名 [int] IDENTITY (1,   1) NOT  NULL ...)  

2、在SQL SERVER中,所有整数类型的列都可以定义成自增长列,叫作“标识”,
它通过设定“标识种子”和“标识递增量”来实现功能。

当你插入一行后,会从1开始自动的赋值(1、2、3、4……255)。

方法为:

1、选中表;

2、右击鼠标,设计;

3、选中列(整数类型);

4、设定标识为“是“(默认为“否”)、标识种子和标识递增量(一般为1)。

注:SQL SERVER 2000更好使用,全中文版界面,分类更清晰。

扩展资料:

sql server中如何设置自动增长字段:

1、通过字段属性设置

2.通过”查询分析器”以SQL方式创建,打开查询分析器,在查询窗口中输入SQL语句create database test –创建test数据库。

create table test (id int IDENTITY(1,1) not null,test text) 其中的IDENTITY(自动编号的初始舒值,自动编号的增量)即设置自动编号。

参考技术B

SQL Server 自增主键创建语法:

identity(seed, increment),其中为seed 起始值,increment 为增量。示例如下:

create table student    //创建学生表

(id int identity(1,1),   

name varchar(100) )     //  id字段为自增

自增字段的类型必须为不带小数的数值类型。

扩展资料

实现自增字段的其他方法:

下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

CREATE TABLE Persons

P_Id int NOT NULL AUTO_INCREMENT,LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),PRIMARY KEY (P_Id)

参考资料:百度百科-标识列

参考技术C

1、主键自增,以及建表的语句如下:

CREATE TABLEIF NOT EXISTS `t_email_notice` (

`id` INT (11) UNSIGNED NOT NULL AUTO_INCREMENT,`send_time` INT (16) NOT NULL DEFAULT '0',PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其中 `id` INT (11) UNSIGNED NOT NULL AUTO_INCREMENT,这句话表示设置id字段字增,类型为int

2、varchar类型的主键,不会自增。但是你可以通过创建触发器的形式,来实现自增。代码如下:

CREATE TRIGGER `T` BEFORE INSERT ON `user`FOR EACH ROW begin

set new.id=concat('SH',lpad(((SELECT substring(id,3,4) from user where id=(select id from user order by id desc limit 1))+1),4,0));

end;

这段语句的意思是,当user表中新插入一条一条语句,会触发‘触发器T’将以’SH‘开头的id字段自增+1。

扩展资料

sql语句建表规则如下:

create table  ‘表名’ (‘字段1’ type1 [not null] [primary key] identity(起始值,递增量),‘字段2’ type2 [not null], ...)--primary key为主键 identity表示递增数量。

参考技术D

方法如下:

例如:

create table student(

Sno int identity(1,1) primary key,

Sname varchar(100)

)

这样我们的Sno字段就可以实现自增了,第一个参数是标识种子(就是开始的值),第二个参数是标识增值(每次增加多少)

这里我们开始为1,每次增加1

如果做插入的话,则:

insert into student values('李四')

注意values里面不要写自增字段名的值,因为数据库会自动帮你生成。

例如第一行为 1 小明

insert into student values('李四')

变为 1 小明

2 李四

扩展资料:

SQL Server:修改字段属性总结

1:向表中添加字段

Alter table [表名] add [列名] 类型

2: 删除字段

Alter table [表名] drop column [列名]

3: 修改表中字段类型 (可以修改列的类型,是否为空)

Alter table [表名] alter column [列名] 类型

4:添加主键

Alter table [表名] add constraint [ 约束名] primary key( [列名])

5:添加唯一约束

Alter table [表名] add constraint [ 约束名] unique([列名])

6:添加表中某列的默认值

Alter table [表名] add constraint [约束名] default(默认值) for [列名]

7:添加约束

Alter table [表名] add constraint [约束名] check (内容)

8:添加外键约束

Alter table [表名] add constraint [约束名] foreign key(列名) referencese 另一表名(列名)

9:删除约束

Alter table [表名] add constraint [约束名]

10:重命名表

exec sp_rename '[原表名]','[新表名]'

11:重命名列名

exec sp_rename '[表名].[列名]','[表名].[新列名]'

参考资料来源:IT专家网——SQL Server:修改字段属性总结

以上是关于在Oracle中如何实现字段内的值自增呢?的主要内容,如果未能解决你的问题,请参考以下文章

如何修改MySql自增列的值

sql server中如何实现自增字段?

oracle与sqlserver部分区别

oracle如何实现自增?----用序列sequence的方法来实现

Oracle新建表字段,如何使字段自增

如何在数据库中设置ID字段为主键