导入 SQL 文件时自动递增

Posted

技术标签:

【中文标题】导入 SQL 文件时自动递增【英文标题】:Auto Increment when importing SQL file 【发布时间】:2014-10-02 08:24:29 【问题描述】:

我正在编写一个脚本,该脚本应该生成一个要导入 WordPress 数据库的 SQL 文件。但是生成的脚本在导入时不起作用(使用 phpMyAdmin)。它表示主字段有一个重复的“0”键。但是,当我复制并粘贴 SQL 文件的内容时,一切正常并且数据插入正确。我刚刚用 ID 字段的随机值进行了测试,当我导入文件时它工作正常。因此,当我导入脚本时,似乎没有考虑“自动增量”属性。知道是什么原因造成的吗?

这里有几个例子:

正常生成的查询,产生上述错误:

INSERT INTO `wp_posts` VALUES('','',NOW(),NOW(),'','Product 1','','','','','','','','','','','','','','','product','',0,479), ('','',NOW(),NOW(),'','Product 2','','','','','','','','','','','','','','','product','',0,48),  ('','',NOW(),NOW(),'','Product 3','','','','','','','','','','','','','','','product','',0,517);

ID 字段中具有随机值的查询:

 INSERT INTO `wp_posts` VALUES('1599','',NOW(),NOW(),'','Product 1','','','','','','','','','','','','','','','product','',0,479), ('1021','',NOW(),NOW(),'','Product 2','','','','','','','','','','','','','','','product','',0,489), ('4599','',NOW(),NOW(),'','Product 3','','','','','','','','','','','','','','','product','',0,517);

最后一个例子运行良好。第一个仅在我将代码复制并粘贴到 PHPMyAdmin 时才有效。

【问题讨论】:

【参考方案1】:

生成一个列出列和值的脚本会跳过 ID 列,但会为所有其他列提供值,这将强制数据库引擎生成这些 ID。我认为发生在你身上的事情是,由于提供了值,但不是一个数字,它被转换为 0,然后下一个也被转换为 0,违反了 PK 约束。下面是我通常如何将虚拟数据填充到 DB 中(ID 字段将首先列出,但被跳过)

INSERT INTO user_data
(`user_id`,`data_code`,`data_type`,`language`,`user_agent`,`user_ip`,`created_date`,`created_date_ts`) VALUES (185143,'FF','w','fr','user agent','0.0.0.0','2014-08-06 16:59:56',1407344396);

【讨论】:

谢谢,我会试试的。您的意思是“185143”可以是任何其他值,甚至是 0 或空白字段? 实际上在我的情况下 185143 是一个实际使用的 id,该表在 user_id 之前还有一个名为 id 的列,并且该列设置为 auto_increment。那是我不提供值的列,数据库会为我自动生成它。 我总是为自增列插入值 NULL。像这样我可以很快看到它是否是自动递增的

以上是关于导入 SQL 文件时自动递增的主要内容,如果未能解决你的问题,请参考以下文章

phpmyadmin:导入数据库后,主键没有自动递增属性

如何让SELECT 查询结果额外增加自动递增序号sqlserver

SQL - 检查列是不是自动递增

SQL 用户 ID 自动递增

从 php 和 sql 创建动态自动递增的 seo 友好 url

如何使用 sql developer 设置自动递增列