|
1
2
这是你可以用mysql客户端和两个窗口来测试自己的东西。 打开window 1,进入mysql客户机,创建一个表,并用将提交的值填充它。
现在开始转换。插入值4,如您的示例所示。
不要提交最后一次插入。 打开window 2,进入mysql客户端,为会话设置事务隔离,查询数据范围。
这是因为在可序列化级别,所有select查询都隐式地尝试获取共享锁,就像您添加了
现在在窗口1中,提交事务(确保在窗口50秒后超时2次之前执行此操作):
窗口2立即返回,现在它看到了完整的数据值集。
现在尝试在窗口1中插入新行:
这
范围
最后,窗口1将超时,如果窗口2没有完成其事务并释放其gap锁:
所有这些都与自动增量无关。正如您在我的示例inserts中看到的,我无论如何都要重写自动增量。不管这些行中的值是如何生成的,它只与行和间隙上的锁有关。 我还要指出,您试图解决的问题本质上是一个发布/订阅模型,它更适合于 message queue technology ,而不是RDBMS技术。您应该考虑使用消息队列作为RDBMS的补充技术。 |