首页 > 数据库 >mysql基础知识(3)

mysql基础知识(3)

时间:2024-11-13 15:43:00浏览次数:1  
标签:SQL mysql 基础知识 索引 使用 查询 ref 主键

MySQL中有哪些重要的日志文件?

错误日志:

记录MySQL服务器运行过程中的错误信息。

查询日志(General Log):

记录数据库执行的所有命令。

慢查询日志:

记录执行时间超过预设阈值的查询语句。

redo log(重做日志):

用于在系统崩溃时恢复未提交的数据。

undo log(回滚日志):

用于事务回滚时恢复数据。

bin log(二进制日志):

记录所有数据库表结构变更和数据修改操作,用于复制和数据恢复。

redo log和binlog的区别是什么?

redo log:

主要用于MySQL异常重启后的一种数据恢复手段,确保了数据的一致性。它是循环写的,只记录未刷盘的日志。

binlog:

记录了所有数据库表结构变更和数据修改操作,是追加写的,保存的是全量的日志。它主要用于复制、数据恢复和审计。

SQL注入是什么,如何预防?

SQL注入是一种攻击方式,允许攻击者通过网站输入SQL语句,可能破坏整个数据库或提取敏感信息。通过使用预处理语句与参数化查询、输入验证和转义特殊字符来预防。

1.(简单又有效的方法)PreparedStatement
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。
使用好处:
(1).代码的可读性和可维护性.
(2).PreparedStatement尽最大可能提高性能.
(3).最重要的一点是极大地提高了安全性.
2.使用正则表达式过滤传入的参数
3.字符串过滤
4.jsp中调用该函数检查是否包函非法字符
5.JSP页面判断代码:

下面是在开发过程中可以避免 SQL 注入的一些方法。
1.避免使用动态SQL 避免将用户的输入数据直接放入 SQL 语句中,最好使用准备好的语句和参数化查询,这样更安全。
2.不要将敏感数据保留在纯文本中 加密存储在数据库中的私有/机密数据,这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。
3.限制数据库权限和特权 将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。
4.避免直接向用户显示数据库错误 攻击者可以使用这些错误消息来获取有关数据库的信息。

MySQL用户管理的最佳实践是什么?

包括最小权限原则、定期审查用户权限、强化密码和禁止使用根账户进行功能操作。

如何使用EXPLAIN分析sql语句的性能?

1)、id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询。

2)、select_type列常见的有:

3)、table

显示的查询表名,如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null

4)、type

依次从好到差:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引

A:system:表中只有一行数据或者是空表,且只能用于myisam和memory表。如果是Innodb引擎表,type列在这个情况通常都是all或者index

B:const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫做唯一索引扫描

C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现eq_ref

D:ref:不像eq_ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。

E:fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引

F:ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。

G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值

H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。

I:range:索引范围扫描,常见于使用>,

J:index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所个索引,性能可能大部分时间都不如range

K:index:索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。

L:all:这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。

5)、possible_keys

查询可能使用到的索引都会在这里列出来

6)、key

查询真正使用到的索引

7)、key_len

用于处理查询的索引长度

8)、ref

如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func

9)、rows

这里是执行计划中估算的扫描行数,不是精确值

10)、extra

MySQL服务器的默认端口是什么?

3306

三大范式是什么?

第一范式:字段不可分;
第二范式:有主键,非主键字段依赖主键;
第三范式:非主键字段不能相互依赖

日常工作中应该怎么优化SQL?

1.优化表结构
​ 1.1尽量使用数字型字段
​ 若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
​ 1.2尽可能的使用 varchar 代替 char
​ 变长字段存储空间小,可以节省存储空间。
​ 1.3当索引列大量重复数据时,可以把索引删除掉

2.优化查询
应尽量避免在 where 子句中使用!=或<>操作符
应尽量避免在 where 子句中使用 or 来连接条件
任何查询也不要出现select *
避免在 where 子句中对字段进行 null 值判断

3.索引优化
对作为查询条件和 order by的字段建立索引
避免建立过多的索引,多使用组合索引

对慢sql如何优化?

分析语句,是否加载了不必要的字段/数据
分析 SQL 执行句话,是否命中索引等
如果 SQL 很复杂,优化 SQL 结构
如果表数据量太大,考虑分表

InnoDB中的B+Tree特性带来的优势?

