mysql某字段设置为“唯一”后,就无法再插入相同记录了吗?

wzwen 2011-05-01 12:55:41
今天发生了一件让人感觉不可思议的事情。

我有个站,会员用支付宝在线充值后,居然重复入账两次。

而我在支付宝充值成功后的返回文件中已经写了判断语句,如果入库前查询到该订单号存在于表中,就拒绝入库。

奇怪的是,今天居然有人充值一次,却两次入库。

等于说这个人充了100元进来,结果系统给他加了200元。

为什么加了判断词句还存在这样的情况呢?

后来,我就加会员充值记录的表中的订单号(这个是唯一的)设为了“唯一”属性。

因为这个订单号是支付宝的交易号,肯定是唯一的。

这样以后是不是不会再发生同充值一次,入库两次的记录了呢?

或者大家有什么好的方法学习一下。
...全文
457 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
natici 2011-05-03
  • 打赏
  • 举报
回复
lz的意思是说,之前发生这情况的时候,数据库字段没设置unique,而只是用php自行判断了一次。
在发生情况后才设置unique的。
kaifadi 2011-05-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wzwen 的回复:]

引用 1 楼 falizixun2 的回复:

加了unique以后还出现过这种情况没。我觉得估计是你UPDATE的时候,数据库有2个地方有同一个订单号。这样的话UPDATE以后,就等于更新了2个地方,叠加以后100就变成200,如果有3个地方,也许就是300了!问题起源我觉得还是在于表的设计上。也就是插入部分就是有分歧的。具体情况不知道。但是我只是怀疑有这种可能。

现在加了uniqu……
[/Quote]
现在加了unique,还没有出现
惟独今天凌晨0点的时候。

加了唯一后,出现还是没出现呢?惟独?
或者你的数据库有没有加额外的事务处理!
LuciferStar 2011-05-01
  • 打赏
  • 举报
回复
unique之后应该会正常,如果再不正常,就是数据库的bug了。
wzwen 2011-05-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 falizixun2 的回复:]

加了unique以后还出现过这种情况没。我觉得估计是你UPDATE的时候,数据库有2个地方有同一个订单号。这样的话UPDATE以后,就等于更新了2个地方,叠加以后100就变成200,如果有3个地方,也许就是300了!问题起源我觉得还是在于表的设计上。也就是插入部分就是有分歧的。具体情况不知道。但是我只是怀疑有这种可能。
[/Quote]
现在加了unique,还没有出现。

订单号插入表之前,我有个语句判断表中是否存在该订单号,如果存在,就不会再插入了。

如果不存在,就将订单号插入到充值日志表中,然后再更新会员的余额。

这个功能我自己用支付宝充值测试的时候,返回到网站的地址,我直接刷新多次,都没有出现过入库两次的现象,惟独今天凌晨0点的时候。

可能今天0点的时候,情况有些特殊。

因为每天凌晨,服务器都会进行整站备份,这个时候系统非常繁忙,负载很高,一度达到20左右

而我今天凌晨访问网站,慢得要死。

而正在此时,有个会员充值了,我怀疑mysql数据库在操作的时候,会不会和系统繁忙有关呢?导致灵异事件发生。
zmzkkk 2011-05-01
  • 打赏
  • 举报
回复
kaifadi 2011-05-01
  • 打赏
  • 举报
回复
加了unique以后还出现过这种情况没。我觉得估计是你UPDATE的时候,数据库有2个地方有同一个订单号。这样的话UPDATE以后,就等于更新了2个地方,叠加以后100就变成200,如果有3个地方,也许就是300了!问题起源我觉得还是在于表的设计上。也就是插入部分就是有分歧的。具体情况不知道。但是我只是怀疑有这种可能。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