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)