如何重新设定"自动增量" InnoDB引擎数据库的列?

时间:2014-04-23 09:53:42

标签: mysql sql bulkinsert load-data-infile

我正在为表使用人工主键。该表有两列,一列是primary key,另一列是Datesdatatype: Date)列。当我尝试从文件(仅包含第二列的值)加载批量数据时,日期的YYYY部分被添加到主键列(这是表中的第一列)和剩下的日期被截断了。

所以我需要重置表。我使用Truncate table语句尝试了它,但是由于错误而失败,因为此表在另一个表的外键约束中被引用。所以我必须使用delete * from table;语句来完成它。我确实删除了所有记录,但是当我再次插入记录时(这次使用insert into语句),它开始从我之前插入的那一年的去年开始递增ID(即它没有刷新它)。

注意: - 我使用的是MySQL 5.5和InnoDB引擎。

我的努力所以: -

  • 我试过ALTER TABLE table1 AUTO_INCREMENT=0;Reference第二回答)--->它没有帮助。
  • 我试过ALTER TABLE table1 DROP列; (Reference-回答1)---> Error on rename of table1

  • 再次删除该表并尝试执行:

    DBCC CHECKIDENT('table1', RESEED, 0);
    

    Reference)---> Syntax error at "DDBC" - Unexpected INDENT_QUOTED (此语句就在删除表语句之后,如果是这样的话 事项)

  • this文章的名为“ INNODB表的自动增量列”的部分和标题“2009年2月17日更新:”中,它表示在InnoDB truncate确实重置高于MySQL 4.1 的版本中的AUTO_INCREMENT索引...所以我想要某种方法来截断我的表,或者做一些其他方法来重置AUTO_INCREMENT索引。

问题: -

当我删除表格中的数据时,有没有办法以某种方式重置auto_increment? 我需要一种方法来修复上述DDBC CHECKINDENT错误,或者以某种方式截断在另一个表的外键约束中引用的表。

2 个答案:

答案 0 :(得分:3)

按照以下步骤操作:

步骤1:禁用外键约束后截断表,然后再次启用 -

set foreign_key_checks=0;
truncate table mytable;
set foreign_key_checks=1;

步骤2:现在在批量上传时,选择表中的列只有那些在你的csv文件中的意思是取消选中其余的一个(也是自动ID)并确保csv中的列应该与表中的列相同。自动列也不应该在csv文件中。


您可以使用以下命令上传数据。

LOAD DATA LOCAL INFILE '/root/myfile.csv' INTO TABLE mytable fields terminated by ',' enclosed by '"' lines terminated by '\n' (field2,field3,field5);

注意:如果您在Windows环境中工作,请相应更改。

答案 1 :(得分:3)

您只能将自动增量值重置为1(不是0)。因此,除非我弄错了你正在寻找

alter table a auto_increment = 1;

您可以{/ 3}}使用

进行评分
select auto_increment from information_schema.tables where 
  table_name='a' and table_schema=schema();

(不要忘记用表的实际名称替换'a'。)

您可以使用测试数据库(您的MySQL安装可能已经有一个名为test的数据库,否则使用create database test;创建它<)

use test;
create table a (id int primary key auto_increment, x int); -- auto_increment = 1
insert into a (x) values (1), (42), (43), (12);            -- auto_increment = 5
delete from a where id > 1;                                -- auto_increment = 5
alter table a auto_increment = 2;                          -- auto_increment = 2  
delete from a;
alter table a auto_increment = 1;                          -- auto_increment = 1