Php 插入时主键自动递增忽略

Php 插入时主键自动递增忽略,php,mysql,sql,sql-insert,Php,Mysql,Sql,Sql Insert,这里有一个完整的插页: 下面是该插入的一个示例: INSERT IGNORE INTO `listings` ( `feed_id` , `source` , `time` , `country`, `state` , `city` , `zip`, `title` , `url` ) VALUES ( '5050498326', 'cl_web', '1433027144', 'U

这里有一个完整的插页:

下面是该插入的一个示例:

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'
);
我发现,在“失败”插入,或者更确切地说是被忽略的插入上,自动增量正在增加

我有一个值列表,很多时候(大多数时候)数据库中已经有了这些值


是否有其他方法来编写此查询,以便自动增量不会增加?此外,有没有更好、更优化的方法来编写这种查询?我知道您可以在selects上执行INSERT,但我对SQL还不够熟悉。

假设有两个事务。第一个事务在它们都请求新的自动增量值后中止。由于第二个事务必须收到更高的自动递增编号,并且第一个事务没有使用其分配的编号,因此现在存在一个间隙。理论上不可能保证无间隙自增列

您可以通过使用
where
子句过滤掉键冲突来减少间隙。例如,此查询仅在未进行PK时插入一行:

insert  Table1
        (pk, col1)
select  1
,       'val1'
where   not exists
        (
        select  *
        from    Table1
        where   pk = 1
        )

这需要比插入忽略更多的SQL代码,但会导致更少的自动增量间隔。

自动增量不应为NULL且主键。ie值不能为空。可以传递覆盖增量值的自动增量列值。或者删除这些属性,以便不增加。有了这些属性,您就不能使用。id(我没有传递)是自动递增的,不是空的,并且是主键。feed_id和source还有一个唯一的索引。不可能忽略man..您的表架构是什么?将其发布到侧注:可能有一种方法可以在PK not NULL列上打开和关闭标识插入。(我知道你可以使用MSSQL,只是不确定MYSQL)