Mysql 选择一行时增加一个值

Mysql 选择一行时增加一个值,mysql,sql,Mysql,Sql,有什么方法可以从本质上跟踪从SQL表中提取一行的次数 例如,在我的表中,我有一个列计数。每次SQL语句提取特定行(我们称之为rowA)时,rowA的“count”值增加1 无论是在表的设置中还是在语句中都可以,但我找不到类似的内容 我知道我可以将它分成两条语句来实现相同的功能,但我更愿意只发送一条。最好的方法是将表的读取访问限制为存储过程。 此存储过程将采用各种输入(筛选器选项)来确定返回哪些行 在返回行之前,它们的计数器字段将递增 请注意,update和select命令共享同一where子句

有什么方法可以从本质上跟踪从SQL表中提取一行的次数

例如,在我的表中,我有一个列计数。每次SQL语句提取特定行(我们称之为rowA)时,rowA的“count”值增加1

无论是在表的设置中还是在语句中都可以,但我找不到类似的内容


我知道我可以将它分成两条语句来实现相同的功能,但我更愿意只发送一条。

最好的方法是将表的读取访问限制为存储过程。

此存储过程将采用各种输入(筛选器选项)来确定返回哪些行

在返回行之前,它们的计数器字段将递增

请注意,update和select命令共享同一where子句

create procedure Select_From_Table1
  @pMyParameter varchar(20), -- sample filter parameter
as

-- First, update the counter, only on the fields that match our filter
update MyTable set Counter = Counter + 1 
where
  MyFilterField like CONCAT('%', @pMyParameter, '%')  -- sample filter enforcement

-- Now, return those rows
select
  *
from
  MyTable
where
  MyFilterField like CONCAT('%', @pMyParameter, '%')  -- sample filter enforcement

一个不错的选择是在数据访问层的应用程序端处理它。

在mysql中,应该使用
CONCAT(“%”,@pMyParameter,“%”)
而不是
+
进行连接。我建议使用触发器,而不是试图限制对存储过程的访问。我不认为select语句可以使用触发器,这就是我建议使用SP或数据层的原因。