它是B Tree的变种,B Tree能解决的问题它都能解决,B Tree能解决的两大问题(每个节点存储更多的关键字,路数更多)
扫库、扫表的能力更强(如果我们要进行全表扫描,只需要遍历叶子节点就可以了,不需要遍历整个B+Tree拿到所有的数据)
B+Tree的磁盘读写能力相对B Tree来说更强(根节点和枝节节点不保存数据区,所以一个节点可以保存更多关键字,一次磁盘加载的关键字更多)
排序能力更强(因为叶子节点上有下一个数据区的指针,数据形成了链表)
效率更加稳定(B+Tree永远是在叶子节点拿到数据,所以IO次数稳定)

标签:SQL,mysql,基础知识,索引,使用,查询,ref,主键
From: https://www.cnblogs.com/henghuixinda/p/18544095

相关文章

  • CentOS 安装 mysql 5.6
    一、下载官方的rpm包1wgethttp://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 二、安装rpm包1rpm-ivhmysql-community-release-el7-5.noarch.rpm 三、安装mysql1yum-yinstallmysql-server然后检查是否安装成功1rpm-qa|grepmysql......
  • 解决 SQLyog 连接 MySQL 8.0.24 报错 2058 的方法(Windows 平台)
    解决SQLyog连接MySQL8.4.2报错2058的方法(Windows平台)在使用SQLyog连接MySQL8.4.2时,你可能会遇到错误代码2058。这个错误通常是由于MySQL8.0默认使用的caching_sha2_password身份验证插件与SQLyog不兼容导致的。本文将详细介绍如何在Windows平台上解决这......
  • MySQL第九章,数据访问和DAO模式
    一、数据访问与Properties配置文件数据访问是应用程序与数据库之间的交互过程。在Java开发中,我们通常使用JDBC(JavaDatabaseConnectivity)来实现数据访问。然而,直接编写JDBC代码可能会导致代码冗长、难以维护,并且容易出错。为了简化数据访问过程,我们可以使用配置文件来管理数......
  • MySQL导出1000条以上数据方法,及出错提示 --secure-file-priv解决方法
    1- MySQL导出1000条以上数据的脚本先上MySQL语句,如果执行没报错,那就是前人设置好了,如果报错接着向下看哦SELECT*FROMyour_tableINTOOUTFILE'C:/Users/Administrator/Desktop/key/file.csv'FIELDSTERMINATEDBY','ENCLOSEDBY'"'LINESTERMINATEDBY'\n&......
  • mysql基础知识
    sql语句类型及用途:Ddl:建表改表删表删数据【保留表结构】Dql:查询where,groupby,orderby,joinDml:新增修改删除数据Dcl:新增删除用户对数据库权限事务ACID特性简介原子性(Atomicity)事务被视为一个不可分割的最小单位,它要么完全执行,要么完全不执行。一致性(Consi......
  • Python Web 应用开发基础知识
    PythonWeb应用开发基础知识引言随着互联网的快速发展,Web应用程序的需求日益增加。Python作为一种简单易学且功能强大的编程语言,已经成为Web开发中广受欢迎的选择之一。本文将深入探讨PythonWeb开发的基础知识,包括常用框架、基本概念、数据库交互以及前后端分离等......
  • L0G3000作业-Git基础知识
    一、闯关任务1任务要求:破冰之自我介绍首先fork一下GitHub-InternLM/Tutorial:LLM&VLMTutorial该项目到自己的账号,注意不要勾选下图的“Copythecamp4branchonly”。来到vscode启动虚拟环境,然后输入下面命令将仓库克隆到本地gitclonehttps://github.com/HuHu1226......
  • 免费送源码:Java+python+django+MySQL 小区疫情订菜系统 计算机毕业设计原创定制
    摘 要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于小区疫情订菜系统当然也不能排除在外,随着网络技术的不断成熟,带动了小区疫情订菜系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种......
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊
    本文为大家整理了墨天轮数据社区2024年10月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查,再到性能优化的实用技巧及常用脚本等,分享给大家:Oracle优质技术文章概念梳理&安装配置OracleR......
  • MySQL 中的 DELETE、TRUNCATE 和 DROP:深入理解与应用
    MySQL中的DELETE、TRUNCATE和DROP:深入理解与应用在MySQL数据库管理中,DELETE、TRUNCATE和DROP是三个常用的命令,用于删除表中的数据或表本身。尽管它们的目的相似,但它们的执行原理和效果却大不相同。本文将深入探讨这三个命令的区别、执行原理以及适用场景。1.DELETE:逐......