一,MySQL的引擎问题

Mysql数据库引擎

Mysql常见的三中存储引擎为InnoDB、MyISAM、MEMORY。其区别提现在事物安全、存储限制、空间使用、插入数据的速度和对外键的支持上,具体如下:

特性 InnoDB MyISAM MEMORY
事物安全 支持 不支持 不支持
对外建的支持 支持 不支持 不支持
存储限制 64TB
空间使用
内存使用
插入数据的速度

1)事物安全:
InnoDB支持事物安全,MyISAM和MEMORY两个不支持。

2)对外键的支持:
InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键。

3)存储限制:
InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而定。

4)空间使用:
InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。

5)内存使用:
InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。

6)插入数据的速度:
InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。

InnoDB是MySQL5.5以上版本的默认存储引擎(Mysql5.5.5之前是MyISAM

更改 Mysql 默认引擎为 InnoDB步骤如下:

将InnoDB设置为默认的引擎如下:

a ,查看Mysql存储引擎情况:

mysql>show engines 

(此命令告诉我们三条信息,第一,默认使用的引擎 第一行的就是,第二,该版本的MySQL所支持的引擎有哪些,比如下图,federated这个引擎MySQL5.7.22就不支持,第三,comment这一列有一个大致的引擎特性说明,比如告诉我们,innodb引擎的特性是Supports transactions, row-level locking, and foreign keys 也就是支持行锁定,外键和事务)

特别注意,information_schema这个默认的就存在的数据库内的表大部分都是memory引擎的哦,这个数据库会在数据库启动的第一时间加载出来的哦,里面都是模板表哦,此库不要随意乱动。

也可以这样查询:

select * from information_schema.engines;#这个命令等价于 show engines

此命令输出如下:

b , 设置InnoDB为默认引擎:在配置文件my.ini中的 [mysqld] 下面加入default-storage-engine=INNODB

  1. 重启Mysql服务器

  2. 登录Mysql数据库,mysql>show engines 如果出现 InnoDB |DEFAULT,则表示设置InnoDB为默认引擎成功

同理,将MySQL设置为myisam引擎也是在my.cnf这个主配置文件中[mysqld]标签下加入default-storage-engine=MYISAM 然后重启MySQL服务即可,重启之后,配置文件内写的默认引擎是哪个,那么,此后新建的库表都会使用这个配置内定义的引擎。




查询有哪些数据库和表是myisam引擎的??

select table_catalog,table_schema,table_name,engine
from information_schema.tables
where engine='MyISAM';

查询有哪些数据库和表是innodb引擎的???

select table_catalog,table_schema,table_name,engine
from information_schema.tables
where engine='INNODB';



c , 查询某个指定的表使用的是哪个引擎?

比如,查询mysql数据库的user表是使用的哪个引擎

show create table mysql.user;  会显示原始的建表过程,其中,最后表明该表使用的引擎是哪个

show create table mysql.user;
#输出如下:
CREATE TABLE `user` (`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',`User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Reload_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Shutdown_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Process_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`File_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Grant_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`References_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Index_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Alter_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Show_db_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Super_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Create_tmp_table_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Lock_tables_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Execute_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Repl_slave_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Repl_client_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Create_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Show_view_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Create_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Alter_routine_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Create_user_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Event_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Trigger_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`Create_tablespace_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`ssl_type` enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '',`ssl_cipher` blob NOT NULL,`x509_issuer` blob NOT NULL,`x509_subject` blob NOT NULL,`max_questions` int(11) unsigned NOT NULL DEFAULT '0',`max_updates` int(11) unsigned NOT NULL DEFAULT '0',`max_connections` int(11) unsigned NOT NULL DEFAULT '0',`max_user_connections` int(11) unsigned NOT NULL DEFAULT '0',`plugin` char(64) COLLATE utf8_bin NOT NULL DEFAULT 'mysql_native_password',`authentication_string` text COLLATE utf8_bin,`password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',`password_last_changed` timestamp NULL DEFAULT NULL,`password_lifetime` smallint(5) unsigned DEFAULT NULL,`account_locked` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'

在比如查询information_schema这个数据库内的files这个表使用的引擎:

show create table information_schema.files;

show create table information_schema.files;
#输出如下:
NULL,`RECOVER_TIME` bigint(4) DEFAULT NULL,`TRANSACTION_COUNTER` bigint(4) DEFAULT NULL,`VERSION` bigint(21) unsigned DEFAULT NULL,`ROW_FORMAT` varchar(10) DEFAULT NULL,`TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,`AVG_ROW_LENGTH` bigint(21) unsigned DEFAULT NULL,`DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,`MAX_DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,`INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,`DATA_FREE` bigint(21) unsigned DEFAULT NULL,`CREATE_TIME` datetime DEFAULT NULL,`UPDATE_TIME` datetime DEFAULT NULL,`CHECK_TIME` datetime DEFAULT NULL,`CHECKSUM` bigint(21) unsigned DEFAULT NULL,`STATUS` varchar(20) NOT NULL DEFAULT '',`EXTRA` varchar(255) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8



d,

修改指定表所使用的引擎

比如,修改mysql.user 这个表的引擎为innodb

alter table mysql.user engine=innodb;

或者修改mysql.user 这个表的引擎为myisam

alter table mysql.user engine=myisam;

或者修改information_schema.files 这个表的引擎为innodb(不会成功,memory引擎不能转换成其它的引擎,内存常驻的嘛 )

alter table information_schema.files engine=innodb;
#运行结果如下:
alter table information_schema.files engine=innodb
> 1044 - Access denied for user 'root'@'%' to database 'information_schema'
> 时间: 0s





OK,经过以上的介绍,我们应该可以控制哪个表使用哪个引擎了,如果有常用的select操作的引擎,而被无意设置为myisam引擎,我们就可以修改成innodb引擎,提高这个表的使用效率啦。

那么,每个表的编码我们也可以任意指定吗?答案是肯定的啦。

MySQL的编码系统比较复杂,晦涩,难搞!!!! 

看如下命令:

show variables like "%char%";输出如下:
character_set_client    utf8mb4
character_set_connection    utf8mb4
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8mb4
character_set_server    utf8mb4
character_set_system    utf8
character_sets_dir  /var/lib/mysql/mysql/charsets/

在my.cnf文件配置的init_connect='SET NAMES utf8mb4',这里的编码定义只控制character_set_client、character_set_connection、 character_set_results的编码方式 。

首先

  • 我们需要知道,character_set_server 这个选项在my.cnf 这个文件里是一个全局的,所有数据库新建表,如果建库或者建表的时候,不指定编码的话 ,那么,你设定的是哪个编码,它就会使用哪个编码,也就是默认的编码啦。(这个已经经过我测试啦,新建一个库,然后新建一个表,这个表如果建立的时候没有指定编码,那么必定是character_set_server 的值啦!!!!!)

其次,

  • character_set_database:默认数据库的字符集编码.假设没有默认数据库,则该变量值与character_set_server同样.事实上这个值代表的就是你当前数据库的编码而已,比方使用"use test",而test数据库的编码为latin1的话,这个值就是latin1.而你切换的时候"use test2",则character_set_database的值就是数据库test2的编码.

再次,数据库的编码和表的编码是互相独立的,即使数据库的编码比如是指定的gbk,表仍然可以任意指定编码,不会强制库表一致。

因此,我们在遇到编码问题的时候,可以不用管数据库的编码是什么,只需要强制更改指定表的编码就可以啦。那么,如何更改表的编码呢?

首先需要 use 要更改的表的数据库,比如,要更改mysql 这个数据库的 user表的编码,原编码为utf8mb4,现在要更改为latin1  ,那么,命令应该为:

  • use mysql
  •  alter table `user` convert to character set latin1;   ---注意,这里是反引号。

前方高能:

修改表尤其是大表的引擎和编码会造成锁表,也就是说,此操作需要谨慎!!!!!!!!!!!!!!

MySQL 查询数据库和表在使用的引擎和编码并修改使用引擎和编码相关推荐

  1. mysql查询数据库每张表数据量大小和占用多少空间

    selecttable_schema as '数据库',table_name as '表名',table_rows as '记录数',truncate(data_length/1024/1024, 2 ...

  2. mysql查询数据库所有表名字

    select TABLE_NAME from information_schema.tables where table_schema='表名称';

  3. MySql 查询数据库中所有表名

    MySql 查询数据库中所有表名 查询数据库中所有表名 select table_name from information_schema.tables where table_schema='csd ...

  4. mysql查询数据库结构_mysql查询数据库下的表结构

    mysql查询数据库下的表结构 方法:1.使用DESCRIBE命令以表格的形式展示表结构,语法"DESCRIBE 表名;":2.使用"SHOW CREATE TABLE& ...

  5. mysql 查看数据库字段是否存在,mysql查询某张表是否存在某个字段和判断是否存在某个表名...

    Mysql 1.判断一个表是否存在 语法: SELECT table_name FROM information_schema.TABLES WHERE table_name ='表名'; sql例子 ...

  6. MySQL获取数据库每个表的行数

    这个问题的起因,是我要进行数据库数据的迁移,迁移后确定数据是否都迁移成功而遇到的. 对于数据库的迁移,我是使用MySQL官方的数据库管理工具MySQL Workbench完成的.源数据库和目标数据库都 ...

  7. PHP教程 数据库和MySQL_PHP教程 - MySQL 创建数据库和表

    PHP MySQL 创建数据库和表 数据库存有一个或多个表. 创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库. 语法 CREATE DATABASE database ...

  8. Mysql 查询数据库数据量

    Mysql查询数据库数据量 SELECTtable_name AS '表名',table_rows AS '记录数',TRUNCATE (data_length / 1024 / 1024, 2) A ...

  9. Mysql查看数据库和表占用空间

    Mysql查看数据库和表占用空间 1.查看数据库的大小 select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.TABLES ...

最新文章

  1. 从大数据到安全大数据分析
  2. Firefox 网络调试工具
  3. react中context到底是如何传递的-源码分析
  4. Ubuntu下安装Wine可能导致假死问题解决方案
  5. 发布 项目_第十八期科创基金项目发布会圆满结束
  6. 08.Numpy数组迭代
  7. ECC椭圆曲线加密算法原理
  8. 初识类的构造方法 c# 1214
  9. 全阶滑模观测器程序_滑模观测器转子估算程序
  10. CentOS7下安装配置Tomcat环境
  11. synchronized的实现原理用法详解
  12. c语言2种软件下载,C语言代码自动整理工具
  13. codeforces B. Ternary Sequence
  14. Java导出多个excel压缩成zip下载
  15. vue+videojs视频播放、视频切换、视频断点分段上传
  16. 手把手教你智能硬件开发(六)直流马达
  17. VS2008运行过程中出现regsvr32问题解决方法记录
  18. Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理
  19. php线程教程,实例讲解php实现多线程
  20. 淘宝大数据解析之timetunnel

热门文章

  1. 表面共赢,背地甩包袱:英特尔分拆Mobileye的上市路
  2. 方差、标准差、协方差理解与区别
  3. java ssm高校教材管理平台 idea maven
  4. 社群工具应该如何选择
  5. ①css实现九宫格动画——前端筑基每天一道前端案例实现
  6. ERP出入库进阶操作与子流程--开源软件诞生28
  7. 使用MATLAB读取视频并获取视频信息、分帧保存
  8. 北理工网络安全导论作业:MD5算法
  9. 基于 Laravel PHP 框架的房地产管理系统
  10. 中华卫士、天融信、方正防火墙整体性能优势对比