MYSQL & innoDB alter dynamically AUTO_INCREMENT of a table -
i have problem, illustration in scheme have next table:
create table `sales` ( `id` int(11) not null auto_increment, `amount` float not null, primary key (`id`) ) engine=innodb; -- more complex table
with content:
+-----+-------+ | id | amount| +-----+-------+ |2023 | 100 | |2024 | 223 | |2025 | 203 | |... | |2505 | 324 | +-----+-------+
i don't know current id(there sales every day). i'm trying normalize table.
update sales set id=id - 2022;
result:
+-----+-------+ | id | amount| +-----+-------+ | 1 | 100 | | 2 | 223 | | 3 | 203 | |... | | 482 | 324 | +-----+-------+
the problem my problem trying alter auto_increment
, f.e.:
alter table sales auto_increment = 483;
its right don't know current id :(, seek next query:
alter table sales auto_increment = (select max(id) sales );
this causes me error(#1064). reading documentation tells me:
in mysql, cannot modify table , select same table in subquery.
http://dev.mysql.com/doc/refman/5.7/en/subqueries.html
i seek whit variables:
set @new_index = (select max(id) sales ); alter table sales auto_increment = @new_index;
but, causes error :(.
alter table
must have literal values in time statement parsed (i.e. @ prepare time).
you can't set variables or parameters statement @ parse time, can set variables statement before parse time. , means using dynamic sql:
set @new_index = (select max(id) sales ); set @sql = concat('alter table sales auto_increment = ', @new_index); prepare st @sql; execute st;
mysql innodb auto-increment mysql-5.7
No comments:
Post a Comment