360大牛解读PHP面试-mysql数据库考察点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16399991/article/details/82257045

整理自慕课网360大牛全面解读PHP面试 ,购买链接:https://coding.imooc.com/class/133.html

 

       

     

  1.  mysql数据库基础考察点 

 真题回顾:

           请写出下面mysql数据类型的表达的意义(int(0), char(16), varchar(16),datetime、text) 

         考点分析:

            mysql数据类型;mysql基础操作;mysql存储引擎;mysql锁机制;mysql事务处理、存储过程、触犯器;

        数据类型:

       整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT; 属性UNSIGNED;长度:可以为整数类型指定宽        度,例如:int(11),对大多数应用是没有意义的,他不会限制值的合法范围,只会影响显示字符的个数;

      实数类型:FLOAT DOUBLE 、DECIMAL;decimal可以存储比BIGINT还大的整数,可用于存储精确小数,FLOAT和DOUBLE类型支持使用标准的浮点数进行近似计算;

         字符串类型:varchar、char、text、blob;varchar类型用于存储可变类型的字符串,他比定长类型更节省空间。varchar使用1或2个额外字节记录字符串长度,列长度小于255字节,使用一个字节表示,否则两个;varchar长度,如果存储内容超出指定长度,会被截断;char是定长的,根据定义的字符串长度分配足够的空间,char会根据需要采用空格进行填充以方便比较;char适合存储很短的字符串,或者所有值都接近一个长度;char超出设定的长度会被截断;对于经常变更的数据char比varchar更好,因为char不容易产生碎片;对于非常短的列,char比varchar在存储空间上更有效率;尽量避免使用blob和text类型,查询会使用临时表,导致严重的性能开销;

        枚举:有时可以使用枚举代替常使用的字符串类型;枚举内部实际使用整形存储;尽量避免使用数字作为枚举的常量,容易混乱;排序是按照内部存储的整数进行排序的;

       日期和时间类型:尽量使用timestamp,比datetime空间效率高;

      列属性:AUTO_INCREMENT、default、not null、zerofill;

   

     常见操作:

        msyql的连接和关闭:mysql -u(指定用户) -p(指定密码) -P(指定端口) -h(指定主机)

      表引擎:

      InnoDB表引擎:默认的事务性引擎,最重要最广泛的存储引擎,性能优秀;对主键的查询性能高于其他类型存储引擎;内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区;通过工具和机制支持真正热备份;支持崩溃后的恢复;支持行级锁;支持外键;

     MyISAM表引擎:拥有全文索引、压缩、空间函数;不支持事务和行级锁、不支持崩溃后的安全恢复;设计简单,某些场景下性能很好;

     mysql 锁机制:

    共享锁和排它锁其实就是读锁和写锁;

读锁:共享的,不堵塞,多个用户可以同时读一个资源互不干扰;

写锁:排他的,一个写锁堵塞其他的写锁和读锁,这样可以只允许一个人进行写入,防止其他用户读取正在写入的资源;

  锁粒度:

   表锁:系统性能开销小,会锁定整张表,MyISAM使用表锁;

  行锁:最大程度的支持并发处理,但是带来做大的锁开销,InnoDB实行行级锁;

事务处理:

mysql提供事务处理的表引擎是InnoDB。服务器层不管理事务,又下层的引擎实现;在非事务表上执行事务不报错;

存储过程:

触发器:

         

 一网打尽: 

    2.mysql创建高性能索引考察点

      真题回顾

          简单描述mysql中,索引、主键、唯一索引、联合索引的区别,对数据库性能有什么影响;

        一个表只能有一个主键索引,可以又多个唯一索引;主键索引一定是唯一索引,唯一索引不是主键索引;主键索引可以与外键构成参照完整性约束,放置数据不一致;

      考点分析

        mysql索引的基础和类型;普通索引:最近本的索引,没有任何约束限制;唯一索引:与普通索引类似,但是具有唯一性约束;主键索引:特殊的唯一索引,不允许有空值;组合索引:将多个列组合在一起创建索引,可以覆盖多个列;外键索引:InnoDB有;全文索引:MyISAM有,英文;

        mysql索引的创建原则;最适合索引的列是where子句中的列或者连接子句中的列;索引列的基数越大,索引效果越好;对字符串进行索引,应该制定一个前缀长度,可以节省大量索引空间;根据情况创建复合索引;避免创建过多的索引,索引回额外占用磁盘空间,降低写操作效率;主键尽可能选择较短的数据类型,可以减少索引的磁盘占用;

       mysql创建索引的注意事项;复合索引遵循前缀选择(最左原则);like查询 %不能在前,可以使用全文索引;column is null 可以使用索引;如果mysql估计使用索引比全表扫描更慢,会放弃使用索引;如果or前的条件中列有索引,后面的没有索引,索引都不会用到;列类型是字符创类型,查询时一定要给值加引号,否则索引会实效;

      索引对性能的影响:大大减少服务器的扫描量;帮助服务器避免排序和创建临时表;将随机io变顺序io;大大提高查询速度,降低写速度,占用磁盘;

      索引使用场景:对于非常小的表,大部分情况下,全表扫描效率更高;对于中大型表,索引非常有效;特大型表,建立和使用索引的代价将随之增大,可以使用分区技术来解决;

     一网打尽

        创建复合索引有哪些注意事项?

    3.mysql的sql语句编写考察点

     真题回顾

    有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中a.id与b.id关联,现要求写sql,将b中age>50的记录的c1,c2更新到a表中c1,c2;

   update a,b set a.c1=b.c1,a.c2=b.c2 where a.id=b.id and b.age>50

     考点分析

   mysql关联update语句;

    mysql关联查询语句;六种关联查询:交叉连接(cross join),内连接(inner join), 外连接(left join/right join),联合查询(union  与 union all),全连接(full join)。

    交叉连接:SELECT * from a,b,(c....)或者 SELECT * from a cross join b (cross join c),没有任何关联条件,结果是笛卡尔积,结果集会很大,没有意义,很少使用;内连接:SELECT *from a,b where a.id=b.id 或者 SELECT * from a inner join b on a.id=b.id;多表中同时符合某种条件的数据记录集合,内连接分为三类:1.等值连接,on a.id=b.id ,2不等值连接:on a.id>b.id 3.自连接 select * from a t1 inner join a t2 on t1.id=t2.pid;联合查询:select *from a union select·*from b union 就是把多节结果集集合在一起;全连接:mysql不支持全连接,可以使用left join 和union  和right join 联合使用,select * from a left Join b on a.id=b.id union select * from a right join b on a.id=b.id;嵌套查询:用一条sql语句结果作为另一条sql的条件,select *from a where id in(select id from b);

     一网打尽

  1. mysql的查询优化考察点

  2. mysql高可扩展和高可用考察点

  3. mysql安全性考察点

猜你喜欢

转载自blog.csdn.net/qq_16399991/article/details/82257045