总会遇见这样的问题,一些信息需要得到点击次数,因此出现了,update与insert选择的模棱两可。如果update,需要查询一遍,然后再更新,最后要统计次数时可以直接查询。如果insert,只要有点击,就insert,最后统计时来个conut
请高手和管理员帮忙分析下~~~~~
请高手和管理员帮忙分析下~~~~~
解决方案 »
- 逻辑上有点混乱,希望达人指点(主要是数据库的设计上,由一个用户一组变为一用户多组时有点乱了...)
- oracle sql select 的问题
- 急,实现KEY值的自增长
- 查寻效率及索引方面请各位急救!
- 最菜的问题:单位系统换成oracle7.3,请问安装的问题?
- 第二个问题 没分了
- 请问:oracle 数据库的“推”与“拉”是怎么实现的 ?
- oracle9i数据库备份的问题??????????
- 怎样用C#或VB对一个远程oracle数据库进行操作?放oracle的机子是一个外地域
- sqlserver 里的where '1=1' and username="my" 在oracle里怎么写
- 请教ORacle 的一个数据库转移的问题?
- oracle语句如何强制走索引
不是吧,你在哪本书上看到UPDATE是要删除数据的。
你的问题,我理解成在生产环境下希望获取一条记录的更新次数,或者说的操作次数。数据量大不大不重要,重要的是看数据的并发操作量。
如果你说的并发是对同一条记录,那你还是用INSERT,因为你的UPDATE会锁住你UPDATE的where条件所选定的记录,对于相同的其他操作它是不会处理的。
如果你说的并发是对同一张表不同记录的并发,那你就可以使用UPDATE,毕竟这个也是最节省磁盘空间。如果你平时只对一条记录的操作次数字段进行操作,还有一个办法可以:
select * from t where id='123' for update wait 2
update t set times = times+1;就是说,每次执行时,如果记录被锁,则等待两秒钟,如果2秒钟后还没解锁,则报错。
愚见,希望有帮助。
没有太明白你的意思。如果是要统计点击次数可以直接
update XXX set count = count +1 where id = XXX;insert和update,在应用里应该是可以判断出来的。所以也不存在你说的问题叻。至于并发的顾虑
可以参考一下这个帖子
http://www.inthirties.com/thread-88-1-1.html
我个人见解,大家听听。这样的统计要看设计:
如果表的设计是在一个表里面:
举例:帖子ID,帖子内容,发表时间,发帖人,点击次数,如果用update会好点,直接指定update XXX set count = count +1 where id = XXX;但是如果这个设计也有两个表的
表一: 帖子ID,帖子内容,发表时间,发帖人
表二:帖子ID,点击时间,点击次数
如果用update,就是update表二,那就需要先查询一下,如果有就update,如果没有就update是错的。那么体来说就是需要先查询(select)再update,如果没有还需insert~~~~
这样是不是不如直接点,一旦点击就insert,最后统计的时候count一下这个问题觉得又延伸到设计问题了,大家来了,都看看吧~~~
选update吧,又一个点击次数字段submit_count number,当点击一次的时候,submit_count值就+1。
这里程序上,可以这样实现
你新建一条帖子的时候,应该就在点击率的表里insert一条记录了。点击的时候,关于点击量就只需要update这个表就可以了。如果帖子删除,就直接删除这两个表里的记录就可以了。update的时候,如果是在删除的时候,同时有另一个请求在update这个记录,按上面的update方式,也不会报错,只不过update影响的结果为0而以,也不会死锁,删除帖子以后,一个入口就不存在了,所以后面也就不需要担心update的问题叻。