我正在为表使用人工主键。该表有两列,一列是primary key
,另一列是Dates
(datatype: 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错误,或者以某种方式截断在另一个表的外键约束中引用的表。
答案 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