裡面涉及到三個儲存過程
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 當然,你也可以用另一種方式,...