MySQL 存储引擎 MyISAM 和 InnoDB 配置
MyISAM 和 InnoDB 最大特点:
MyISAM :
① 不支持事务 。
② 表级锁定形式 ,数据在更新时锁定整个表 。
③ 不支持外键约束 ,只支持全文索引 。
④ 数据库在读取过程中相互阻塞 。
⑤ 数据单独写入或读取 , 速度较快且占用资源相对要少 。
InnoDB:
① 支持事务 。
② 行级锁定 ,但是全表扫描仍然会是表级锁定 。
③ 支持分区、表空间 ,类似Oracle 数据库 。
④ 读写阻塞与事务隔离级别相关 。
⑤ 表与主键以簇的方式储存 。
⑥ 具有非常高效的缓存特性 ,能缓存引索 ,也能缓存数据 。
如何查看存储引擎:
查看 MySQL 默认存储引擎 :
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES
查看 MySQL 支持的引擎以及默认存储引擎 。
查看表正在使用的存储引擎 :
方法一:
show table status from 库名 where name='表名';
mysql> show table status from jdy where name='test';
+------+--------+---------+------------+------+
| Name | Engine | Version | Row_format | Rows |
+------+-------------+-----------------+--------------+
| test | InnoDB | 10 | Dynamic | 0 | # 表的存储引擎 InnoDB
方法二:
show create table 表名;
mysql> use jdy; # 进入查看表的数据库
Database changed
mysql> show create table test;
+-------+---------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE "test" (
"name" varchar(10) DEFAULT NULL,
"id" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | # 表的存储引擎 InnoDB
如何修改存储引擎:
mysql> use jdy; # 进入查看表的数据库
Database changed
mysql> show create table test;
+-------+---------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE "test" (
"name" varchar(10) DEFAULT NULL,
"id" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | # 表的存储引擎 InnoDB
#命令: alter table 表名 engine=引擎;
mysql> alter table test engine=MyISAM; #修改表的存储引擎为 MyISAM
Query OK, 0 rows affected (0.39 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table test;
+-------+---------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE "test" (
"name" varchar(10) DEFAULT NULL,
"id" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | #修改成功
方法二 :
-
修改 MySQL 的配置文件 my.cnf ,指定默认存储引擎
vim /etc/my.cnf
[mysqld]
default-storage-engine=MyISAM #添加指定默认存储引擎
mysql> create table test01 (id int ); #创建表
Query OK, 0 rows affected (0.00 sec)
mysql> show create table test01;
+--------+------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+------------------------------------------------------------------------------------------+
| test01 | CREATE TABLE "test01" (
"id" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 | #创建的新表默认 MyISAM
设置默认存储引擎 ,创建的新表将使用 MyISAM 存储引擎 。
方法三 :
mysql> create table test02 (id int ) engine=InnoDB;
Query OK, 0 rows affected (0.35 sec)
mysql> show create table test02;
+--------+------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+------------------------------------------------------------------------------------------+
| test02 | CREATE TABLE "test02" (
"id" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | #新表存储引擎是 InnoDB
方法四:
-
使用mysql_convert_table_format 命令批量转换
[root@localhost ~]#mysql_convert_table_format --host=localhost --user=root --password=abc123 --socket=/tmp/mysql.scok --engine=InnoDB jdy test01 test02
执行会报错 ,需要安装操作模块
yum install perl perl-DBD-MySQL -y
无法转换InnoDB引擎 ,mysql_convert_table_forma命令bug,需要修改命令脚本。
vim /usr/local/mysql/bin/mysql_convert_table_format #修改命令脚本
$opt_help=$opt_version=$opt_verbose=$opt_force=0;
$opt_user=$opt_database=$opt_password=undef;
$opt_host="localhost";
$opt_socket="";
$opt_engine="MYISAM";
$opt_port=0;
$exit_status=0;
GetOptions(
"e|engine|type=s" => \$opt_type, #把type修改成engine
"f|force" => \$opt_force,
"help|?" => \$opt_help,
"h|host=s" => \$opt_host,
"p|password=s" => \$opt_password,
"u|user=s" => \$opt_user,
"v|verbose" => \$opt_verbose,
"V|version" => \$opt_version,
"S|socket=s" => \$opt_socket,
"P|port=i" => \$opt_port
) || usage(0);
ps: 第四种方法只适合MySQL 5.5版本 。MySQL 5.5 默认存储引擎MyISAM 5.7 默认存储引擎 InnoDB。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341