大家好呀!我是猿童学,最近在学习Mysql数据库,给初学者分享一些知识,也是学习的总结,关注我将会不断地更新数据库知识,也欢迎大家指点一二。
目录
一、常用的MySQL语句
二、创建一个数据库
三、存储引擎
1、常用的存储引擎介绍
【1】InnoDB存储引擎
【2】MyISAM存储引擎
【3】MEMORY存储引擎
2、查看存储引擎
【1】查看存储引擎
【2】查看表使用的存储引擎
3、修改存储引擎
4、选择存储引擎
先来学习一些基本的sql语句来进行操作吧。
经常使用的语句
1.show databases; 查看所有的数据库
2.create database test; 创建一个叫test的数据库
3.drop database test;删除一个叫test的数据库
4.use test;选中库 ,在建表之前必须要选择数据库
5.show tables; 在选中的数据库之中查看所有的表
6.create table 表名 (字段1 类型, 字段2 类型);
7.desc 表名;查看所在的表的字段
8.drop table 表名; 删除表
9.show create database 库名;查看创建库的详细信息
10.show create table 表名; 查看创建表的详细信息
当我们安装 MySQL 8.0 并初始化数据库之后,默认会创建以下系统数据库:
查询Mysql服务器中的数据库。
> show databases;
1、创建数据库;
create database 库名;
2、查看数据库;
show databases;
3、选择数据库;
use 目标库;
4、修改数据库;
alter table 表名 add 列名 数据类型
5、删除数据库;
drop database 库名;
在Mysql中提供了多种存储引擎,可以根据不同的需求为表选择不同的存储引擎,也可
以根据自己的需求来编程自己的存储引擎。
InnoDB是事务型数据库的首选引擎,InnoDB是目前MYSQL的默认事务型引擎,是目前最重要、使用最广泛的存储引擎。支持事务安全表(ACID),支持行锁定和外键。InnoDB主要特性有:
(1)InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合
(2)InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的
(3)InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上
(4)InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键
(5)InnoDB被用在众多需要高性能的大型数据库站点上
InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。
场景:由于其支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物和外键。
MyISAM主要特性有:
(1)大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持
(2)当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成
(3)每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16
(4)最大的键长度是1·000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上
(5)BLOB和TEXT列可以被索引,支持FULLTEXT类型的索引,而InnoDB不支持这种类型的索引
(6)NULL被允许在索引的列中,这个值占每个键的0~1个字节
(7)所有数字键值以高字节优先被存储以允许一个更高的索引压缩
(8)每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快
(9)可以把数据文件和索引文件放在不同目录
(10)每个字符列可以有不同的字符集
(11)有VARCHAR的表可以固定或动态记录长度
(12)VARCHAR和CHAR列可以多达64KB
MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。MEMORY主要特性有:
(1)MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
(2)MEMORY存储引擎执行HASH和BTREE缩影
(3)可以在一个MEMORY表中有非唯一键值
(4)MEMORY表使用一个固定的记录长度格式
(5)MEMORY不支持BLOB或TEXT列
(6)MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引
(7)MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)
(8)MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲中,创建的内部表共享
(9)当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)
MEMORY存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B树型索引。由于这种存储引擎所存储的数据保存在内存中,所以其保存的数据具有不稳定性,比如如果mysqld进程发生异常、重启或计算机关机等等都会造成这些数据的消失,所以这种存储引擎中的表的生命周期很短,一般只使用一次。现在mongodb、redis等NOSQL数据库愈发流行,MEMORY存储引擎的使用场景越来越少。
场景:如果需要该数据库中一个用于查询的临时表。
show engines;
方法1不进入库查看:
show table status from 库名 where name='表名'\G
示例:
show table status from school where name='info'\G
方法2进入库查看:
use 库名;
show create table 表名;
示例:
use school
show create table info;
方法1:
use 库名;
alter table 表名 engine=myisam;
示例:
use school;
alter table info engine=myisam;
show create table info;
方法2:通过修改/etc/my.cnf 配置文件,指定默认存储引擎并重启服务
vim letc/ my . cnf
[mysqld]
default-storage-engine=INNODB
systemctl restart mysqld.service修改完记得重启mysql服务
#注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。
方法3:通过create table 创建表时指定存储引擎
use 库名;
create table 表名(字段1数据类型,...) engine=MyISAM;
例: mysql -u root -p
use SCHOOL;
create table hellolic (name varchar (10),age char (4 ), engine=myisam);
功能 | MYISAM | Memory | lnnoDB |
存储限制 | 256TB | RAM | 64TB |
支持事物 | No | No | Yes |
支持全文索引 | Yes | No | No |
支持数索引 | Yes | Yes | Yes |
支持哈希索引 | No | Yes | No |
支持数据缓存 | No | NA | Yes |
支持外键 | No | No | Yes |