mysql Lock tables 效率问题.(有建设性则给分.)

loveyoumore 2005-04-04 03:03:57
query("select count(*) from t1 where con = '1'")

如果count出来的数小于一定数值则:

query("insert into t1 '.....'");

显然select和insert是有时间间隔的,在几千人同时操作该表时,我如何能防止写入的行数超过设定数?

lock tables应该可以解决问题,但是一旦我lock了,其他几千人就不能写,这样效率会不会好低?有没有

办法解决?
...全文
295 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
-神仙- 2005-04-05
  • 打赏
  • 举报
回复
效率是没办法的
flyonet 2005-04-05
  • 打赏
  • 举报
回复
前提是你是用了InnoDB、BDB等等事务安全表。

mysql_query("BEGIN");
mysql_query("select * from web_info for update");
if (!mysql_query("INSERT web_info set info_title ='dalslsls'")) {
mysql_query('ROLLBACK');
} else {
mysql_query('COMMIT');
}

效率低是肯定的。
loveyoumore 2005-04-04
  • 打赏
  • 举报
回复
楼上的方法好像也不行,因为我这个表中的数据是多种的,所以insert_id不能判断插入是否有效~~
faisun 2005-04-04
  • 打赏
  • 举报
回复

先 INSERT ,得到 insert_id ,再查询行数.
如果行数超过, delete 之.
zairwolfd 2005-04-04
  • 打赏
  • 举报
回复
你在每次插入之前都进行读取判断,即使几千人操作也没什么问题吧。

21,891

社区成员

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

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