当前位置: 首页 > news >正文

PHP面试之三:MySQL数据库

基础考点

  • MySQL 数据类型

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

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


1、 VARCHARCHAR 更节约空间
2、 CHARVARCHAR 存储效率更好
3、 VARCHARCHAR 的长度,如果存储内容超出指定长度,会被截断
4、 存储经常改变的数据,CHAR 不容易产生碎片


尽量避免使用 BLOB/TEXT 类型,导致严重的性能开销


1、 有时可以使用枚举类型代替字符串类型
2、 枚举类型内部存储成整型(节省空间)
3、 避免使用数字作为 enum枚举 的常量,易混乱


1、 尽量使用 TIMESTAMP 来保存时间日期数据
2、 如果需要存储微秒, 可以使用 BIGINT 类型

  • MySQL 基础操作

连接与关闭:mysql -u -p -h -P

  • MySQL 存储引擎(数据表)

MyISAM与InnoDB的区别

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

由于并发操作的产生,所以需要使用锁进行并发控制
锁分为2种:共享锁排他锁,就是读锁写锁

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

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

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

  • MySQL 事务处理

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

安全性考点

  • SQL注入

使用 预处理 来防止SQL注入

  • 特殊字符转义

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

  • 错误记录

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

索引考察点

  • 使用索引的优缺点

优点:
1、减少服务器扫描的数据量
2、避免排序和临时表
3、随机I/O变顺序I/O
4、提高查询速度

缺点:
1、降低写的速度
2、占用磁盘
  • 索引使用场景

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

1、普通索引
2、唯一索引 (在普通索引的基础上,加上唯一约束)
3、主键索引 (在唯一索引的基础上,加上不能为Null)
4、组合索引
5、全文索引 (少用,只适合英文)
6、外键索引 (少用,使用业务逻辑进行数据关联)
  • 索引创建原则

1、最适合索引的列是出现在where子句中的列,或连接子句中的列,而不是出现在SELECT关键字后的列
2、索引列基数越大,效果越好
3、对字符串进行索引,应该制定一个前缀长度,可以节省大量索引空间
4、根据情况创建复合索引,复合索引能提高查询效率
5、避免创建过多的索引
6、主键尽量选择较短的数据类型
  • 索引注意事项

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

SQL语句关联考察点

  • 关联操作

1、关联更新
2、关联查询
  • 连接方式

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

2、内连接 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;
    
3、外连接
    
    左外连接 LEFT JOIN
    右外连接 RIGHT JOIN
    
4、联合连接 (UNION重复的合并,UNION ALL重复的不合并)

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

MySQL高扩展与高可用

  • 分库

  • 分表(水平与垂直)

  • 读写分离

  • 主从复制

  • 负载均衡

相关文章:

  • JavaScript 基础,登录验证
  • 实验-----基于MYSQL验证的vsftpd虚拟用户
  • 2006 飞行员配对(二分图最大匹配)
  • Flash Builder快捷键
  • Azure运维系列 7:现有虚拟机配置固定IP
  • Cannot drop a database link after changing the global_name ORA-02024 (文档 ID 382994.1)
  • 线上升级Redis纪实
  • iOS11沙盒测试内购时重复提示登陆账号
  • HTML一些标记的认识
  • nginx之server段常用模块
  • Linux进程相关概念
  • Oracle触发器用法实例详解
  • 金融安全资讯精选 2017年第十三期 百慕大离岸律师事务所遭黑客攻击,Google 发布HTTPS 普及度报告,Bad Rabbit攻击预警和安全建议,PCI SSC 发布新的 3DS 支付标准...
  • AIX 5.3下Oracle 10g RAC 启动故障--vip漂移
  • Tomcat配置——中文显示
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2017-09-12 前端日报
  • android 一些 utils
  • Angular 响应式表单 基础例子
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS 三角实现
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JavaScript中的对象个人分享
  • JAVA之继承和多态
  • Laravel 实践之路: 数据库迁移与数据填充
  • react-native 安卓真机环境搭建
  • Service Worker
  • VUE es6技巧写法(持续更新中~~~)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 开发基于以太坊智能合约的DApp
  • 容器服务kubernetes弹性伸缩高级用法
  • 使用Swoole加速Laravel(正式环境中)
  • 算法---两个栈实现一个队列
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 《码出高效》学习笔记与书中错误记录
  • 阿里云服务器购买完整流程
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #{}和${}的区别是什么 -- java面试
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (七)c52学习之旅-中断
  • (三)模仿学习-Action数据的模仿
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET Core 2.1路线图
  • .NET Project Open Day(2011.11.13)
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET连接MongoDB数据库实例教程
  • .Net组件程序设计之线程、并发管理(一)
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [1525]字符统计2 (哈希)SDUT