php – 自动递增跳数?

前端之家收集整理的这篇文章主要介绍了php – 自动递增跳数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
注意:我是数据库PHP的新手

我有一个订单列设置为自动递增和唯一.

http://f.cl.ly/items/3u2D1l1j2l0j0A16450I/Image%202013-07-22%20at%207.00.15%20PM.png

在我的PHP脚本中,我使用AJAX获取新数据,但是问题在于,该命令是跳过数字,并且显着增加,从而迫使我在插入数据时手动更新数字.在这种情况下,我会最终更改782到38.

http://f.cl.ly/items/0N2J1w1Y310E2H2o0m05/Image%202013-07-22%20at%206.49.20%20PM.png

$sql = "INSERT IGNORE INTO `read`(`title`,`url`) VALUES\n ".implode( "\n,",array_reverse( $sql_values ) );

如何让它增加1?

如果INSERT失败,MysqL 5.1及更高版本中的默认auto_increment行为将“丢失”自动递增值.也就是说,它每次递增1,但如果INSERT失败,则不会撤消增量.失去约750个价值但并不是不可能(我为每个INSERT成功跳过1500的网站征求意见)是罕见的.

您可以更改innodb_autoinc_lock_mode = 0以使用MysqL 5.0行为,并避免在某些情况下丢失值.详见http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html.

另一件事是检查auto_increment_increment配置变量的值.默认情况下为1,但您可能已更改此选项.再次,非常罕见的将其设置为高于1或2,但可能.

我同意其他评论者,autoinc列旨在是独一无二的,但不一定是连续的.你可能不应该担心这么多,除非你正在快速提高autoinc值,以免超出INT的范围(这发生在我身上).

How exactly did you fix it skipping 1500 for ever insert?

INSERT失败的原因是有另一列具有UNIQUE约束,INSERT尝试在该列中插入重复值.阅读我链接的手册页,了解为什么这么重要.

修复是在尝试INSERT之前首先执行SELECT以检查值的存在.这违反了常见的智慧,即只是尝试INSERT并处理任何重复的关键字异常.但是在这种情况下,失败的INSERT的副作用会导致auto-inc值丢失.执行SELECT首先消除了几乎所有这些异常.

但是,您也必须处理可能的异常,即使您先选择SELECT.你还有竞争条件.

You’re right! innodb_autoinc_lock_mode=0 worked like a charm.

在你的情况下,我想知道为什么这么多插入是失败的.我怀疑像许多sql开发人员一样,在AJAX处理程序中执行INSERT之后,您不会检查成功状态,因此您永远都不知道这么多的sql Server失败.

他们可能仍然失败,您只是不会因为副作用而失去汽车公司的身份.你应该真正诊断为什么会发生这么多的失败.您可能会生成不完整的数据,或者需要运行更多的事务.

原文链接:https://www.f2er.com/php/131576.html

猜你在找的PHP相关文章