Chr*_*ton 12 php mysql database phpmyadmin
注意:我是数据库和PHP的新手
我有一个order设置为auto increment和的列unique.
http://f.cl.ly/items/3u2D1l1j2l0j0A16450I/Image%202013-07-22%20at%207.00.15%20PM.png
在我的PHP脚本中,我使用AJAX来获取新数据,但问题是,order跳过数字并且显着更高,因此迫使我在插入数据时手动更新数字.在这种情况下,我最终会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 ) );
Run Code Online (Sandbox Code Playgroud)
如何让它增加+1?
Bil*_*win 20
如果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_incrementconfig变量的值.它默认为1,但您可能已经更改了此项.同样,将它设置为高于1或2的值非常罕见,但可能.
我赞同其他评论者,autoinc列旨在是独特的,但不一定是连续的.你可能不应该担心这么多,除非你如此迅速地推进autoinc值,以至于你可能超出了INT的范围(这发生在我身上).
你是如何修复它跳过1500插入?
INSERT失败的原因是有另一个列具有UNIQUE约束,并且INSERT试图在该列中插入重复值.阅读我链接的手册页,详细了解其重要性.
修复是在尝试INSERT之前首先执行SELECT以检查值是否存在.这违背了常识,即只是尝试INSERT并处理任何重复的键异常.但在这种情况下,失败的INSERT的副作用导致auto-inc值丢失.做一个SELECT首先消除了几乎所有这些异常.
但是你也必须处理一个可能的异常,即使你先选择SELECT.你还有竞争条件.
你是对的!innodb_autoinc_lock_mode = 0就像一个魅力.
在您的情况下,我想知道为什么这么多插入失败.我怀疑像许多SQL开发人员一样,在AJAX处理程序中执行INSERT后,您没有检查成功状态,因此您永远不会知道它们中的很多都是失败的.
他们可能仍然失败,你只是不会失去汽车公司的副作用.你应该真的诊断为什么这么多失败发生.您可能要么生成不完整的数据,要么运行超过必要的更多事务.
| 归档时间: |
|
| 查看次数: |
16660 次 |
| 最近记录: |