Sybase缺少插入

时间:2017-05-22 21:31:42

标签: sybase sybase-asa sybase-ase15

我们有一个sybase ASE 15 DB并且上周发生了一些奇怪的事情,它看起来像插入后可能错过了新插入的行上的选择

我们的表使用开始/结束时间戳进行里程碑化;一个例子是

id number,
name varchar(32),
start timestamp,
end timestamp;

"更新"将是现有结束的更新;和新记录的插入;例如

id name  start               end
1  alice 2010-01-01 00:00:00 3000-01-01 00:00:00

更新将成为

id name  start               end
1  alice 2010-01-01 00:00:00 2010-01-01 08:00:00
1  bob   2010-01-01 08:00:00 3000-01-01 00:00:00

并且更新和插入都在同一个事务中完成

现在使用行锁定和索引(id,start,end),当选择使用隔离级别1时,使用select query:

select * from table where id=1 and start<=getdate() and end>getdate()

理想情况下,在更新期间运行select时,它应该阻塞直到提交并返回最新的行。

但是在我们的例子中,我们看到了阻塞,但没有返回任何行!

这对我来说意味着当select运行时,它会看到更新而不是insert;那可能吗?

是否可能以某种方式提交,插入新行但索引未更新因此select没有看到新行?

谢谢

1 个答案:

答案 0 :(得分:0)

如果这是Sybase ASE,那么您必须选择与&#39; timestamp&#39;不同的数据类型。 - 这是ASE中的一种特殊数据类型,与实际日期/时间无关。使用&#39; bigdatetime&#39;或者&#39; datetime&#39;代替。