標籤:io ar 使用 sp for 檔案 資料 on art
1. MySQL預設採用的是自動認可的方式,也就是AUTOCOMMIT模式,也就是說如果不是顯式的開啟一個事務,則每個事務都被當做是一個事務去提交操作。
show variables like ‘autocommit’來查看當前的提交狀態,可以使用 set autocommit=1/0來改變,1表示開啟自動認可,0表示禁用,當為0時所有的查詢都在一個事務之中,直到顯式的提交commit或者是rollback復原。但是這個修改對於非事務型的表,比如 myisam是無效的,它將處於autocommit狀態。
另外需要注意的是,會有一些命令強制執行commit來提交當前事務,在資料定義語言 (Data Definition Language)DDL中,如果是會導致大量資料改變的操作,比如alter table,lock table 等就是如此。
可以通過set transaction isolation level 命令來設定隔離等級,新的隔離等級在下一個事務生效,可以在設定檔中設定整個資料庫的隔離等級。也可以只改變當前會話的隔離等級:MySQL>set session transaction isolation level read commited.
2. 需要注意的是不應該在事務中混合使用儲存引擎,因為這樣在某些復原中,只有支援事務的儲存引擎的資料表可以被復原,而非事務型的表上的變更則無法撤銷。
3. InnoDB採用兩階段鎖定協議,在事務執行隨時都可以執行鎖定,鎖只有在執行commit或者rollback的時候才會釋放,而且是在同一時刻釋放。
4. 建議除了事務中禁用了autocommit,可以使用lock tables之外,其他時候都不要顯式的執行lock tables ,不管使用的是什麼引擎。
5. show table status 命令查看標的相關資訊: show table status like ‘user‘ \G ,使用\G得到的是格式化的輸出。row_format表示行的格式,rows表示行數,在InnoDB裡面是估計值,avg_row_length表示平均每行包含的位元組數,data_length表資料的大小,max_data_length表資料的最大容量和儲存引擎有關,index_length表示索引的大小,data_free表示可以被應用的空間大小,auto_increament下一個自動增加的值,create_time表建立的時間,check_time最後一次檢查表的時間,collation表的預設字元集和字元定序,checksum如果啟動,儲存的是整個表的即時校正和,creat_options建立表時指定的其他選項,comment儲存的一些額外的資訊。
6. 改變引擎的方法:alter table mytable ENGINE=InnoDB,轉變的過程中將會失去原有引擎的特性,使用建立和查詢的方式有時是一種比較好的選擇:
crate table innodb_table like myisam_table;
alter table innodb_table engine=innodb
insert into innodb_table select * from myisam_table;
如果資料較大就要採用分塊比如:
start transaction;
insert into innodb_table select * from myisam_table
where id between x and y ;
commit;
如果有必要刻意在執行的過程中對原表加鎖,確保新表和原表的資料一致,這個
Percona Toolkit 提供了一個 pt-online-schema-change的工具
7.
mysql學習筆記