这是一个完整的插入内容:http://codebin.org/view/61969a27
以下是该插入内容的一个示例:
INSERT IGNORE INTO `listings`
(
`feed_id` ,
`source` ,
`time` ,
`country`,
`state` ,
`city` ,
`zip`,
`title` ,
`url`
)
VALUES (
'5050498326',
'cl_web',
'1433027144',
'US',
'AL',
'Auburn',
'36830',
'Moms Helping Moms Work From Home!',
'http://auburn.craigslist.org/web/5050498326.html'
), (
'5050537388',
'cl_web',
'1433026553',
'US',
'AL',
'Auburn',
'36830',
'Moms Helping Moms Work From Home!',
'http://auburn.craigslist.org/web/5050537388.html'
);
我发现,auto_increment在失败的情况下正在增加'插入,或者更确切地说是被忽略的插入。
我有一个值列表和很多时间(大部分时间)我已经拥有数据库中的那些。
是否有另一种方法来编写此查询,以便auto_increment不会增加?此外,有没有更好的更优化的方式来编写这种查询?我知道你可以对选择进行插入,但我对SQL并不熟悉。
答案 0 :(得分:0)
想象一下,有两个交易。第一个事务在请求新的自动增量值后中止。由于第二个交易必须收到更高的自动增量编号,并且第一个交易没有使用其指定的编号,因此现在存在差距。理论上不可能保证无间隙自动增量列。
您可以使用where
子句来过滤掉密钥违规,从而缩小差距。例如,如果未采用PK,此查询仅插入一行:
insert Table1
(pk, col1)
select 1
, 'val1'
where not exists
(
select *
from Table1
where pk = 1
)
这需要比insert ignore
更多的SQL代码,但应该导致更少的自动增量间隙。