Oracle序列

1、前引:

序列可以在Access这个软件中体现。


自动增加(约束)

自动编号类型,oracle中没有这种类型,但是12c开始就有了自动增长(约束)

从12c才有的自动增长约束,和序列是差不多样子的。


创建表时添加自动增长约束

create table student(sid number(3) generated by default as identity,sname varchar(10));

默认从1开始,每一个记录自动增长1

Generated by default as identity表示:默认身份标识。


注意⚠️:
generated by default as identity必须用在数值类型的字段上。
而且一般情况下定义在主键上或者定义在主键的一部分上,是一般情况下。


说明: 在自动增长约束字段下,我们也可以手动插入,自动增长的数值我们可以随便设置,当我们设置完之后,再次插入数据的时候,自动增长的数值会从原本自动增长到的值继续往上加1.

默认情况下,oracle数据表中自增的初始值是1,每新增一条记录,字段值会自动加1.
一个数据表只能有一个字段使用自增约束
可以设置初始值和步长值



例:Create table 表名(字段名1 数据类型 generated by default as identity(start with n increment by m),字段名2 数据类型……)

generated by default as identity(start with n increment by m)表示的是从n开始,每次自动增长m。

可以把身份列设置为主键
Create table 表名(字段名1 数据类型 generated by default as identity primary key,字段名2 数据类型……)
设置为主键后,不允许重复
可以省略by default,此时不允许手动插入数据

2、序列的概念

是数据库对象。
用于产生一系列唯一的数字值
序列号的生成独立于表
同一序列生成器可用于一个或多个表
经常用来产生主键值

序列是一个文件可以用到很多表中。

3、创建序列

命令创建序列

使用CREATE SEQUENCE语句创建序列

创建最简单的序列:
CREATE SEQUENCE 序列名。

创建带有条件的序列:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];


increase by n:自动增长,不写默认是1.
start witn n:开始值,不写默认是1.
maxvalue:最大值,不写默认没有值
minvalue:最小值。
cycle:循环,到达最大值后再从头开始增长。
nocycle:不循环。
cache:缓存;用于提高效率,默认缓存值是20.
nocache:没有缓存。


注意:主键不能写循环。

创建序列:
create sequence dept_seq incerment by 10 start with 50 maxvalue 100 nocache nocycle;

sql developer页面创建序列

周期就是循环,顺序是按照时间分配,不用管。

4、查看序列

查看视图:
desc user_sequences;
查看序列:
select sequence_name,min_value,max_value,cache_size from user_sequences;
在这里插入图片描述


后两行没有创建索引为什么有索引?
因为创建自动增长约束相当于自动创建序列

5、使用序列

NEXTVAL 与 CURRVAL伪列

NEXTVAL返回下一个有效的序列值,每执行一次会返回一个新的数值。
CURRVAL但会当前的序列值。


创建序列:
create sequence myseq;
使用序列:
select myseq.currval from dual;

提示:myseq.currval尚未在此会话中定义。
这是因为创建完序列后要先nextval才能使指针指向第一个记录。
故需要先
select myseq.nextval from dual;

select myseq.currval from dual;

创建表时,指定默认值为序列值

创建表时,指定默认值为序列值:
create table ss(sid number default myseq.nextval,sname varchar2(10));
insert into ss(sname) values(‘v’);
select * from ss;


序列值不会因为创建新表而从1开始,所以序列可以应用到多个表中。
序列值永远不会出现重复值。

修改表时指定默认值为序列值

alter table student modify sid number default seq_1.nextval;

通过插入记录使用序列

insert into dept values(dept_seq.nextval,’ MARKETING ‘,SHANDONG’);

修改、删除都可以使用序列值:


一般序列使用在创建表与插入记录上。

6、修改序列

可以修改增量值,最大值,最小值,循环选项,缓存选项.

SQL> ALTER SEQUENCE dept_deptno
	  INCREMENT BY 1
	  MAXVALUE 999999
	  NOCACHE
	  NOCYCLE;

Sequence altered.

不能修改初始值。

7、删除序列

使用 DROP SEQUENCE 语句删除序列.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将 Oracle 序列迁移到 MySQL,需要考虑到两个数据库之间的差异。在 Oracle 中,序列是自动递增的整数值生成器,而 MySQL 中没有直接的序列类型。以下是一个迁移序列的一般步骤: 1. 创建一个 MySQL 表来模拟序列:在 MySQL 中,您可以创建一个包含一个自增列的表来模拟序列。例如,创建一个名为 `sequence_table` 的表,其中包含一个名为 `sequence_value` 的自增列。 2. 导出 Oracle 序列的当前值:使用 Oracle SQL 查询来获取序列的当前值。例如,对于名为 `my_sequence` 的序列,您可以运行如下查询:`SELECT my_sequence.CURRVAL FROM dual;`。 3. 将导出的当前值插入到模拟序列表中:将步骤 2 中导出的序列当前值插入到 MySQL 的模拟序列表中。 例如,使用以下查询将序列当前值插入到 `sequence_table` 表中: ```sql INSERT INTO sequence_table (sequence_value) VALUES (<当前值>); ``` 4. 创建一个在 MySQL 中自增的列:在需要使用序列的 MySQL 表中,创建一个自增列,以模拟 Oracle 序列的行为。例如,创建一个名为 `id` 的自增列。 5. 更新表的自增列的起始值:使用 `ALTER TABLE` 语句来更新自增列的起始值,以与步骤 2 中导出的当前值匹配。 例如,使用以下查询将 `id` 列的起始值更新为模拟序列表中的当前值: ```sql ALTER TABLE your_table AUTO_INCREMENT = <当前值>; ``` 现在,您可以使用 MySQL 表中的自增列来模拟 Oracle 序列的行为。请注意,这只是一种模拟方法,可能无法完全复制 Oracle 序列的所有行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值