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`) VALUESn ".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的范围(这发生在我身上).
INSERT失败的原因是有另一列具有UNIQUE约束,INSERT尝试在该列中插入重复值.阅读我链接的手册页,了解为什么这么重要. 修复是在尝试INSERT之前首先执行SELECT以检查值的存在.这违反了常见的智慧,即只是尝试INSERT并处理任何重复的关键字异常.但是在这种情况下,失败的INSERT的副作用会导致auto-inc值丢失.执行SELECT首先消除了几乎所有这些异常. 但是,您也必须处理可能的异常,即使您先选择SELECT.你还有竞争条件.
在你的情况下,我想知道为什么这么多插入是失败的.我怀疑像许多SQL开发人员一样,在AJAX处理程序中执行INSERT之后,您不会检查成功状态,因此您永远都不知道这么多的SQL Server失败. 他们可能仍然失败,您只是不会因为副作用而失去汽车公司的身份.你应该真正诊断为什么会发生这么多的失败.您可能会生成不完整的数据,或者需要运行更多的事务. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |