90分钟提升MySQL读写性能干货详解
前言
知识无底,学海无涯,到今天进入MySQL的学习4天了,知识点虽然简单,但是比较多,所以写一篇博客将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述述
1.SQL的概
Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。
2.SQL的优点
1、简单易学,具有很强的操作性
2、绝大多数重要的数据库管理系统均支持SQL
3、高度非过程化;用SQL操作数据库时大部分的工作由DBMS自动完成安装MySQL服务 + 启动MySQL 服务
安装mysql服务
执行下面的命令: mysqld --install [服务名] ###(服务名可以不加默认为mysql)
成功了!
如果出现这个
说明mysql的服务还在把它删掉
用这个命令
SC删除的MySQL
在执行上面安装服务
服务安装成功之后通过命令 net start mysql
启动MySQL的服务 总体三步走
1初始化MySQL
2创建服务
3启动服务 总体三步走
1初始化MySQL
2创建服务
3启动服务
到这你的MySQL已经是安装好了!到这你的MySQL已经是安装好了! 一、Mysql索引1.1 一条SQL查询语句是如何执行的(说法1)
大体来说,MySQL可以分为Server层和存储引擎层两部分。
Server层包括连接器、查询缓存、分析器、优化器、执行器等,提供了Mysql Server 数据库所有逻辑功能,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图、函数等。
总结;详细教程资料关注+后台私信;资料;两个字可以免费视频领取+文档+各大厂面试题 资料内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。
SQL预处理语句(Prepared Statements)
当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划这个过程会占用大量的时间,使得你的应用变慢。通过使用一个预处理语句你就可以避免重复分析、编译、优化的环节。简单来说,预处理语句使用更少的资源,执行速度也就更快。
传给预处理语句的参数不需要使用引号,底层驱动会为你处理这个。如果你的应用独占地使用预处理语句,你就可以确信没有SQL注入会发生。(然而,如果你仍然在用基于不受信任的输入来构建查询的其他部分,这仍然是具有风险的)。
正因为预处理语句是如此有用,它成了PDO唯一为不支持此特性的数据库提供的模拟实现。这使你可以使用统一的数据访问规范而不必关心数据库本身是否具备此特性。 /* 使用预处理语句重复插入数据(1) 此示例演示了一个通过向命名占位符代入一个name和一个value值来执行的INSERT查询 */ $stmt= $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(":name", $name); $stmt->bindParam(":value", $value); //插入一行 $name= "one"; $value= 1; $stmt->execute();//使用不同的值插入另一行 $name= "two"; $value= 2; $stmt->execute(); /* 使用预处理语句重复插入数据(2) 此示例演示了一个通过向用?表示的占位符代入一个name和一个value值来执行的INSERT查询 */ $stmt= $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)"); $stmt->bindParam(1, $name); $stmt->bindParam(2, $value); // 插入一行 $name= "one"; $value= 1; $stmt->execute(); // 使用不同的值插入另一行 $name= "two"; $value= 2; $stmt->execute(); /* 通过预处理语句获取数据 此示例演示使用从表单获取的数据为关键值来执行查询获取数据。用户的输入会被自动添加引号,所以这儿不存在SQL注入攻击的危险。 */ $stmt= $dbh->prepare("SELECT * FROM REGISTRY where name = ?"); if($stmt->execute(array($_GET["name"]))) { while($row= $stmt->fetch()) { print_r($row); } }
其实主流的PHP框架都支持Prepared Statements,而且要简单很多。下面是ThinkPHP模型支持的例子: /* 实例化User模型 */ $model= D("User"); /* 定义预处理传入数据 */ $data["username"] = "deeka"; $data["password"] = "123456"; /* 数据预处理 */ if($model->create($data)){ $model->add(); }