怎么使mysql数据值提交时自动加1

希望某一字段的筛选值在提交时自动加1
mysql数据库
没法在数据库设置,表里已有主键和自增长字段,并且也不是每一次提交都需要加1

第1个回答  2017-11-05
使用mysql的触发器实现这个功能
不过在实际开发中,mysql的触发器,存储过程这些高级功能很少用,会累死mysql的;你说的这个功能在应用层做吧,分2次提交,比较靠谱,要加上事物处理
第2个回答  2014-10-21

你说的提交,是指更新的时候嘛 ?如果是的话,给你一个思路,去看看定义字段的时候的onupdate,他表示再这一行被更新的时候执行的操作!

追问

不是更新,是新提交,那个值是该字段的最大值

此提交类似于在自增长字段里的提交,但我不能将该字段设置为自增长字段

追答

是插入的时候嘛?那就是 oncreate !

追问

能不能在页面上通过js或者其他什么手段加1后再提交

追答

呵呵 , 你是想用程序控制,那就更简单了,我不知道你的后台是什么语言写的,不太好给你代码,但是思路绝对就简单的多了。首先你一定要确定你的这个字段是int类型或者是什么数字类型的,否则如果是varchar类型的会出问题,然后呢,你需要查这张表里面的这个字段目前已经达到了多少,假如说数据表名:testtable   然后那个字段假如说 叫。。。叫什么呢,就叫 abc吧!哈哈。

然后在插入的时候:

分开写,先查最大值,然后再加1 再插入

select abc from testtable order by abc desc limit 1

这样能够查出当前最大值,你拿到最大值之后再插入的时候加1的操作就不用我教你了吧。


但是你要知道,这种方式虽然可行,但是并不安全,如果两个线程同时执行,可能会查出同一个最大值,导致最后加1之后的值也相同,你自己斟酌一下吧。


或者你要知道,数据库本身跟程序不挂钩的,其他程序可能也在用你这个数据库,如果他也按照同样的方式来插入,你查出一个最大值之后没等插入新的最大值呢,他就查到了跟你一样的最大值,这样也是会出问题的。

追问

谢谢你的热心帮助。

我也知道两个线程同时执行时可能的错误,但现在老板急着要,先应付一下吧,以后慢慢再想招。

现在的问题恰恰是“拿到最大值之后在插入的时候加1的操作”,我不知道该怎么将最大值加1

我使用php+mysql写的。现在我在前台调用最大值的代码是 该怎样将它改成加1?? 不好意思,我是初学,还很肤浅

追答

我不是做PHP的,所以你写的我也不懂,咱们相同的地方只有sql语句可以交流,

加1 没有你想那么复杂,像上面说的,你插入的时候insert into testtable values(xx,xx,xx)

假如你先前查到的最大值是 4 那么你插入的时候,假如你的insert语句第三个参数就是abc字段那就

insert into testtable values(xx,xx,5);这样就完了嘛。

就是说你的select abc from testtable order by abc desc limit 1 查出来一个4

那么insert into testtable values(xx,xx,5);

追问

谢谢你的热心帮助。

是我笨拙,我还没有搞定。

我现在已经找到了这个值,它不是具体的阿拉伯数字,而是一个代码。我是通过倒序第一找到的。

还有你说,将4改成5,它不能人工,必须由程序完成,我就是不明白怎样自动完成这个加法过程。

真不好意思屡屡的麻烦你了,我再加感谢!!!

追答

4编程 5  ,大哥呀 4+1 不就等于5了吗? 我实在不知道你想问啥,不查出来的数 加 1 不就OK 了吗?

追问

我现在是要把这个值(5)作为数据向数据库提交,但是现在没有5,只有4。我总不能将“4+1”作为数据提交吧?

我实在没法想也试了一下,把“4+1”提交后,数据库只识别成“4”

不好意思,还要烦你。

追答

我汗呐!!!  你我不是让你"4+1" 而是4+1以数字形式相加。他不就变成5了嘛

追问

感谢“东东程序猿”的热情帮助! 在你的帮助下我终于弄明白了—— 原来是: 改成以后: 其实我就是不知道这个“+1”应该怎么写,写在哪儿? 非常感谢你不厌其烦的帮助!!!

追答

不是我不给你上代码,是PHP 我也不会呀,我只能给你提供思路和sql php的东西我也看不懂。。。我本身是搞java web的


本回答被提问者和网友采纳