MySQL相关问题

一.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 ) 不同:

  1. innodb表引擎,是默认事务型引擎。5.1版本前,myisam是默认存储引擎。
  2. Innodb数据存储在共享表空间,myisam表存储在两个文件.MYD,MYI
  3. Innodb对主键查询的性能高
  4. Innodb支持行级锁,myisam只支持表级锁
  5. Innodb支持外键,myisam不支持外键
  6. Innodb支持热备份,支持崩溃后的安全恢复,myisam不支持崩溃后的安全恢复

   2) innodb引擎的4大特性

  1. 支持事务
  2. 支持行级锁
  3. 支持外键
  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;

 

    嵌套子查询

原文地址:https://www.cnblogs.com/wwlong/p/10154991.html