一.MySQL中常用的数据库引擎 并且说明每个引擎的作用和局别
InnoDB引擎 Myisam引擎
区别:
1.InnoDB支持事务和行级锁 Myisam不支持
2.InnoDB使用共享空间 Myisam表储存两个文件 MYD和MYI
3.InnoDB支持热备份 支持崩溃后的安全恢复 Myisam不支持
4.InnoDB支持外键 Myisam支持全文索引
二.为什么要释放MySQL链接?pdo方式链接MySQL会比MySQL,MySQLi更安全
如果不释放链接,链接就会越来越多,最终就会超过MySQL的最大连接数
pdo采用预处理机制 可以防止sql的注入
三.MySQL和NoSQL的局别是什么?MySQL和redis怎样结合使用可以指数级提升数据库查询效率
MySQL是关系型服务器 NoSQL是非关系型数据库
将redis作为缓存每次获取需要查询数据时,先从Redis里看一下是否存在 如果存在就直接返回如果不存在就从MySQL中查询,将查询的结果保存在redis中一份下次在取值时就直接从redis中获取
四.常用的mysql命令?
create database <数据库名>
show databases;
drop database <数据库名>
select database();
create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);
drop table <表名>
insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]
select <字段1,字段2,...> from < 表名 > where < 表达式 >
delete from 表名 where 表达式
update MyClass set name='Mary' where id=1;
alter table 表名 add字段 类型 其他;
mysqldump -u user_name -p123456 database_name > outfile_name.sql
mysqldump -u user_name -p database_name table_name > outfile_name.sql
五.数据库设计经验,为什么进行分表? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明
当数据表的数据量很大时,查询速度就会降低,为了提高查询速度,需要对表格进行分表。分为水平拆分和垂直拆分。
水平拆分: 按照行来对表格进行拆分。可以降低在查询时需要读的数据和索引的页数。比如可以按照常用的数据和不常用的数据进行水平拆分。
水平拆分的缺点:给应用增加了复杂度,通常查询时需要多个表名,查询所有数据都需要union操作。
垂直分表: 按照列来对表格进行拆分。比如一个表中某些列常用,某些列不常用。可以使数据行变小,一个数据页能存储更多数据,查询时减少I/O次数
垂直分表缺点:管理冗余列,查询所有数据需要JOIN操作
有些分表的策略基于应用层的逻辑算法,一旦逻辑算法改变,整个分表逻辑都会改变,扩展性较差
六.数据库优化问题
七.MySQL中myisam与innodb的区别,至少5点(3分)
1 ) 不同:
- innodb表引擎,是默认事务型引擎。5.1版本前,myisam是默认存储引擎。
- Innodb数据存储在共享表空间,myisam表存储在两个文件.MYD,MYI
- Innodb对主键查询的性能高
- Innodb支持行级锁,myisam只支持表级锁
- Innodb支持外键,myisam不支持外键
- Innodb支持热备份,支持崩溃后的安全恢复,myisam不支持崩溃后的安全恢复
2) innodb引擎的4大特性
- 支持事务
- 支持行级锁
- 支持外键
- 支持热备份和崩溃后的安全恢复
3 ) 两者select count(*)哪个更快,为什么
Myisam的效率高。Myisam会保存表的总行数,只需要读出保存好的行数即可。Innode表不像myisam有个内置计数器,不会保存表的具体行数,需要扫描整个表来计算有多少行。
MySQL 查询问题
1.统计年龄最大的 ------select max(age)from stu;
2.按班级分组统计年龄最大的 -------select max(age) from stu group by classid;
3.统计总人数,最大年龄,最小年龄,平均年龄,年龄总和 ------select count(*),max(age),avg(age),sum(age) from stu;
4.按班级分组统计总人数,最大年龄,最小年龄,平均年龄,年龄总和 ---------- select count(*),max(age),avg(age),sum(age) from stu group by classid;
5.按班级分组,统计每个班的平均年龄,并获取平均年龄23以上的信息
select classid,count(*),max(age),min(age),avg(age) ag from stu group by classid having ag >=23;
6.统计每个班级男生的平均年龄
select classid,avg(age)from stu where sex =‘m’group by classid;
嵌套子查询