0. 參見 MySQLDocsmanual.Html
1. 4.0以上mysqld都支持事務,包括非max版本。3.23的需要max版本MySQLd才能支持事務。
2. 創建表時如果不指定type則默認為myisam,不支持事務。
可以用 show create table tablename 命令看表的類型。
2.1 對不支持事務的表做start/commit操作沒有任何效果,在執行commit前已經提交,測試:
執行一個msyql:
use test;
drop table if exists tn;
create table tn (a varchar(10)) type=myisam;
drop table if exists ty;
create table ty (a varchar(10)) type=innodb;
begin;
insert into tn values('a');
insert into ty values('a');
select * from tn;
select * from ty;
都能看到一條記錄
執行另一個MySQL:
use test;
select * from tn;
select * from ty;
只有tn能看到一條記錄
然後在另一邊
commit;
才都能看到記錄。
3. 可以執行以下命令來切換非事務表到事務(數據不會丟失),innodb表比myisam表更安全:
alter table tablename type=innodb;
3.1 innodb表不能用repair table命令和myisamchk -r table_name
但可以用check table,以及MySQLcheck [OPTIONS] database [tables]
4. 啟動MySQL數據庫的命令行中添加了以下參數可以使新發布的MySQL數據表都默認為使用事務(
只影響到create語句。)
--default-table-type=InnoDB
測試命令:
use test;
drop table if exists tn;
create table tn (a varchar(10));
show create table tn;
5. 臨時改變默認表類型可以用:
set table_type=InnoDB;
show variables like 'table_type';
或:
c:mysqlinMySQLd-max-nt --standalone --default-table-type=InnoDB