mysql练习一

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表中的数据如果突然丢失,不会对应用服务产生实质的负面影响,而且不会对数据完整性有长期影响。

你可能感兴趣的:(mysql练习一)