1、 导入hellodb.sql生成数据库
(1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄
MariaDB [hellodb]> select name,age from students where age > 25 and gender = 'm';
+--------------+-----+
| name | age |
+--------------+-----+
| Xie Yanke | 53 |
| Ding Dian | 32 |
| Yu Yutong | 26 |
| Shi Qing | 46 |
| Tian Boguang | 33 |
| Xu Xian | 27 |
| Sun Dasheng | 100 |
+--------------+-----+
7 rows in set (0.001 sec)
(2) 以ClassID为分组依据,显示每组的平均年龄
MariaDB [hellodb]> select classid,avg(age) from students group by classid;
+---------+----------+
| classid | avg(age) |
+---------+----------+
| NULL | 63.5000 |
| 1 | 20.5000 |
| 2 | 36.0000 |
| 3 | 20.2500 |
| 4 | 24.7500 |
| 5 | 46.0000 |
| 6 | 20.7500 |
| 7 | 19.6667 |
+---------+----------+
8 rows in set (0.001 sec)
(3) 显示第2题中平均年龄大于30的分组及平均年龄
MariaDB [hellodb]> select classid,avg(age) avg from students group by classid having avg > 30;
+---------+---------+
| classid | avg |
+---------+---------+
| NULL | 63.5000 |
| 2 | 36.0000 |
| 5 | 46.0000 |
+---------+---------+
3 rows in set (0.001 sec)
(4) 显示以L开头的名字的同学的信息
MariaDB [hellodb]> select * from students where name like 'L%'
-> ;
+-------+-------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+-------------+-----+--------+---------+-----------+
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
+-------+-------------+-----+--------+---------+-----------+
3 rows in set (0.003 sec)
2、数据库授权magedu用户,允许192.168.1.0/24网段可以连接mysql
MariaDB [(none)]> create user 'magedu'@'192.168.1.%' identified by '123456';
MariaDB [(none)]> select host,user,password from mysql.user;
+---------------+--------+-------------------------------------------+
| host | user | password |
+---------------+--------+-------------------------------------------+
| localhost | root | |
| centos8-node1 | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| 192.168.1.% | magedu | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+--------+-------------------------------------------+
5 rows in set (0.001 sec)
3、总结mysql常见的存储引擎以及特点。
功能 | MyISAM | MEMORY | InnoDB |
---|---|---|---|
存储限制 | 256T | RAM | 64T |
支持事务 | NO | NO | YES |
支持B树索引 | YES | YES | YES |
支持哈希索引 | NO | YES | NO |
支持集群索引 | NO | NO | YES |
支持数据索引 | NO | YES | YES |
支持全文索引 | YES | NO | NO |
支持数据压缩 | YES | NO | NO |
空间使用率 | LOW | N/A | HIGH |
支持外键 | NO | NO | YES |
MyISAM
- 特点
不支持事务
表级锁定
读写相互阻塞,写入不能读,读时不能写
只缓存索引
不支持外键约束
不支持聚簇索引
读取数据较快,占用资源较少 ,不支持MVCC(多版本并发控制机制)高并发
崩溃恢复性较差
MySQL5.5.5前默认的数据库引擎 ,查询速度快、存储空间小,原因是在磁盘上分成三个文件存储:.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储索引),SELECT COUNT(*) FROM TABLE时,避免了全表扫描。
- MyISAM存储引擎适用场景
只读(或者写较少)、表较小(可以接受长时间进行修复操作),适合查询多、写入少的业务场景
- MyISAM引擎文件
tbl_name.frm 表格式定义
tbl_name.MYD 数据文件
tbl_name.MYI 索引文件
InnoDB
- 特点
InnoDB,最大的特点就是支持事务和行锁,是现在Mysql的默认存储引擎。
对事务和写并发的支持使InnDB成为互联网公司最常使用的存储引擎。
行级锁 ,支持行级锁及外键约束,所以在可以支持写并发。
支持事务,适合处理大量短期事务 ,支持ACID的事务,支持事务的四种隔离级别。
读写阻塞与事务隔离级别相关
可缓存数据和索引
支持聚簇索引
崩溃恢复性更好
支持MVCC高并发
从MySQL5.5后支持全文索引 ,SELECT COUNT(*) FROM TABLE时会进行全表扫描,效率低于MyISAM。
从MySQL5.5.5开始为默认的数据库引擎
- InnoDB数据库文件
所有InnoDB表的数据和索引放置于同一个表空间中
表空间文件:datadir定义的目录下
数据文件:ibddata1, ibddata2, ...
每个表单独使用一个表空间存储表的数据和索引
启用:innodb_file_per_table=ON
两类文件放在数据库独立目录中
数据文件(存储数据和索引):tb_name.ibd
表格式定义:tb_name.frm
- 优缺点
优势在于提供了良好的事务管理、奔溃修复能力和并发控制。
缺点是读写效率稍差,占用的数据空间相对比较大。
- 适用场合
更新密集的表:InnoDB存储引擎特别适合处理多重并发的更新请求。
事务:InnoDB存储引擎是唯一支持事务的标准MySQL存储引擎,这是管理敏感数据(如金融信息和用户注册信息)的必须软件
自动灾难恢复:与其他存储引擎不一样,InnoDB表能够自动从灾难中恢复。虽然MyISAM表也能在灾难后修复,但其过程要长的多
MEMORY
MEMORY是一种特殊的存储引擎,特点是使用存储在内存中的内容来创建表,并且数据全部放在内存中。
- 特点
每个基于MEMORY存储引擎的表实际对应一个磁盘文件。
该文件的文件名与表名相同,类型为frm类型。
该文件中只存储表的结构,而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。
需要注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。
如果不需要了,可以释放内存,甚至删除不需要的表。
将所有数据存储在RAM中,以便在需要快速查找参考和其他类似 数据的环境中进行快速访问。适用存放临时数据。
引擎以前被称为HEAP引擎
MEMORY默认使用哈希索引,速度比使用B树索引快。
当然如果你想用B型树索引,可以在创建索引时指定。
注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。
如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。
所有的数据都在内存中,处理速度快,但是安全性不高。对表的大小有要求,依赖内存,不能建立太大的表。
- MEMORY存储引擎的优缺点
MEMORY表的大小是受到限制的。表的大小主要取决于两个参数,分别是max_rows和max_heap_table_size。其中,max_rows可以在创建表时指定:max_heap_table_size的大小默认为16MB,可以按需要进行扩大。因其存在内存中的特性,这类表的处理速度非常快。但是其数据容易丢失,生命周期短。(注意:mysqld守护进程奔溃时,所有的MEMORY数据都会丢失)
MEMORY表不支持VARCHAR、BLOB、TEXT数据类型,因为这种表类型按固定长度的记录格式存储。此外,如果使用版本4.1.0之前的MySQL,这不支持自动增长列。
- 适用场景
暂时:目标数据只是临时需要,在其生命周期中必须立即可用。
相对无关:存储在MEMORY表中的数据如果突然丢失,不会对应用服务产生实质的负面影响,而且不会对数据完整性有长期影响。