mysql函数

MySQL 语句执行过程详解

纵然是瞬间 提交于 2019-12-04 05:34:48
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 MySQL InnoDB 锁 MySQL InnoDB MVCC MySQL InnoDB 实现高并发原理 MySQL InnoDB 快照读在RR和RC下有何差异 当客户端向 MySQL 发送一个请求的时候,MySQL 的执行过程如下图所示: MySQL 客户端/服务端通信 通信机制 MySQL 客户端与服务端的通信方式是 “ 半双工 ”。 全双工:双向通信,发送同时也可以接收 半双工:双向通信,同时只能接收或者是发送,无法同时做操作 单工:只能单一方向传送 一旦一端开始发送消息,另一端要接收完整个消息才能响应它,所以我们无法也无须将一个消息切成小块独立发送,也没有办法进行流量控制。 客户端用一个单独的数据包将查询请求发送给服务器,所以当查询语句很长的时候,需要设置 max_allowed_packet 参数。 但是需要注意的是,如果查询实在是太大,服务端会拒绝接收更多数据并抛出异常。 与之相反的是,服务器响应给用户的数据通常会很多,由多个数据包组成。但是当服务器响应客户端请求时,客户端必须完整的接收整个返回结果,而不能简单的只取前面几条结果,然后让服务器停止发送。 因而在实际开发中

MySQL 将 字符串 转为 整数

为君一笑 提交于 2019-12-04 05:03:42
MySQL 将 字符串 转为 整数 1、 CAST(epr AS type) 1)type 为 SIGNED SELECT CAST("-12" AS SIGNED); 效果如下: 2)type 为 UNSIGNED SELECT CAST("-12" AS UNSIGNED); 效果如下: 2、 CONVERT(expr,type) SELECT CONVERT('123', SIGNED); 额外补充 1、CAST 和 CONVERT 两个函数中的 type取值可以为: SIGNED , UNSIGNED , DECIMAL , DATE , TIME , DTAETIME 等, 1)以 DATE 为例: 2)以 TIME 为例: 3)以 DATETIME 为例: 2、CAST 和 CONVERT 两个函数中的 type取值不支持 INTEGER , FLOAT , DOUBLE 。否则,会报错。 以 INTEGER 为例: 来源: https://www.cnblogs.com/miracle-luna/p/11832595.html

MySQL--07 explain用法

雨燕双飞 提交于 2019-12-04 04:56:09
MySQL explain用法 explain命令应用 查询数据的方式 1.全表扫描 1)在explain语句结果中type为ALL 2)什么时候出现全表扫描? 2.1 业务确实要获取所有数据 2.2 不走索引导致的全表扫描 ​ 2.2.1 没索引 ​ 2.2.2 索引创建有问题 ​ 2.2.3 语句有问题 生产中,mysql在使用全表扫描时的性能是极其差的,所以MySQL尽量避免出现全表扫描 2.索引扫描 2.1 常见的索引扫描类型: 1)index 全索引扫描 2)range 范围查询时会达到range级别 3)ref 使用非唯一索引扫描或者唯一索引的前缀扫描 4)eq_ref 5)const 6)system 7)null 从上到下,性能从最差到最好,我们认为至少要达到range级别 一般我们说,只要一条SQL语句,达到range级别,我们会认为索引的效率是OK的 全表扫描: mysql> explain select * from student2; index :全 索引扫描, index与ALL区别为index类型只遍历索引树。 mysql> explain select cno from course; +----+-------------+--------+-------+---------------+---------+---------+------+---

PHP中的SQL查询缓存

不问归期 提交于 2019-12-04 04:26:32
适合读者 本教程适合于那些对缓存SQL查询以减少数据库连接与执行的负载、提高脚本性能感兴趣的PHP程序员。 概述 许多站点使用数据库作为站点数据存储的容器。数据库包含了产器信息、目录结构、文章或者留言本,有些数据很可能是完全静态的,这些将会从一个缓存系 统中得到的极大好处。 这样一个系统通过把SQL查询的结果缓存到系统的一个文件中存储,从而阻止连接数据库,构造查询与取得返回结果而提高了响应时间。 有些系统数据库并不是放在WEB服务器上的,这样需要一个远程连接(TCP或者其它类似的),或者从数据库中获取大量的数据,这样你得忍受更多时间,这决 定于系统响应时间与资源利用。 前提 本教程使用MySQL作为数据库。你需要安装MySQL(www.mysql.com下载是有效的)和激活PHP MYSQL扩展(默认情况是激活的)。 由于要查询数据库,你需要知识一些SQL(结构化查询语言)的基本常识。 缓存SQL查询结果 为什么要缓存查询结果? 缓存查询结果能极大地改进脚本执行时间和资源需求。 缓存SQL查询结果也允许你通过后期处理数据。如果你用文件缓存去存储全部脚本的输出结果(HTML输出),这样可能是行不通的。 当你执行一个SQL查询时,点典的处理过程是: l 连接数据库 l 准备SQL查询 l 发送查询到数据库 l 取得返回结果 l 关闭数据库连接

MySQL笔记--命令

