列,以记录插入已存在行的尝试次数


column to keep count of attempts to INSERT a row that already exists

我正在尝试创建一列,并使其计算用户进行的插入尝试次数。

一个例子会让事情变得更清楚:

+-------+----------------------------------+--------------+
| text  |            md5                   | insert_times | 
+-------+----------------------------------+---------+----+
| 123   | 202cb962ac59075b964b07152d234b70 |     834      |  
| abc   | 900150983cd24fb0d6963f7d28e17f72 |     923      |      
+-------+----------------------------------+--------------+

其中CCD_ 1是主键
每当用户尝试插入123(由于123已经存在,所以使用INSERT IGNORE不获取错误消息)时,insert_times将增加1,从而跟踪在表中插入已经存在的文本的尝试次数。

有什么制作方法的想法吗
我无法制作触发器,因为我的数据库主机(godaddy)不允许使用触发器
如果在mysql中无法做到,我可以在php的帮助下完成吗?

要在一个简单的查询中做到这一点,只需在MySQL中使用ON DUPLICATE KEY UPDATE函数。这样,您只需在"重复"行中执行INSERT,然后执行需要更新的内容。例如:

INSERT INTO tbl (text, md5, insert_times) VALUES ('abc', {MD5}, 0}
ON DUPLICATE KEY UPDATE insert_times+1;

然而,我个人更喜欢PHP方法,因为在我的大多数查询中,事情通常不像简单的更新那样简单:

$res = mysql_query(sprintf("SELECT text FROM tbl WHERE text = '%s'", $text));
if (mysql_num_rows($res) != 0)
{
    mysql_query(sprintf("UPDATE tbl SET insert_times+1 WHERE text = '%s'", $text);
}
else
}
    mysql_query(sprintf("INSERT INTO tbl SET text = '%d', md5 = '%s'", $text, $hash);
}

如果需要的话,这种方法还有更多的空间来触发其他事件/函数。

检查该特定键的表中是否已经存在该记录,如果存在,则将insert_times值更新为text0,否则创建一个新记录。

您可以在脚本中放入一些逻辑,在尝试插入行之前检查行是否存在。如果不存在,请执行insert查询。如果是,则递增insert_times字段。

您还可以保留一个单独的insert_attempts表,该表没有唯一性约束。对于每一次插入行的尝试,都要执行两个查询:一个是现在正在执行的查询,另一个是insert_attempts。insert_attempts可以插入一个新行,然后用相关ID计数()行,也可以只检查与该ID相关的编号并更新它。