Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL插入创建多行_Mysql_Perl - Fatal编程技术网

MySQL插入创建多行

MySQL插入创建多行,mysql,perl,Mysql,Perl,我正在运行Apache和Perl的网站上的CentOS服务器上使用MySQL。我看到这种行为(模拟): 我的理论是Perl CGI脚本可以并发执行(可能是由于双击、浏览器刷新等原因),因此插入会执行两次。这是相当罕见的,但发生时会引起问题 在这种情况下,除“id”之外的所有列都具有相同的值。除列“id”外,允许重复值 有没有办法防止这种行为?如果您从CentOS存储库安装了Perl、Apache和MySQL,并且没有进行任何彻底的配置更改,那么您很可能在平台中发现错误。您使用的是mod_perl

我正在运行Apache和Perl的网站上的CentOS服务器上使用MySQL。我看到这种行为(模拟):

我的理论是Perl CGI脚本可以并发执行(可能是由于双击、浏览器刷新等原因),因此插入会执行两次。这是相当罕见的,但发生时会引起问题

在这种情况下,除“id”之外的所有列都具有相同的值。除列“id”外,允许重复值


有没有办法防止这种行为?

如果您从CentOS存储库安装了Perl、Apache和MySQL,并且没有进行任何彻底的配置更改,那么您很可能在平台中发现错误。您使用的是mod_perl还是PSGI,还是CGI?您是否从CPAN源安装了任何Perl模块,或者所有模块都是通过yum安装的


一个愚蠢的解决方案,你可以考虑在脚本中生成某种类型的随机数(一次使用字符串或数字),为它添加一个列,并在该列上添加一个唯一索引,并将其与其他表单数据一起插入。如果发现重复的密钥错误,请忽略它。这不能解释发生了什么,但可以阻止它发生。

您是否可以控制脚本并对其进行修改,还是纯粹在数据库层上查找内容?斯文,这是我的脚本。我写的。它使用Perl MySQL DBI。请显示Perl脚本的相关部分。作为解决方案,除了“代码> ID <代码>之外,您还可以使用,但这只是一个创可贴;您应该真正找出根本原因。一件事:如果您发布表单以插入新行,您应该将用户重定向到下一页。所以用户不能意外地重新加载页面/运行它两次。@MonkeyZeus这是一个随意的评论,所以我不怀疑它可能是错的,但请详细说明。
mysql> describe product;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(10)      | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> insert into product (name) values ('Widget');
Query OK, 1 row affected (0.00 sec)

mysql> insert into product (name) values ('Thing');
Query OK, 1 row affected (0.00 sec)

mysql> select * from product;
+----+--------+
| id | name   |
+----+--------+
|  1 | Widget |
|  2 | Widget |
|  3 | Thing  |
+----+--------+
3 rows in set (0.00 sec)