Sequence的介绍

Sequence是数据库系统按照一定规则自动增加的数字序列。这个序列一般作为代理主键(因为不会重复),没有其他任何意义。

Sequence是数据库系统的特性,有的数据库有Sequence,有的没有。

比如:Oracle、DB2、PostgreSQL数据库存在Sequence,

MySQL、SQL Server、Sybase等数据库不存在Sequence;

根据我个人理解,Sequence是数据中一个特殊存放等差数列的表,该表受数据库系统控制,任何时候数据库系统都可以根据当前记录数大小加上步长来获取到该表下一条记录应该是多少,这个表没有实际意义,常常用来做主键用,非常不错,呵呵,不过很郁闷的各个数据库厂商尿不到一个壶里--各有各的一套对Sequence的定义和操作。在此我对常见三种数据库的Sequence的定义和操作做一个对比和总结,以便日后查看。


一、定义Sequence

定义一个seq_test,最小值为10000,最大值为99999999999999999,从20000开始,增量的步长为1,缓存为20的循环排序Sequence。


Oracle的定义方法:
create sequence seq_test
minvalue 10000
maxvalue 99999999999999999
start with 20000
increment by 1
cache 20
cycle
order;



DB2的定义方法:
create sequence seq_test
as bigint
start with 20000
increment by 1
minvalue 10000
maxvalue 99999999999999999
cycle
cache 20
order;



PostgreSQL的定义方法
create sequence seq_test
increment by 1
minvalue 10000
maxvalue 99999999999999999
start 20000
cache 20
cycle;



二、Oracle、DB2、PostgreSQL数据库Sequence值的引用参数为:currval、nextval,分别表示当前值和下一个值。

下面分别从三个数据库的Sequence中获取nextval的值。


Oracle中:seq_test.nextval 
例如:select seq_test.nextval from dual;


DB2中:nextval for SEQ_TOPICMS

例如:values nextval for seq_test;


PostgreSQL中:nextval(seq_test)
例如:select nextval(seq_test);



三、Sequence 与  indentity  的区别与联系

Sequence 与  indentity 的基本作用都差不多。都可以生成自增数字序列。
Sequence 是数据库系统中的一个对象,可以在整个数据库中使用,和表没有任何关系;

indentity 仅仅是指定在表中某一列上,作用范围就是这个表。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`sequence.start()`是在UVM(Universal Verification Methodology)中用于启动一个sequence执行的方法。 在UVM验证环境中,`sequence.start()`方法用于开始执行一个sequence。一个sequence是由继承自`uvm_sequence`类的自定义sequence类创建的,它包含了一系列的操作步骤,用于验证设计被测对象(DUT)的功能或性能。 当调用`sequence.start()`方法时,以下事件会发生: 1. 生成下一个transaction:`sequence.start()`方法会生成并返回下一个transaction,作为测试序列的起始点。这个transaction会被传递给相应的sequencer。 2. 启动transaction的驱动:返回的transaction会被传递给sequencer,并由sequencer驱动到DUT的输入端口,以执行相应的操作。 3. 监控sequence的执行进度:一旦transaction被传递给sequencer,UVM framework会自动监控sequence的执行进度。它会检查是否还有更多的transaction需要执行,并根据预定的顺序和优先级选择下一个要执行的transaction。 需要注意以下几点: - 在调用`sequence.start()`之前,需要确保相应的sequence已经被创建和配置,并且已经与sequencer建立了联系。 - `sequence.start()`方法通常在Testbench中的test类中被调用,以启动整个测试序列的执行。 - 可以对不同的sequence设置不同的启动条件和触发事件,以满足测试的需求。 通过调用`sequence.start()`方法,可以启动一个sequence的执行,并通过sequencer驱动transaction到DUT,从而进行功能验证或性能评估。这样可以实现测试序列的灵活性和自动化,提高验证效率和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值