用innodb格式,然后可以用事务处理
解决方案 »
- php利用exec调用自己写的sh脚本,使用360或ie浏览器执行不完?
- PHP匹配非关键字加粗的问题
- checkbox传值怎么接收判断
- 高分求某网站分页模拟程序
- 请问上传图片怎么加水印啊?
- MSSQL 语句中SELECT * FROM tb_user WHERE id in(".$_POST['bb'].")可以获得2个以上的传值。MYSQL 中要怎么写??
- 模板技术的讨论
- 无理由散分!PS:大家能帮我看看这个论坛有什么漏洞么
- 在线等.....MYSQL问题!!!插入不了数据!!!????
- 请帮忙!!菜鸟级问题!!
- 急求PHP+MYSQL的新闻程序
- 请问谁有一个繁体PHP版的在线编辑器?急啊!谢谢!
global $tabname;
$sql = "LOCK TABLES {$tabname['order']} WRITE, {$tabname['user']} WRITE , {$tabname['card']} WRITE , {$tabname['cardlog']} WRITE, {$tabname['goods']} READ";
@mysql_query("$sql");
}
function order_UNLOCK() { //全部解锁
$sql = "UNLOCK TABLES";
@mysql_query("$sql");
}
请问gu1dai(异域苍穹......追夢人) ,为什么需要新建一个状态表,我并不是很明白,如何用程序控制!
请问 syre(神仙) ,如果用事务处理该怎么写?
谢谢各位!
在session中记录打开编辑页面的时间 opentime具体流程如下:时间 A用户 B用户 A的session B的session 数据库
7:00 开始编辑 opentime=7:00
7:01 开始编辑 opentime=7:01
7:02 保存结果 updatetime=7:02
7:03 试图保存结果,检查发现updatetime>b的opentime,
提示记录已被修改,是否强行保存或者取回新的记录
咳咳,上面的表格乱了,时间 A用户 ----B用户 ----A的session ----B的session -----数据库
7:00 开始编辑 ---------opentime=7:00
7:01 ------开始编辑 -------------opentime=7:01
7:02 保存结果 ---------------------------updatetime=7:02
7:03 ------试图保存结果,检查发现updatetime>b的opentime,
---------提示记录已被修改,是否强行保存或者取回新的记录
编辑时锁定是不行的,万一那人打开页面,上床睡觉了,别人怎么混上面的方法也可以更仔细一点,比如检查一下那些内容被修改了,一起提示给B用户
楼主的问题是用户进入修改页面之后的状态就难以确定了,
可能他打开页面一个小时后才修改,也可能就不修改了,
所以锁的动作只能发生在提交save后,但这个时候往往需要
执行的只有一个update或几个update/insert, 这个时候
可以使用事务保证数据的一致。楼主关心的不是这个部分,
而是两人或数人先后打开,后保存的人可能面对的是“脏数据”的问题。
编辑时锁定是不行的,万一那人打开页面,上床睡觉了,别人怎么混
-------------------------------------------------------------
当页面onload的时候,PHP程序已经执行完毕了,这时,所有数据锁自动解锁
尽量减少锁定表操作中的代码。一般来说程序花不了几秒的时候。PHP程序执行完 MYSQL就自动解锁了,不会存在什么上床睡觉的问题。PS:使用mysql用事务回滚会很痛苦的说。
7:01 A用户打开编辑处理页面,他看到的值为0,
7:02 B用户打开编辑处理页面,他看到的值也为0
7:03 A用户决定修改值为10, 然后保存,数据库值变为10,
7:04 此时B用户看到的值还是0,因为他没有刷新,数据依旧为旧值
如果B用户此时修改值,并保存,他是在错误的基础上作的更改
这是应该避免的情况。
在上面的情况中,如果A用户保存后不设置任何标志
B用户保存时,将无法检测到数据库的更改,从而导致B用户的修改将覆盖A用户的更改。如果使用锁,只能在保存时加锁,但是在上面的流程里,加锁对该流程无任何影响。如果“在某一个人打开这个订单后,别人就无法在打开他”,
如果A用户打开后非正常结束呢?或者长时间未保存呢?然后再回头看上面的处理方式,应该可行吧
2、由于某种原因用户中断了定单的填写将出现空白定单,在通常情况下该定单号将被废止不再使用
3、如果希望启用被跳过的空白定单(楼主的意思就在这里)。需要经过以下过程
a、列出可用的定单号共用户选择
b、确认用户选中的定单号确实可用。由于可能数个用户同时选择同一定单号,这一步是不可少的
c、对该定单号设置已用标志,这样当其他用户也选择该定单号时将不能通过确认而提示重选
d、输出定单供用户填写
e、用户确认已填定单后结束
f、用户放弃定单的填写时,对该定单号设置未用标志
这个过程是很费时的,要是我就不会选择定单填写而直接填写新定单。我也没有义务为你节省那点数据库空间
如果用时间来作标示不知能解决这个问题吗?
当B试图打开时如果标志位为已打开,提示是否强行打开。
(因为A用户如果非正常结束,会导致标志位锁死)“但是在实际应用中还是会出现同时打开的现象”
这个应该能避免,检查你的update状态位的sql语句是否在合适的地方。---
如果要再复杂一点,可以用ajax定期发信号到服务器保持状态位,一段时间无信号,就认为
已经非正常退出,恢复标志位。时间的长短要掌握好。
a、列出未处理的定单号供选择
b、确认用户选中的定单号确实可用。由于可能数个用户同时选择同一定单号,这一步是不可少的
c、对该定单号设置已审核标志,这样当其他用户也选择该定单号时将不能通过确认而提示重选
d、输出定单供审核
e、确认已审核定单后结束
f、放弃定单的审核时,对该定单号设置未审核标志解决A用户打开后非正常结束的情况
需要有特权用户进行
或者由复审员进行