随笔分类 -  MySQL

摘要:索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用的第一部分,则不会使用索引 3.like查询是以%开头 4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引此外,查看索引的使用情况 show status like ‘Handler_read%’;大家可以注意:handler_read_key:这... 阅读全文
posted @ 2012-10-22 21:20 曾是土木人 阅读(48147) 评论(3) 推荐(7) 编辑
摘要:对于MyISAM:a.alter table table_name disable keysb.loading datac.alter table table_name enable keys对于Innodb:a.将要导入的数据按照主键排序b.set unique_checks=0,关闭唯一性校验c.set autocommit=0,关闭自动提交 阅读全文
posted @ 2012-10-20 20:39 曾是土木人 阅读(1709) 评论(0) 推荐(0) 编辑
摘要:MySql优化的一般步骤:1.通过show status 命令了解各种sql的执行效率 SHOW STATUS提供msyql服务器的状态信息 一般情况下,我们只需要了解以”Com”开头的指令 show session status like ‘Com%’:显示当前的连接的统计结果 show global status like ‘Com%’ :显示自数据库上次启动至今的统计结果 注:默认是session级别的 其中Com_XXX表示XXX语句所执行的次数。重点注意:Com_select,Com_insert,Com_update,Com_delete通过这几个参数,可以容易地了解到... 阅读全文
posted @ 2012-10-20 19:22 曾是土木人 阅读(10722) 评论(1) 推荐(7) 编辑
摘要:今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1.为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后 阅读全文
posted @ 2012-10-19 17:10 曾是土木人 阅读(4746) 评论(1) 推荐(3) 编辑
摘要:#创建触发器,当往order表中添加记录是,更新goods表delimiter $CREATE TRIGGER trigger1 AFTER INSERT ON `order`FOR EACH ROWBEGINUPDATE goods SET num=num-new.much WHERE id=new.gid;END$执行INSERT INTO `order` (gid,much) VALUES(1,5)后SELECT * FROM goods WHERE id=1发现 电视机的数量剩下30当执行INSERT INTO `order` (gid,much) VALUES(2,100)后发现冰箱 阅读全文
posted @ 2012-07-22 18:17 曾是土木人 阅读(500) 评论(0) 推荐(0) 编辑
摘要:校对集MySQL5.5.8中共有字符集39,校对集195个#显示所有的校对集Show collation#显示所有的字符集show character set所以一个字符集对应多个校对集,即同样的一个字符集有多重排序规则比如一个utf8的字符集共有22中排序规则Utf8字符集默认的校对集为utf8_general_ci通过show collation like ‘utf8\_%’即可查看注意:utf8_general_ci 按照普通的字母顺序,而且不区分大小写(比如:a B c D)utf8_bin 按照二进制排序(比如:A排在a前面,B D a c) 阅读全文
posted @ 2012-07-22 15:00 曾是土木人 阅读(307) 评论(0) 推荐(0) 编辑
摘要:在mysql客户端与mysql服务端之间,存在着一个字符集转换器。character_set_client =>gbk:转换器就知道客户端发送过来的是gbk格式的编码character_set_connection=>gbk:将客户端传送过来的数据转换成gbk格式character_set_results=>gbk:注:以上三个字符集可以使用set names gbk来统一进行设置例子:create table test(name varchar(64) NOT NULL)charset utf8;#这里的utf8表示服务器端的字符编码首先,往数据表test中插入一条数据in 阅读全文
posted @ 2012-07-22 14:56 曾是土木人 阅读(1423) 评论(0) 推荐(0) 编辑
摘要:转载自:https://joyqi.com/information-tech/use-comma-in-mysql-columns.html大多数开发者应该都遇到过在mysql字段中存储逗号分割字符串的经历,无论这些被分割的字段代表的是id还是tag,这个字段都应该具有如下几个共性。被分割的字段一定是有限而且数量较少的,我们不可能在一个字符串中存储无限多个字符这个字段所属的表与这个字段关联的表,一定是一对多的关系比如下面这个表结构所代表的content与tag这两个对象mysql> SELECT * FROM content;+----+------+| id | tags |+---- 阅读全文
posted @ 2012-06-16 17:55 曾是土木人 阅读(11735) 评论(0) 推荐(0) 编辑
摘要:转载自:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多)。如果对之建立B-... 阅读全文
posted @ 2012-06-11 23:32 曾是土木人 阅读(663) 评论(1) 推荐(2) 编辑
摘要:获得当前日期+时间(date+time)1.1函数:now()相关函数:current_timestamp(),localtime(),localtimestamp()举例说明:2.获得当前日期(date)函数:curdate()相关函数:current_date(),current_date举例说明:3.获得当前时间(time)函数:curtime()相关函数:current_time(),current_time举例说明4.MySQLdayof…函数:dayofweek(),dayofmonth(),dayofyear()分别返回日期参数,在一周、一月、一年中的位置。举例说明set@dt= 阅读全文
posted @ 2012-06-09 21:51 曾是土木人 阅读(455) 评论(0) 推荐(0) 编辑
摘要:MySQL中的UNIX_TIMESTAMP函数有两种类型供调用1无参数调用:UNIX_TIMESTAMP()返回值:自'1970-01-0100:00:00'的到当前时间的秒数差例子:SELECTUNIX_TIMESTAMP()=>13391234152有参数调用:UNIX_TIMESTAMP(date)其中date可以是一个DATE字符串,一个DATETIME字符串,一个TIMESTAMP或者一个当地时间的YYMMDD或YYYMMDD格式的数字返回值:自'1970-01-0100:00:00'与指定时间的秒数差举例说明:DATE字符串格式:(日期类型)S 阅读全文
posted @ 2012-06-09 21:49 曾是土木人 阅读(462) 评论(0) 推荐(0) 编辑
摘要:MySQL中的UNIX_TIMESTAMP函数有两种类型供调用1 无参数调用:UNIX_TIMESTAMP()返回值:自'1970-01-01 00:00:00'的到当前时间的秒数差例子:SELECT UNIX_TIMESTAMP() => 13391234152 有参数调用:UNIX_TIMESTAMP(date)其中date可以是一个DATE字符串,一个DATETIME字符串,一个TIMESTAMP或者一个当地时间的YYMMDD或YYYMMDD格式的数字返回值:自'1970-01-01 00:00:00'与指定时间的秒数差举例说明:DATE字符串格式: 阅读全文
posted @ 2012-06-08 12:06 曾是土木人 阅读(77068) 评论(1) 推荐(5) 编辑
摘要:做开发的时候经常会碰到以下几个问题使用mysql的内置函数将时间轴转成对应的日期 方法一:使用from_unixtime(unix_timestamp)函数即可实现, 如:SELECT FROM_UNIXTIME('1339127478'); 结果:2012-06-08 11:51:18 SELECT FROM_UNIXTIME('1339127478','%Y-%m-%d'); 结果:2012-06-08 2.使用mysql的内置函数对日期进行计算 如:选择符合“三个小时之前”的所有订单 方法一:使用UNIX_TIMESTAMP()将时间转成时 阅读全文
posted @ 2012-06-08 12:03 曾是土木人 阅读(1266) 评论(0) 推荐(0) 编辑
摘要:方法一:密码比对思路:首先通过用户输入的用户名去查询数据库,得到该用户名在数据库中对应的密码,再将从数据库中查询到的密码和用户提交过来的密码进行比对。代码: $sql="select password from users where username='$name'"; $res=mysql_query($sql,$conn); if ($arr=mysql_fetch_assoc($res)){//如果用户名存在 if ($arr['password']==$pwd) {//密码比对 ec... 阅读全文
posted @ 2012-01-15 16:02 曾是土木人 阅读(545) 评论(0) 推荐(0) 编辑
摘要:通过启用php.ini配置文件中的相关选项,就可以将大部分想利用SQL注入漏洞的骇客拒绝于门外。 开启magic_quote_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能。在PHP4.0及以上的版本中,该选项默认情况下是开启的,所以在PHP4.0及以上的版本中,就算PHP程序中的参数没有进行过滤,PHP系统也会对每一个通过GET、POST、COOKIE方式传递的变量自动转换,换句话说,输入的注入攻击代码将会全部被转换,将给攻击者带来非常大的困难。 虽然如此,攻击者仍然有机会进行SQL注入攻击。。。。。。前提是,当参数为数字型的时候,且未经过I.. 阅读全文
posted @ 2012-01-14 12:54 曾是土木人 阅读(4249) 评论(4) 推荐(0) 编辑
摘要:ASCII(str)返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。也可参见ORD()函数。ORD(str)如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值。CONV(N,from_base,to_base)在不同的数字基之间变换数字。比 阅读全文
posted @ 2012-01-13 11:04 曾是土木人 阅读(567) 评论(0) 推荐(0) 编辑
摘要:想在本地测试的话,可以在此免积分下载:利用SQL注入漏洞拖库同上一篇文章(利用SQL注入漏洞登录后台)一样,我们需要创建数据表,并在表中出入几条数据以备测试之用。在数据库中建立一张表:CREATE TABLE `article` ( `articleid` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '', `content` text CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`articleid`) 阅读全文
posted @ 2012-01-12 21:24 曾是土木人 阅读(9563) 评论(2) 推荐(1) 编辑