mysql脚本之清空当前数据库下的所有表中数据,并重置自增id

说明:实际Truncate表之后,自增id就会自动从1开始,这里的存储过程是为了程序的完整,并且更加灵活的设置自增id

下面是图片有颜色,看着结构清晰

下面是原代码

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; -- @城市之雾 将游标当前读取行的数据顺序赋予自定义变量

        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语句

        if done then -- @城市之雾 判断是否继续循环  
             leave myloop; -- @城市之雾 结束循环  
        end if;  

  end loop myloop; -- @城市之雾 结束自定义循环体  
    deallocate prepare stmt;      -- @城市之雾 释放prepare


  close my_cursor; -- @城市之雾  关闭游标  

end

猜你喜欢

转载自my.oschina.net/u/3477605/blog/1800177
今日推荐