摘要:DB Active Record 类 其实有个 replace方法可是文档上却没有相关说明这个方法对 某些OA 等应用还是比较实惠的毕竟减少了查询次数///////////////////原生MYSQL说明//////////////////////////id存在则替换,不存在则插入 replace intotest | CREATE TABLE `test` (`id` int(11) NOT NULL default '0',`value` varchar(21) NOT NULL default '',`icount` int(11) NOT NULL
阅读全文
文章分类 - mysql
摘要:这篇文章主要是从原理, 手册和源码分析在PHP中查询MySQL返回大量结果时, 内存占用的问题, 同时对使用MySQL C API也有涉及.昨天, 有同事在PHP讨论群里提到, 他做的一个项目由于MySQL查询返回的结果太多(达10万条), 从而导致PHP内存不够用. 所以, 他问, 在执行下面的代码遍历返回的MySQL结果之前, 数据是否已经在内存中了? -while ($row = mysql_fetch_assoc($result)) { // ...}当然, 这种问题有许多优化的方法. 不过, 就这个问题来讲, 我首先想到, MySQL是经典的C/S(Client/Server,...
阅读全文
摘要:一、数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的。 在一个系统分析、设计阶段,因为数据量较小,负荷较低。我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程。 所以在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。(例如:对外统计系统在7月16
阅读全文
摘要:mysql中一个表的一个时间列是int类型,现在想修改这个字段的值,打算可读日期时间格式转成int,然后修改那个值。这个转换函数就是UNIX_TIMESTAMP,将可读的时间转换成int类型,具体用法:update xxx_table set xxx_time=UNIX_TIMESTAMP('2006-11-13 13:24:22') where ......同时介绍一个另一个转换函数:FROM_UNIXTIME,将将时间戳转成常用时间格式select FROM_UNIXTIME(xxx_time) from xxx_tablemysql将时间戳转成常用时间格式在mysql中,
阅读全文
摘要:select FOUND_ROWS()总是返回上一次select所返回的行数。它的结果受到上一次select中是否使用SQL_CALC_FOUND_ROWS的影响测试如下:1.运行语句:select SQL_CALC_FOUND_ROWS * from penalties where amount>=20 limit 2然后运行:select FOUND_ROWS();返回的行数是:42.不使用SQL_CALC_FOUND_ROWSselect * from penalties where amount>=20 limit 2然后运行:select FOUND_ROWS();返回的
阅读全文
摘要:1、找到phpMyAdmin文件夹里的/libraries/config.default.php文件。2、查找$cfg['PmaAbsoluteUri'],修改为你将上传到空间的phpMyAdmin的网址如:$cfg['PmaAbsoluteUri'] = ‘http://www.domain.com/phpmyadmin/’;因为是本地连接,这里就修改为$cfg['PmaAbsoluteUri'] = ‘http://localhost/phpmyadmin/’;注意:不要漏掉最后的反斜杠/和开头的http。3、查找$cfg['Serv
阅读全文
摘要:mysql> create table jackbillow (ip int unsigned, name char(1));Query OK, 0 rows affected (0.02 sec)mysql> insert into jackbillow values(inet_aton('192.168.1.200'), 'A'), (inet_aton('200.100.30.241'), 'B');Query OK, 2 rows affected (0.00 sec)Records: 2Duplicates:
阅读全文
摘要:导读: 去年很多朋友私下或新浪微博上在总结自己的职业生涯与职业规划,也感觉到很纠结与彷徨,尤其技术人的职业生涯,随年龄增加,一些优势逐渐丧失。4月13日 数据库技术大会的主办方举行的晚宴上,也让本人支持一个大家感兴趣又贴合实际的话,话题是:三十岁后的IT人 如何抉择人生路,遗憾的是预订酒店饭桌是几个房间打通的,而不是一个大厅方式(总共:8桌),大家无法围绕在一起,为此只是小范围讨论了下,今天看到曾经 阿里巴巴数据库团队的海波兄弟总结分享,非常有意义,转载给大家共同欣赏!十五年前,你或许还不懂爱情,看Jack和Rose执手相看泪眼,只是蒙胧的心痛。十五年后,你会和谁一起走进影院,更会和谁一起,走
阅读全文
摘要:之前Eugene兄已经写过两篇关于myisam转innodb引擎的文章,我今天把myisam和innodb引擎的差别做了一个整理,目的是让大家更深的理解两个引擎的差别之处,让大家在项目初期选择数据库引擎或者中期改变引擎的时候少走弯路。一、简单介绍1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。2.InnoDB:支持事务安全的引擎,支持外键、行锁、事务是
阅读全文
摘要:MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。 .frm文件存储表定义。 数据文件的扩展名为.MYD (MYData)。 索引文件的扩展名是.MYI (MYIndex)。 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB 事务处理上方面: MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持 InnoDB提供事务支持事务,外部键等高级数据库功能 SELECT UPDATE,INS...
阅读全文
摘要:通常网站的性能瓶颈在数据库查询,如果你希望你的网站在一定阶段之内保持稳定,优化你的SQL和数据库是非常必要的一个优化环节。优化数据库是一个很大的话题,这里只是摘要一些比较关键的优化参考建议,并且需要具体分析项目的情况才能给出最合理的优化建议,所以具体的优化建议你应该咨询你公司的架构师或者DBA。下面是一部分比较重要的建议:1、选择正确的存储引擎以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法
阅读全文
摘要:Mysql的优化是非常重要的。其他最常用也最需要优化的就是limit。Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的。 网上也很多关于limit的五条优化准则,都是翻译自Mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。 文中不是直接使用limit,而是首先获取到offset的id然后直接使用...
阅读全文
摘要:我们开发自己的存储引擎页面缓存替换策略的过程中主要是参考了InnoDB与LRU-K算法。InnoDB缓存替换策略使用分代与LRU相结合的方式。分为old和young两个分代,系统维护old分代占总buffer大小的3/8左右。当一个页面第一次被访问时,是加入到old分代的lru头。并不是每次访问一个页面时就将这个页提到lru的头部,而是在这个页面在LRU中的位置调整后,是否有很多页面已经被替换出去,若有,则将这个页面移到LRU头。系统在每个页记录调整该页在lru中位置当前系统总共替换了多少个数据页,比较页中记录的这个计数与系统全局页替换计数,就可以发现上次调整这个页在lru链表中位置后,系统中
阅读全文
摘要:作者:老王PHP程序员应该都知道连接MySQL数据库可以使用mysql_pconnect(永久连接)函数,使用数据库永久连接可以提高效率,但是实际应用中数据库永久连接往往会导致出现一些问题,通常的表现就是在大访问量的网站上时常发生断断续续的无法连接数据库的情况,出现类似"Too many connections in ..."的错误提示信息,重新启动服务器又正常了,但过不了一会儿又出现同样的故障。对于这些问题的成因,恐怕就不是每个人都能说清楚的了,虽然PHP文档里有一些相关资料,但是解释的并不浅显易懂,这里我厚着脸皮试图做一个简单的讨论,所述观点不见得全都正确,欢迎大家反馈意见。首先看看数据库
阅读全文
摘要:MySQL优化的一些建议,单机MySQL的优化我分为三个部分,一是服务器物理硬件的优化,二是MySQL安装时的编译优化,三是自身配置文件my.cnf的优化;如果单机的优化也解决不了你的数据库的压力的话,那这个时候就只有考虑采用集群架构的方法,这个我在后面也会重点说明。 单机MySQL数据库的优化 一、服务器硬件对MySQL性能的影响 ①磁盘寻道能力(磁盘I/O),我们现在上的都是SAS15000转的硬盘。MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写量可想而知。所以,通常认为磁盘I/O是制约MySQL性能的最大因素之一,对于日均访 问量在100万PV以上的Discuz!论坛,...
阅读全文
摘要:双向加密就让我们从最简单的加密开始:双向加密。在这里,一段数据通过一个密钥被加密,只能够由知道这个密钥的人来解密。MySQL有两个函数来支持这种类型的加密,分别叫做ENCODE()和DECODE()。下面是一个简单的实例:mysql> INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));Query OK, 1 row affected (0.14 sec)其中,Joe的密码是guessme,它通过密钥abracadab
阅读全文
摘要:正文: 作为一个网站所有者或博客,你可能将mysql数据从一个数据库导入到另一个数据库,但是如果数据量超过phpMyAdmin所能承受的范围时应该怎么办呢?phpMyAdmin的缺省上传数据量由php.ini文件指定。假如你有权限,你可以修改php.ini文件来增加上传数据量,一般来说,如果你属于共享组用户,网站管理员将不允许你修改php.ini文件,因为这将影响到服务器上的所有用户。如果你的帐户有shell权限,你就可以轻易的导入数据,下面将介绍如何利用ssh导入数据。 使用BigDump BigDump是一个由alexey ozerov撰写的脚本,用来导入批量mysql数据。BigD...
阅读全文
摘要:数据加密、解密在安全领域非常重要。对程序员而言,在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大。有多种前端加密算法可用于数据加密、解密,下面我向您推荐一种简单的数据库级别的数据加密、解密解决方案。以MySQL数据库为例,它内建了相应的加密函数(AES_ENCRYPT() )和解密函数(AES_DECRYPT())。在表中插入加密数据INSERTINTOuserdata(username,pasword,encryptedpassword) VALUES('smith','htims',AES_ENCRYPT('htims','
阅读全文
摘要:#!/bin/bash # # filename: backupmysql.sh # # 功能:备份数据库,并且自动删除指定天数前的备份,支持以库或表的备份方式 # 注意:该脚本在运行过程中会锁定所有的表不让写入. # # 使用: # 1:"backupmysql.sh db" # 将每个库导为单个文件进行备份,在库数据量不是很大的推荐使用 # 2:"backupmysql.sh table" # 将库中的每个表导为单个文件进行备份,在库数据量很大时推荐使用 # 3:建议将这个脚本加到Crontab中,每天半夜运行。 # # 作者:V哥 # 时间:201
阅读全文
摘要:http://www.iteye.com/topic/1119734现在的工作环境跟MySQL打的交道比较多,把平时工作中遇到的有意思SQL的部分总结一下.知识来源:看书,工作总结,官方文档...从哪开始呢,先从基本结构开始吧:ok let's go.1:先看MySQL整体模块图:(图片取自MySQL核心技术)从图中可以看出MySQL的模块职责分工明确,不愧是Monty团队20年的结晶.好产品是靠持续的汗水浇灌的啊(扯远了)。。。其中MySQL语句大概分两种:SQL和命令SQL无非就是DDL,DML,命令是mysql自身语法如:show [table,process,database,
阅读全文