大牛们:关于mysql数据事务处理,感谢帮忙
在利用数据库事务处理会员注册时遇到一个问题。。
数据库是MYSQL;事务隔离级别是:REPEATABLE READ
假设注册账号为“tmp”
php代码:
页面代码:
$isreg=$user->get_isreg(); //get_isreg()函数主要查询user表,判断有没有name='tmp',如果有则返回false,没有返回true;
if($isreg)return $user->set_reg();
===========================================================
调用的方法:
function set_reg()
{
mysql_query("BEGIN");//开启事务
插入会员表();
if(插入是否成功)
{
mysql_query("COMMIT");
return true;
}
else
{
mysql_query("ROLLBACK");
return false;
}
}
=====================================
好了问题出来了,假设“插入会员表(); ”这个函数需要执行1分钟才结束(注意:假设)
A用户申请注册TMP,在8:01分01秒的时候提交了,这时候数据库查询没有,则利用事务执行注册程序。
B用户也同时申请注册TMP,在8:01分02秒的时候,这时候也去查询了,也没查到(虽然执行了A的注册,但函数需要1分钟时间 所以还没执行完呢),这时候程序就自然而然进行B的注册。
//插入会员表(); 这个函数主要是插入各种表的操作,比如基本信息表,积分表,空间表,好友表,等等等等
结果出来了 就是注册了2个名称相同的会员数据。
总不能在注册的时候锁定会员表吧.
请问该如何解决这个问题呢,感谢各位