PHP面试之三:MySQL数据库

基础考点

  • MySQL 数据类型mysql

整型:tinyint、smallint、mediumint、int、bigint
小数型:float、double、decimal
字符串型:varchar、char、text、blob
时间日期型:time、date、datetime、timestamp
枚举类型:enum

在定义整型数据类型时,常常看到 int(4) 括号里指定的是显示长度,不限制值合法范围,这个显示长度要配合zerofill这个属性才有意义。sql


一、 VARCHARCHAR 更节约空间
二、 CHARVARCHAR 存储效率更好
三、 VARCHARCHAR 的长度,若是存储内容超出指定长度,会被截断
四、 存储常常改变的数据,CHAR 不容易产生碎片数据库


尽可能避免使用 BLOB/TEXT 类型,致使严重的性能开销安全


一、 有时可使用枚举类型代替字符串类型
二、 枚举类型内部存储成整型(节省空间)
三、 避免使用数字做为 enum枚举 的常量,易混乱服务器


一、 尽可能使用 TIMESTAMP 来保存时间日期数据
二、 若是须要存储微秒, 可使用 BIGINT 类型并发

  • MySQL 基础操做负载均衡

链接与关闭:mysql -u -p -h -P函数

  • MySQL 存储引擎(数据表)性能

MyISAM与InnoDB的区别日志

一、 InnoDB支持事务,MyISAM不支持事务
二、 InnoDB支持行级锁,MyISAM支持表锁
三、 InnoDB数据存储在共享表空间,MyISAM数据存储在MyD文件和MyI文件
四、 InnoDB支持奔溃后的安全恢复,MyISAM不支持
五、 InnoDB对主键查询的性能高于其余存储引擎
六、 MyISAM拥有全文索引、压缩、空间函数
  • MySQL 锁机制

因为并发操做的产生,因此须要使用锁进行并发控制
锁分为2种:共享锁排他锁,就是读锁写锁

共享锁(读锁),不堵塞,多个用户能够同时读同一资源,互不干扰

排他锁(写锁),一个写锁会阻塞其余读锁和写锁,这样只容许一我的进行写入操做,防止其余人进行读取或者写入

注意:InnoDB支持行级锁,MyISAM支持表锁

  • MySQL 事务处理

注意:使用事务的前提是 表必须是InnoDB引擎

安全性考点

  • SQL注入

使用 预处理 来防止SQL注入

  • 特殊字符转义

写入数据库的数据必须通过特殊字符转义操做,此操做在应用层进行

  • 错误记录

当发生查询错误时,不能把错误信息返回给用户,把错误记录到日志

索引考察点

  • 使用索引的优缺点

优势:
一、减小服务器扫描的数据量
二、避免排序和临时表
三、随机I/O变顺序I/O
四、提升查询速度

缺点:
一、下降写的速度
二、占用磁盘
  • 索引使用场景

很是小的表(1~1000) 不使用索引
中型(1000~100W)   使用索引
大型(100W~1000W)  使用索引
超大(1000W以上)   索引 + 分区技术
  • 索引类型

一、普通索引
二、惟一索引 (在普通索引的基础上,加上惟一约束)
三、主键索引 (在惟一索引的基础上,加上不能为Null)
四、组合索引
五、全文索引 (少用,只适合英文)
六、外键索引 (少用,使用业务逻辑进行数据关联)
  • 索引建立原则

一、最适合索引的列是出如今where子句中的列,或链接子句中的列,而不是出如今SELECT关键字后的列
二、索引列基数越大,效果越好
三、对字符串进行索引,应该制定一个前缀长度,能够节省大量索引空间
四、根据状况建立复合索引,复合索引能提升查询效率
五、避免建立过多的索引
六、主键尽可能选择较短的数据类型
  • 索引注意事项

一、复合索引遵循前缀原则(重要,按顺序)
二、like查询,%不能在前面(在前面索引会失效,若是要在前面请使用第三方全文索引)
三、列is Null也是可使用索引
四、若是OR条件想用到索引,必须or先后的字段都须要是索引字段
五、列是字符串类型时,查询时必定要使用引号(单或双),索引才会生效

SQL语句关联考察点

  • 关联操做

一、关联更新
二、关联查询
  • 链接方式

一、交叉链接 Cross join (无条件)
    
    select * from A CROSS JOIN B CROSS JOIN C;

二、内链接 INNER JOIN (有条件的交叉链接) 简写 JOIN

    select * from A INNER JOIN B INNER JOIN C ON A.id = B.id;
    select * from A,B where A.id = B.id;
    select * from A T1 INNER JOIN A T2 ON T1.id = T2.id;
    
三、外链接
    
    左外链接 LEFT JOIN
    右外链接 RIGHT JOIN
    
四、联合链接 (UNION重复的合并,UNION ALL重复的不合并)

    SELECT * FROM position UNION SELECT * FROM team; 
    SELECT * FROM position UNION ALL SELECT * FROM team; 
    **UNION ALL性能高于UNION**
    
五、全链接(MySQL不支持)

MySQL高扩展与高可用

  • 分库

  • 分表(水平与垂直)

  • 读写分离

  • 主从复制

  • 负载均衡

相关文章
相关标签/搜索