﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-在路上-随笔分类-MySQL</title><link>http://www.blogjava.net/gumingcn/category/47309.html</link><description>路上有惊慌，路上有理想</description><language>zh-cn</language><lastBuildDate>Thu, 09 Dec 2010 05:00:08 GMT</lastBuildDate><pubDate>Thu, 09 Dec 2010 05:00:08 GMT</pubDate><ttl>60</ttl><item><title>mysql学习笔记(2)</title><link>http://www.blogjava.net/gumingcn/archive/2010/12/09/340132.html</link><dc:creator>阮步兵</dc:creator><author>阮步兵</author><pubDate>Thu, 09 Dec 2010 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/gumingcn/archive/2010/12/09/340132.html</guid><wfw:comment>http://www.blogjava.net/gumingcn/comments/340132.html</wfw:comment><comments>http://www.blogjava.net/gumingcn/archive/2010/12/09/340132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gumingcn/comments/commentRss/340132.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gumingcn/services/trackbacks/340132.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.注意auto_incrementmysql5.0在高并发下(每天近2亿)插入单表数据出现了死锁(偶现)，查了下相关文档，发现是因为采用了auto-increment的主键带来的问题，造成Table级的死锁。原因：对于auto_increment字段，innodb会在内存里保存一个计数器用来记录auto_increment的值，当插入一个新行数据时，就会用一个表锁来锁住这个计数器，所以会...&nbsp;&nbsp;<a href='http://www.blogjava.net/gumingcn/archive/2010/12/09/340132.html'>阅读全文</a><img src ="http://www.blogjava.net/gumingcn/aggbug/340132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gumingcn/" target="_blank">阮步兵</a> 2010-12-09 12:56 <a href="http://www.blogjava.net/gumingcn/archive/2010/12/09/340132.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql学习笔记(1)</title><link>http://www.blogjava.net/gumingcn/archive/2010/09/09/331480.html</link><dc:creator>阮步兵</dc:creator><author>阮步兵</author><pubDate>Thu, 09 Sep 2010 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/gumingcn/archive/2010/09/09/331480.html</guid><wfw:comment>http://www.blogjava.net/gumingcn/comments/331480.html</wfw:comment><comments>http://www.blogjava.net/gumingcn/archive/2010/09/09/331480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gumingcn/comments/commentRss/331480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gumingcn/services/trackbacks/331480.html</trackback:ping><description><![CDATA[<div class="entry">
<p><strong>常用sql:</strong></p>
<p>SHOW VARIABLES LIKE 'character%';查看字符集<br />
SHOW VARIABLES LIKE 'collation_%';<br />
show engines;查看引擎<br />
show databases; 查看数据库</p>
<p>show tables;</p>
<p>desc table_name;</p>
<p>GRANT ALL PRIVILEGES ON *.* TO 'guming'@'localhost' IDENTIFIED BY 'guming' WITH GRANT OPTION;授权<br />
show PRIVILEGES;查看权限<br />
show grants for test@localhost;查看用户权限<br />
select * from mysql.user where user='test';<br />
<br />
<strong>函数</strong><br />
逻辑:case when,isnull,IFnull等</p>
<p>数学:mod,cell,floor,round(),trancate(),abs()</p>
<p>字符串函数：rtrim,ltrim,substring,locate(),INSTR(),length,left,right<br />
&nbsp;&nbsp; REPEAT(str,count)<br />
&nbsp;&nbsp;&nbsp; 返回一个由重复的字符串str 组成的字符串，字符串str的数目等于count 。 若 count &lt;= 0,则返回一个空字符串。若str 或 count 为 NULL，则返回 NULL 。<br />
&nbsp;&nbsp; REPLACE(str,from_str,to_str)<br />
&nbsp;&nbsp;&nbsp; 返回字符串str 以及所有被字符串to_str替代的字符串from_str 。<br />
&nbsp;&nbsp; REVERSE(str)<br />
&nbsp;&nbsp; 返回字符串 str ，顺序和字符顺序相反。<br />
<br />
日期函数：current_date,datediff,adddate,date_add,dayofweek,dayofyear,dayofmonth,month,hour(),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str_to_date: SELECT STR_TO_DATE('20031031',GET_FORMAT(DATE,'ISO'));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select date_format(current_date(),'%Y-%m-%d %W');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select extract(YEAR_MONTH FROM current_date());<br />
转换函数：<br />
cast:可使用CAST()函数将某个值转为另外一种类型。CONVERT<br />
convert_TZ:CONVERT_TZ()&nbsp; 将时间日期值dt&nbsp; 从from_tz&nbsp; 给出的时区转到to_tz给出的时区<br />
concat:返回结果为连接参数产生的字符串。如有任何一个参数为NULL ，则返回值为 NULL。<br />
<br />
全文检索<br />
&nbsp;SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');<br />
&nbsp; 在默认状态下, 搜索的执行方式为不区分大小写方式。然而,你可以通过对编入索引的列使用二进制排序方式执行区分大小写的全文搜索。 &nbsp;&nbsp;&nbsp; 例如，可以向一个使用latin1字符集的列给定latin1_bin&nbsp;&nbsp; 的排序方式，对于全文搜索区分大小写。<br />
&nbsp;利用IN BOOLEAN MODE修改程序， MySQL 也可以执行布尔全文搜索：<br />
mysql&gt; SELECT * FROM articles WHERE MATCH (title,body)<br />
&nbsp;&nbsp;&nbsp; -&gt; AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);<br />
这个问询检索所有包含单词&#8220;MySQL&#8221;的行，但不检索包含单词&#8220;YourSQL&#8221;的行。<br />
<br />
&nbsp;全文搜索支持查询扩展功能 (特别是其多变的&#8220;盲查询扩展功能&#8221; )。若搜索短语的长度过短, 那么用户则需要依靠全文搜索引擎通常缺乏的内隐知识进行查询。这时，查询扩展功能通常很有用。例如, 某位搜索 &#8220;database&#8221; 一词的用户，<br />
&nbsp;可能认为&#8220;MySQL&#8221;、&#8220;Oracle&#8221;、&#8220;DB2&#8221; and &#8220;RDBMS&#8221;均为符合 &#8220;databases&#8221;的项，因此都应被返回。这既为内隐知识。 <br />
mysql&gt; SELECT * FROM articles<br />
&nbsp;&nbsp;&nbsp; -&gt; WHERE MATCH (title,body)<br />
&nbsp;&nbsp;&nbsp; -&gt; AGAINST ('database' WITH QUERY EXPANSION);<br />
&nbsp;&nbsp;&nbsp; <br />
加密函数：<br />
ENCRYPT()<br />
md5()<br />
password()<br />
字符集操作<br />
SELECT CHARSET(CONVERT('abc' USING utf8));SELECT CHARSET(USER());<br />
<br />
<strong>查询缓存设置：</strong><br />
服务器启动时要禁用查询缓存，设置query_cache_size系统变量为0，query_cache_type=on<br />
SET GLOBAL query_cache_size = 40000;<br />
SHOW VARIABLES LIKE 'query_cache_size';<br />
SHOW VARIABLES LIKE 'query_cache%';<br />
开启缓存后：<br />
select * from ad_position where id=201;<br />
SHOW STATUS LIKE 'Qcache_hits';&nbsp; 查询命中次数<br />
<br />
&nbsp;SET SESSION query_cache_type = ON;(ON:1,OFF:0,2:DEMAND)<br />
&nbsp; on 启用缓存，SELECT SQL_NO_CACHE除外<br />
&nbsp; off 不用缓存，<br />
&nbsp; DEMAND 仅对以SELECT SQL_CACHE开始的那些查询语句启用缓存。<br />
<strong>清除缓存：</strong><br />
&nbsp;可以使用FLUSH QUERY CACHE语句来清理查询缓存碎片以提高内存使用性能。该语句不从缓存中移出任何查询。<br />
&nbsp;RESET QUERY CACHE语句从查询缓存中移出所有查询。FLUSH TABLES语句也执行同样的工作。<br />
&nbsp;<br />
<strong>什么类型的数据缓存？</strong><br />
查询结果集缓存，对于动态的结果集是不缓存的。必须是一样的sql,并且结果集无变化。<br />
表更新后，对应表的缓存失效，此时同一sql有很能结果集不同了。<br />
注释：查询缓存不返回旧的数据。当表更改后，查询缓存值的相关条目被清空。<br />
注释：如果你有许多mysqld服务器更新相同的MyISAM表，在这种情况下查询缓存不起作用。<br />
注释：查询缓存不适用于服务器方编写的语句。如果正在使用服务器方编写的语句，要考虑到这些语句将不会应用查询缓存<br />
<strong>调整缓存：</strong><br />
&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; query_cache_min_res_unit默认值是4KB。这应该适合大部分情况。<br />
<br />
&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你有大量返回小结果数据的查询，默认数据块大小可能会导致内存碎片，显示为大量空闲内存块。由于缺少内存，内存碎片会强制查询缓存从缓存内存中修整（删除）查询。这时，你应该减少query_cache_min_res_unit变量的值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 空闲块和由于修整而移出的查询的数量通过Qcache_free_blocks和Qcache_lowmem_prunes变量的值给出。<br />
<br />
&#183;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果大量查询返回大结果（检查
Qcache_total_blocks和Qcache_queries_in_cache状态变量），你可以通过增加
query_cache_min_res_unit变量的值来提高性能。但是，注意不要使它变得太大（参见前面的条目）。<br />
<br />
<strong>更改存储引擎</strong><br />
ALTER TABLE engineTest ENGINE = ARCHIVE;</p>
<p><strong>字符集设置:</strong></p>
<p>在ini文件中加入下面配置:</p>
<p>default-character-set = utf8<br />
character_set_server = utf8</p>
<p><strong>导入数据库备份时遇到的问题，空间不够</strong></p>
<p>修改ini文件中的配置：max_allowed_packet = 16M</p>
<p>&nbsp;</p>
<p>参考文档：<a href="http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/">http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/</a></p>
</div>
<img src ="http://www.blogjava.net/gumingcn/aggbug/331480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gumingcn/" target="_blank">阮步兵</a> 2010-09-09 11:10 <a href="http://www.blogjava.net/gumingcn/archive/2010/09/09/331480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>