自古美人都是妖i 提交于 2019-12-04 04:19:27
SQL语言的分类 数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。 一、 DDL 创建基本表     create table student ( Sno char(5) not null unique, Sname char(20) unique, Ssex char(1), Sage int, Sdept char(15)); 复制表结构和数据 create table new_dwd_inv_return_record as select * from dwd_inv_return_record; 复制表结构不复制数据 create table new_dwd_inv_return_record as select * from dwd_inv_return_record where 1 =0; ### 修改基本表 修改表名(法一): ALTER TABLE user10 RENAME TO user11; 修改表名(法二): RENAME TABLE user11 TO user10; 删除表 drop table 删除表中数据,保留结构 truncate table ‘表名’ 修改表名 ALTER TABLE dwd_pro_repay_record RENAME TO d_pro_repay_record; 查询数据(模糊查询)

mybatis调用mysql的存储过程(procedure),实现查询操作(student表中的某个年级中的总人数 select (1) 或者 select (*))

大憨熊 提交于 2019-12-04 04:09:06
step1:在mysql cmd中新建存储过程: drop procedure if exists queryCountByGrade ; delimiter // -- 定义存储过程结束符号为// create procedure queryCountByGrade(IN gradenameinput INT(11),OUT counts int(11) begin select count(*) into counts from student where grade = gradenameinput;end // delimiter ; --重新定义存储过程的结束符号是分号 step2:编写StudentMapper.xml文件 <!-- 通过mybatis调用存储过程procedure,来实现查询功能 ,statementType="CALLABLE" --> <select id="queryCountByGradeWithProcedure" statementType="CALLABLE" parameterType="HashMap"> CALL queryCountByGrade( #{gradenameinput,mode=IN,jdbcType=VARCHAR}, #{counts,mode=OUT,jdbcType=INTEGER} /

MySQL总结(5)

ぃ、小莉子 提交于 2019-12-04 03:38:23
视图 SELECT cust_name,cust_contact FROM customers,orders,orderitems WHERE customers.cust_id=orders.cust_id AND orderitems.order_num=orders.order_num AND prod_id='TNT2'; 假如可以把整个查询包装成一个名为 productcustomers 的虚拟表 SELECT cust_name,cust_contact FROM productcustomers #this is a 视图 WHERE prod_id='TNT2' productcustomers 是一个视图,作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。 😁 重用SQL语句。 😁 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必 知道它的基本查询细节。 😁 使用表的组成部分而不是整个表。 😁 保护数据。可以给用户授予表的特定部分的访问权限而不是整个 表的访问权限。 😁 更改数据格式和表示。视图可返回与底层表的表示和格式不同的 数据。 😘 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相 同的名字)。 😘 对于可以创建的视图数目没有限制。 😘 为了创建视图,必须具有足够的访问权限

MySQL一些总结(2)

扶醉桌前 提交于 2019-12-04 03:37:41
COUNT() 函数有两种使用方式。 😁使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值( NULL )还是非空值。 😁使用 COUNT(column) 对特定列中具有值的行进行计数,忽略 NULL 值。 count() //计数函数 MAX() MIN() 聚集函数使用 DISTINCT 参数 distinct 注意 如果指定列名,则 DISTINCT 只能用于 COUNT() 。 DISTINCT不能用于 COUNT(*),因此不允许使用COUNT(DISTINCT),否则会产生错误 。类似地, DISTINCT 必须使用列名,不能用于计算或表达式。 可以用多个聚集函数进行计算 ; 创建分组 SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id; 上面的 SELECT 语句指定了两个列, vend_id 包含产品供应商的ID,num_prods 为计算字段(用 COUNT(*) 函数建立)。 GROUP BY 子句指示MySQL按 vend_id 排序并分组数据。这导致对每个 vend_id 而不是整个表计算 num_prods 一次。从输出中可以看到,供应商 1001 有 3 个产品,供应商1002 有 2 个产品,供应商 1003 有 7 个产品,而供应商 1005 有

第六篇:视图、触发器、事务、存储过程、函数

余生长醉 提交于 2019-12-04 03:31:58
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 #两张有关系的表 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ 4 rows in set (0.00 sec) mysql> select * from teacher; +-----+-----------------+ | tid | tname | +-----+-----

PHP与MySQL的连接

允我心安 提交于 2019-12-03 23:17:18
一、PHP的相关扩展   PHP与MySQL的交互需要要借助PHP提供的数据库扩展,在PHP中提供了多种数据库扩展,常用的MySQL扩展,   MySQLi扩展和PDO扩展。   1.三者各自的特点:     MySQL扩展:不支持MySQL数据库服务器的新特性,安全性较差,在项目开发中不常用;     MySQLi扩展:是MySQL扩展的增强版,不仅包含了MySQL扩展的功能函数,还可以使用MySQL新版本中的高级   特性。如多语句执行和事务的支持,预处理方式解决了SQL注入问题;     PDO(PHP Data Objects)扩展:它提供了一个统一的API接口,只要修改其中的DSN(数据源),就可以实现PHP   应用与不同类型数据库服务器之间的交互。解决了早期PHP版本中不同数据库扩展的应用接口互不兼容的问题,提   高了程序的可维护性和可移植性。   2.开启MySQLi扩展     1).步骤一:     打开php.ini文件,找到 此行,取消对此行的注释;     2).步骤二:     继续在php.ini文件中,找到 此行,取消注释   并且修改成自己ext目录所在的路径。两个步骤缺一不可,修改完并且保存之后,重启自己的Apache服务器,来重新加载自   己修改的配置。     3).测试配置是否成功: