php数据库同时写入,请问并发写入数据库,如何保持唯一性啊

//a,b两个请求并发 注册相同用户名 username='myname'$is_user = "SELECT username FROM users WHERE username='myname'";if(!$is_user){echo ("INSERT INTO users (username) VALUES ('myname')");}

假如表中字段未设置唯一索引,程序上如何控制唯一性啊

a,b同时查询表,结果是可以注册的,所以都执行了insert,但用户名相同,这样数据就不唯一了。是会这样吗,如何避免呢?

回复讨论(解决方案)

数据库加锁操作

数据库加锁操作

读锁 好像是共用的啊,大家可以同时读,所以出现了错误结果。

怎么不加个unique key呢。

最简单的方法数据库加unique key

复杂一点:

单台web机器,使用本地文件锁flock,一个用户名一个本地文件

多台机器 ,使用memcache inc 实现锁机制 http://ju.outofmemory.cn/entry/48924

了解了,谢谢各位。

我也只是偶尔想到的,如果不是唯一索引,用什么方法来解决这个问题。

最简单的方法数据库加unique key

复杂一点:

单台web机器,使用本地文件锁flock,一个用户名一个本地文件

多台机器 ,使用memcache inc 实现锁机制 http://ju.outofmemory.cn/entry/48924

再请教一下 memcache。

$v = $memcache->get ( $key );

if ($v === false) {

$memcache->set ( $key, 0 );

}

$index = $memcache->increment ( $key, 1 );

两个并发请求a,b 会同时get($key)吗

然后a set($key),再b set($key) 不就被后者覆盖了吗

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值