说明:实际Truncate表之后,自增id就会自动从1开始,这里的存储过程是为了程序的完整,并且更加灵活的设置自增id
下面是图片有颜色,看着结构清晰
下面是存储过程源码,在mysql中将以下代码运行一次后,就会创建存储过程,以后每次执行此存储过程即可
CREATE PROCEDURE `reset_autoIncrement`()
begin
declare v_table_name varchar(100); -- @城市之雾 自定义变量
declare done int default false; -- @城市之雾 自定义控制游标循环变量,默认false
declare sql_for_select varchar(500);
declare my_cursor cursor for
select table_name
from information_schema.tables
where table_schema=database();
declare continue handler for not found set done = true; -- @城市之雾 绑定控制变量到游标,游标循环结束自动转true
open my_cursor; --@城市之雾 打开游标
myloop: loop -- @城市之雾 开始循环体,
fetch my_cursor into v_table_name; -- @城市之雾 将游标当前读取行的数据顺序赋予自定义变量
if done then -- @城市之雾 判断是否继续循环 注意:不要放在后面,直接就在fetch后面判断
leave myloop; -- @城市之雾 结束循环
end if;
set sql_for_select = concat("truncate table ", v_table_name);
#select sql_for_select;
set @sql = sql_for_select;
prepare stmt from @sql; -- @城市之雾 预处理动态sql语句
execute stmt ; -- @城市之雾 执行sql语句
#修改自增id
set sql_for_select = concat( "alter table ", v_table_name," auto_increment = 1");
set @sql = sql_for_select;
prepare stmt from @sql; -- @城市之雾 预处理动态sql语句
execute stmt ; --@城市之雾 执行sql语句
end loop myloop; -- @城市之雾 结束自定义循环体
deallocate prepare stmt; -- @城市之雾 释放prepare
close my_cursor; -- @城市之雾 关闭游标
end