我用ASP.NET开发网站程序,使用MYSQL 数据库,里面有一个表 user,主键字段类型userid是自增长的,我需要在添加数据的时候需要获取主键值也就是userid,我在把网站部署以后发现了一个问题,在不同的机器上通过浏览器访问网站,比如在A机器通过浏览器上执行了插入语句,那么A机器通过last_insert_id能获得新插入数据的主键值,但是在B机器上面,我通过浏览器直接调用last_insert_id,居然也能获得和A机器一样的数值,我的问题如下
1、在整个MYSQL数据库里面的 LAST_INSERT_ID 所获得的数值是否都是一样的,不管有多个客户端,读出来的都是数据库最新插入自增量类型的数值;
2、会不会出现这样的情况,我在A机器调用 插入语句的时候,B机器也调用了插入语句,那么我A机器获取的 LAST_INSETT_ID其实是B机器产生的值,而不是A机器产生的数值,如果出现这样的情况,那是肯定会导致程序的业务逻辑错误的。如果真是这样的情况,有没有办法解决这个问题
请高手指点。

解决方案 »

  1.   

    如果是在同一个SESSION 中, 则取到的是一个LAST ID, 不同的SESSION中是没有影响的。 如果A,B各用一个不同的SESSION则相互之前并不影响。但如果A本身的两次连接使用了不同的SESSION则不保证。
      

  2.   

    但是我分别在A和B两台机器上使用浏览器访问了网站,这样的情况应该是不同的SESSION,但是为什么B机器我没有执行插入操作,但是仍然能够取得A机器的LAST_ID呢
      

  3.   

    连接池会不会对LAST_ID也有影响,在开发ASP.NET网站的过程中是会用到连接池的
      

  4.   

    简化一下,就是两个用户,A和B,当A进行插入操作后,想获取这个自增的userid的值,而你考虑到这个时候几乎同时再来一个B用户进行插入操作了,用户A所获取的userid值是B用户的值么,这样获取感觉有些不合理。当你插入一条记录会,应该标记这条记录是A还是B所插入的,根据这个值再进行操作吧。