主从延时一些思考

简单介绍主从延时场景。

业务场景:给用户发送促销活动代金券

技术实现步骤:
step 1 : 创建促销活动
step 2 : 创建多种代金券类型
step 3 : 给用户发送代金券

对应表结构:

1.活动表activity:
    id(自增),name,...

2.代金券表coupons:
    id(自增),name,money,...

3.用户发放表
    id(自增),aid,cid

问题:
在 step2 -> step3 过程中,创建代金券类入库后,需要拿到代金券类型自增id然后给用户发送。
那么,最容易想到的方法就是插入表后查一下该表(通过唯一索引,最大id等),拿到代金券信息,如果主从存在延时,那么插入代金券表后立即查表可能返回空或者一条不理想的结果等。

解决方法:插入的数据除了自增id其余数据我们都是知道的,那么问题转化为拿到本次插入id即可。可以使用 lastinsertid() 来获取最后一次插入id。

第一 、该函数是基于Connection对象的,返回的值是该Connection对象产生对影响AUTO_INCREMENT列的最新语句第一个AUTO_INCREMENT值的。这个值不能被其它Connection对象的影响,即它们产生它们自己的AUTO_INCREMENT值。

第二 、LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回表b中的Id值。

第三 、 使用一条INSERT语句插入多个行, LAST_INSERT_ID() 只返回插入的第一行数据时产生的值

你可能感兴趣的:(主从延时一些思考)