
MySQL必知必会
MySQL数据库在日常开发应用中的常用技巧和必会知识点。涉及MySQL的基础知识,性能优化,规范,高效设计,以及与PHP的交互
diligentyang
主要研究PHP编程,网站后端开发,网站维护,mysql。会熟练使用CI框架。yii入门级。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【MySQL】重构查询方式
摘自《高性能的MySQL》在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的结果–而不一定总要从MySQL获取一模一样的结果集。有时候可以查询转换一种写法让其返回一样的结果,但是性能更好。但也可以通过修改应用代码,用另一种方式完成查询,最终达到一样的目的。这里我们将介绍如何通过这种方式来重构查询,并展示何时需要使用这样的技巧。用一个复杂的查询还是多个简单的查询。设计查询的时候一个需要原创 2017-03-22 20:05:25 · 1972 阅读 · 0 评论 -
【MySQL】MySQL的数据类型优化
选择优化的数据类型MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。不管存储那种类型的数据,下面几个原则都有助于做出更好的选择。更小的通常更好一般情况下,应该尽量使用可以正确存储数据的最小数据类型(例如只需要存0-200,tinyint unsigned更好)。更小的数据类型通常更快,因为它们占用更少的磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更少。简单就好简单数据原创 2017-02-20 19:21:49 · 1761 阅读 · 0 评论 -
【MySQL】MySQL的存储引擎
在创建表时可以指定表的类型,也就是表的存储引擎。表的存储引擎决定了数据如何存储及如何访问,还有事务如何存储。表的存储引擎在很大程度上影响着处理SQL语句所需的存储空间和速度。不同的存储引擎所具有的特点也有所不同,有些存储引擎在处理很多复杂的SELECT语句时非常适合,而另一些则在实现快速更新时比较适合。InnoDBInnoDB是MySQL的默认事务型引擎,也是最重要,使用最广泛的存储引擎。它被设计用原创 2017-02-19 18:36:25 · 1291 阅读 · 0 评论 -
【MySQL】多版本并发控制
MySQL的大多数事务型存储引擎的实现都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。不仅是MySQL,包括Oracle,PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的标准。可以认为MVCC是一个行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制有所不同,但大都实现了原创 2017-02-17 14:50:52 · 1995 阅读 · 0 评论 -
【MySQL】并发控制
无论何时,只有有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。这里讨论MySQL在两个层面的并发控制:服务器层与存储引擎层。并发控制是一个内容庞大的话题,有大量的理论文献对其进行详细的论述。在此只是简要地讨论MySQL如何控制并发读写。以unix系统的email box为例子,典型的mbox文件格式是非常简单的。一个mbox邮箱中的所有邮件都串行在一起,彼此首尾相连。这种格式对于读取和肥西原创 2017-02-15 20:12:45 · 2028 阅读 · 0 评论 -
【MySQL】MySQL逻辑架构
如果能在头脑中构建一副MySQL各组件之间如何协同工作的架构图,就会有助于深入理解MySQL服务器。最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具都有类似的架构。比如连接处理、授权认证、安全等等。第二层架构是MySQL比较有意思的部分。大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有内置函数(例如,日期,时间,数学和加密函数),所有跨存储引原创 2017-02-15 19:05:38 · 1938 阅读 · 1 评论 -
MySQL InnoDB索引介绍及优化(初学者)
什么是索引?索引(index)翻译为一个目录,用于快速定位我们想要找的数据的位置。例如:我们把一个数据库比作一本书,而索引(index)就是书中的目录,此刻要找到书的某个感兴趣的内容,我们一般是不会整本书翻完再去确认该内容在哪里,而是通过书的目录,定位到该内容章节所在页数,最后直接翻到该页面。我们来看看在数据库中的索引:全表扫描 VS 索引扫描以字典为例,全表扫描就是如果我们查找某个字时,那么通读一转载 2016-11-11 12:40:39 · 6665 阅读 · 1 评论 -
PDO防止sql注入的机制
上面这段代码就可以防范sql注入。为什么呢?当调用 prepare() 时,查询语句已经发送给了数据库服务器,此时只有占位符 ? 发送过去,没有用户提交的数据;当调用到 execute()时,用户提交过来的值才会传送给数据库,他们是分开传送的,两者独立的,SQL攻击者没有一点机会。原创 2016-03-29 11:12:46 · 4613 阅读 · 0 评论 -
PDO概述特点及安装
PDO概述: PDO是PHP Data Object (PHP数据对象)的简称,它是与PHP5.1版本一起发行的。目前支持的数据库包括Firebird、FreeTDS、Interbase、MySQL、MS SQL Server、ODBC、Oracle、Postgre SQL、SQLite和Sybase。有了PDO用户不必再使用mysql_*函数,oci_*函数或者mssql_*函数,也不原创 2016-03-29 16:49:23 · 2520 阅读 · 0 评论 -
PDO连接数据库及DSN详解
PDO构造函数 在PDO中,要建立与数据库的连接需要实例化PDO的构造函数,PDO构造函数的语法如下:__construct(string $dsn[,string $username[,string $password[,array $driver_options]]])参数说明如下dsn:数据源名,包括主机名,端口号和数据库名称。username:连接数据库的用户名原创 2016-03-29 17:19:28 · 21080 阅读 · 0 评论 -
PDO中执行SQL语句
exec()方法exec()方法返回执行后受影响行数,语法如下:int PDO::exec(string statement)参数statement是要执行的SQL语句。该方法返回执行查询时受影响的行数,通常情况下用于INSERT,DELETE和UPDATE语句中。例如:$dbms='mysql';//数据库类型$dbName='admin';//使用的数据库$us原创 2016-03-30 20:59:35 · 13730 阅读 · 0 评论 -
PDO中获取结果集
fetch()方法fetch()方法用于获取结果集的下一行,语法如下:mixed PDOStatement::fetch([int fetch_style][,int cursor_orientation[,int cursor_offset]]])参数fetch_style控制结果集的返回方式PDO::FETCH_ASSOC -- 关联数组形式PDO::FETCH_NUM原创 2016-03-31 14:56:42 · 8687 阅读 · 0 评论 -
PDO中捕获SQL语句中的错误
使用默认模式-----PDO::ERRMODE_SILENT在默认模式中设置PDOStatement对象的errorCode属性,但不进行其他任何操作。例如:通过prepare()和execute()方法向数据库中添加数据,设置PDOStatement对象的erroCode属性,手动检测代码中的错误,操作步骤如下。$dbms='mysql';//数据库类型$dbName=原创 2016-04-01 16:06:15 · 8691 阅读 · 3 评论 -
PDO中事物处理
事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行,并且在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操作. 如果执行成功, 那么这一系列操作都会永久有效. 事务很好的解决了在操作数据库的时候不同步的问题. 同时, 通过事务去执行大数据量的时候, 执行效率可以提高很多很多. 在PDO中原创 2016-04-01 20:08:59 · 1846 阅读 · 0 评论 -
mysql慢查日志
在MySQL的性能优化中,我们时常需要用到慢查日志,并以此来分析,进行性能的优化。 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动原创 2016-08-04 08:48:18 · 1861 阅读 · 0 评论 -
mysql性能优化之max,count优化
注:在执行SQL语句前加上explain可以查看MySQL的执行计划 数据库:MySQL官方提供的sakila数据库Max优化:例如:查询最后支付时间 explain select max(payment_date) from payment \G;查询的类型为simple,没有用到任何索引,扫描行数为1万多行,用时0.02sec优化方法: 在payment_date列建立索引create i原创 2016-08-06 22:16:27 · 12334 阅读 · 4 评论 -
MySQL中join用法解析
MySQL中join用法解析实例数据库如下: student表:mysql> select * from student;+-----------+-----------+------+------+-------+| Sno | Sname | Ssex | Sage | Sdept |+-----------+-----------+------+------+---原创 2016-08-07 15:30:45 · 2960 阅读 · 0 评论 -
mysql数据类型
数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。比如float[(7,2)]意思就是说,一共7位,小数点后面2位,那么这个数所表示的最大数,就为99999.99选取原则,选择最合适而不是最大的(数据类型越大,占用空间越大)。原创 2016-09-04 13:50:46 · 1802 阅读 · 0 评论 -
mysql如何删除表中的重复行并保留id较小(或者较大)的记录
在实际录入数据库的过程中,如果数据量比较大的话,难免会因为一些原因,而录入多条重复的记录,那么应该如何操作才能删除重复行,并且保留一条id较大,或者较小的记录呢。 在本例中所用数据表结构如下所示tdb_goods 表中数据重复如图所示 首先第一步,利用group by分组查出每组中数目大于2的(即重复记录的)内容mysql> SEL原创 2016-09-07 09:28:04 · 5412 阅读 · 1 评论 -
MySQL字符函数
CONCAT()和CONCAT_WS()字符连接mysql> SELECT CONCAT('mysql','5.6');+-----------------------+| CONCAT('mysql','5.6') |+-----------------------+| mysql5.6 |+-----------------------+1 row i原创 2016-09-07 14:08:33 · 1997 阅读 · 0 评论 -
MySQL数值运算符和函数
对于普通加减法运算,此处不予详细讲解,如下例:mysql> SELECT 3+4;+-----+| 3+4 |+-----+| 7 |+-----+1 row in set (0.03 sec)CEIL和FLOORCEIL为向上取整,只要有小数位,不管是几,直接入一位。例如:mysql> SELECT CEIL(3.01);原创 2016-09-08 15:54:47 · 26865 阅读 · 0 评论 -
MySQL常用的日期时间函数
前三个较为简单此处不再做详细说明mysql> SELECT NOW();+---------------------+| NOW() |+---------------------+| 2016-09-08 16:12:01 |+---------------------+1 row in set (0.04 sec)mysql> SELECT原创 2016-09-08 16:25:27 · 2248 阅读 · 0 评论 -
MySQL自定义函数
位运算符位运算符是指对二进制位从低位到高位对齐后进行运算。 符号 作用 举例 个人理解 & 按位与 $m & $n 全1为1,否则为0 | 按位或 $m | $n 全0为0,有1为1 ^ 按位异或 $m | $n 不同为1,相同为0 ~ 按位取反 ~$m << 向左移位 $m << $n >>原创 2016-09-09 09:31:16 · 1956 阅读 · 0 评论 -
SQL视图
视图视图是虚拟的表。与包含的数据表不一样,视图只包含使用时动态检索的数据查询。作为视图,他不包含任何列或数据,包含的只是一个查询。为什么使用视图?1:重用sql语句。2:简化复杂的sql操作。在编写查询后,可以方便的重用它而不必知道其基本查询的细节。3:使用表的一部分而不是整个表。4:保护数据。可以授予用户访问表的特定部分的权限,而不是对整个表进行访原创 2016-09-17 10:16:21 · 2005 阅读 · 0 评论