有两种应用情况求SQL语句。

madmanahong 2010-12-17 01:12:29
1。有一个计数器,每次减一,减到0失败。
譬如图书馆借阅系统。哪天看了一篇文章,反而被搞糊涂了。


2。有个表,每次调用插入一条语句,只能同时向这个表插入50条语句,超过则失败。


如果保证数据完整性?架设有几十台server同时操作这个库。


还有一种情况不知道我理解的对不对,就是有主键插入记录的时候,我们没有必要首先select去检测是否存在(因为即使select也不一定准),只需要根据插入判断返回值就行了。对吧?

...全文
79 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuoxingyu 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 madmanahong 的回复:]
第一种方法我看过一篇文章是使用

select .. for update

貌似是其进行了行锁。

谁能解释使用一下啊?
[/Quote]

是的。。加了个X锁,必须自己操作完成,释放X锁后,别人才能操作。
madmanahong 2010-12-17
  • 打赏
  • 举报
回复
第一种方法我看过一篇文章是使用

select .. for update

貌似是其进行了行锁。

谁能解释使用一下啊?
madmanahong 2010-12-17
  • 打赏
  • 举报
回复
第2种方法除了触发器还有没有别的方法?用事务也可以吧?
插入后select一下数目,然后rollback?
ACMAIN_CHM 2010-12-17
  • 打赏
  • 举报
回复
[Quote]2。有个表,每次调用插入一条语句,只能同时向这个表插入50条语句,超过则失败。[/Quote]使用触发器。


MySQL 中如何在触发器里中断记录的插入或更新?
http://blog.csdn.net/ACMAIN_CHM/archive/2009/07/25/4380183.aspx
ACMAIN_CHM 2010-12-17
  • 打赏
  • 举报
回复
[Quote]1。有一个计数器,每次减一,减到0失败。[/Quote]

START TRANSACTION;
update xxx set yyy=yyy-1;
select yyy into varYYY from xxx;
IF varYYYY>0 THEN
COMMIT:
ELSE
ROLLBACK;

iihero_ 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 madmanahong 的回复:]

还有一种情况是有一个人同时只能加入一个社团。

加入社团后只是在那个社团表中插入一条记录。如何防止此人同时加入多个社团?
[/Quote]

在该表中,check (person_id, community_id) unique就可以限制了
iihero_ 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 madmanahong 的回复:]
1。有一个计数器,每次减一,减到0失败。
譬如图书馆借阅系统。哪天看了一篇文章,反而被搞糊涂了。


2。有个表,每次调用插入一条语句,只能同时向这个表插入50条语句,超过则失败。


如果保证数据完整性?架设有几十台server同时操作这个库。


还有一种情况不知道我理解的对不对,就是有主键插入记录的时候,我们没有必要首先select去检测是否存在(因为即使selec……
[/Quote]
1. check 约束,强制>0
2. 50个并发??不解,限制并发数,能描述的具体一点吗?
madmanahong 2010-12-17
  • 打赏
  • 举报
回复
还有一种情况是有一个人同时只能加入一个社团。

加入社团后只是在那个社团表中插入一条记录。如何防止此人同时加入多个社团?

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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