MySQL裡批量修改表引擎

2021-05-11 12:36:03 字數 2806 閱讀 4216

裡面涉及到三個儲存過程

1、儲存過程詳細語句:

這個儲存過程有點問題,要反覆執行幾次才能把乙個有好多資料的庫全部更新。

具體原因還沒有查清楚,暫時不能用到生產環境。

invarchar

(255),in

varchar

(255),in

varchar

(255)

)begin

-- get the total of the table with given database.

default

-- increment variable.

default

-- the true statement.

select

count

(1)from

where

=and

isnot

null!=

into

-- to determinate whether the given table's name is empty or not.

-- begin if.if=

then

-- begin while.

<

=concat

('select table_name from information_schema.tables where table_schema='

'',f_db_name,

''' and `engine` is not null and `engine` != '

'',f_engine_name,

''' limit '

,i,',1 into @tbname');

from

@stmt;

execute

deallocate prepare s1;

set=

concat

('alter table '

,@tbname,

' engine '

,f_engine_name)

;from

@stmt;

execute

deallocate prepare s1;

set='';

set=

+end

-- end while.

else

-- change specific table's engine.

set=

concat

('alter table '

,f_db_name,

'.',f_table_name,

' engine '

,f_engine_name)

;from

@stmt;

execute

deallocate prepare s1;

set='';

endif

;-- end if;

end$$;

2、下面這兩個結合可以用到生產環境

ifexists

`sp_alter_db_engine`$$

create

`root`@

`localhost` procedure `sp_alter_db_engine`(

invarchar

(255),in

varchar

(255)

)begin

-- get the total number of tables.

default

declare i int;

set=

select

count

(1)from

where

=into

<

=concat

('select @tbname:=table_name from information_schema.tables where table_schema='

'',f_db_name,

''' order by table_name desc limit '

,i,',1 into @tbname');

from

@stmt;

execute

deallocate prepare s1;

set='';

set=

concat

(f_db_name,

'.',

@tbname)

;call sp_alter_table_engine(

@tbname,f_engine_name)

;set=+

endend$$

;ifexists

`sp_alter_table_engine`$$

create

`root`@`%

`invarchar

(255),in

varchar

(20)

)begin

set=

concat

('alter table '

,f_tb_name,

' engine='

,f_engine_name)

;from

@stmt;

execute

deallocate prepare s1;

set='';

end$$;

mysql> call sp_alter_db_engine('t_girl','innodb');

query ok, 0 rows affected (2 min 51.09 sec)

mysql批量修改表引擎

應用場景 兩台mysql資料庫讀寫分離,將讀庫的引擎修改為myisam來加快查詢速度。操作 通過字串拼接的方法拼出sql語句,到命令列執行。1 2select concat table name,engine from information schema.tables where table sc...

批量修改MySQL的表引擎

批量修改mysql的表引擎 由於今天要匯入好多表,而且要批量轉換為ndb引擎,備份檔案的太大。開啟修改不現實。所以就寫了乙個sp。裡面涉及到三個儲存過程。1 儲存過程詳細語句 這個儲存過程有點問題,要反覆執行幾次才能把乙個有好多資料的庫全部更新。具體原因還沒有查清楚,暫時不能用到生產環境。delim...

shell指令碼批量修改mysql表引擎

進入到mysql的資料目錄,例如 data 進入到data目錄,如果不進入打絕對路徑會帶著 data 表名 cd data 列出所有表的資料結構檔案,然後去掉.frm,追加到檔案中就是所有的表名了 ls frm awk f frm root all tables.txt 當然,你也可以用另一種方式,...