首页 > 代码库 > mysql学习笔记
mysql学习笔记
1. MySQL默认采用的是自动提交的方式,也就是AUTOCOMMIT模式,也就是说如果不是显式的开启一个事务,则每个事务都被当做是一个事务去提交操作。
show variables like ‘autocommit’来查看当前的提交状态,可以使用 set autocommit=1/0来改变,1表示开启自动提交,0表示禁用,当为0时所有的查询都在一个事务之中,直到显式的提交commit或者是rollback回滚。但是这个修改对于非事务型的表,比如 myisam是无效的,它将处于autocommit状态。
另外需要注意的是,会有一些命令强制执行commit来提交当前事务,在数据定义语言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学习笔记