因为需要在我的主机上支持J2EE和ROR,所以我就选择安装Apache,虽然有lighttpd这个选择,但我觉得还是Apache更稳定,毕竟我们公司都是用YApache的。
安装Apache
先把 Apache 2.0.59 下载到 /home/用户目录/Devtools 下,然后加压缩到/usr/local/src/目录
1 shell> cd /usr/local/src   2 shell> tar -zxvf httpd-2.0.59.tar.gz    view plain | print | copy to clipboard | ? shell> cd /usr/local/src
shell> tar -zxvf httpd-2.0.59.tar.gz 然后进入httpd目录新建一个编译脚本,方便维护和以后升级。每次执行下面的setup.sh就可以安装了(前提是安装libxml2库、zlib库)
1 #!/bin/bash   2 ./configure --prefix=/opt/apache    3 --enable-so    4 --enable-rewrite    5 --enable-dav    6 --enable-info    7 --enable-cgid    8 --enable-mime-magic    9 --enable-alias    10 --enable-access    11 --enable-deflate    12 --enable-proxy    13 --enable-proxy-http    14 --enable-forward   15   16 make   17 make install    view plain | print | copy to clipboard | ? #!/bin/bash
./configure --prefix=/opt/apache
--enable-so
--enable-rewrite
--enable-dav
--enable-info
--enable-cgid
--enable-mime-magic
--enable-alias
--enable-access
--enable-deflate
--enable-proxy
--enable-proxy-http
--enable-forward

make
make install
这样就可以把制定的模块静态编译到Apache里,而且也支持动态加载模块。
把Apache当作服务启动
1 shell> cp /opt/apache/bin/apachectl /etc/rc.d/init.d/httpd   2 shell> chmod 700 /etc/rc.d/init.d/httpd   3 shell> chkconfig –add httpd   4 shell> chkconfig –level 345 httpd on   5 shell> service httpd start   6 shell> netstat -atln    view plain | print | copy to clipboard | ? shell> cp /opt/apache/bin/apachectl /etc/rc.d/init.d/httpd
shell> chmod 700 /etc/rc.d/init.d/httpd
shell> chkconfig –add httpd
shell> chkconfig –level 345 httpd on
shell> service httpd start
shell> netstat -atln
现在可以看到80端口已经开始监听了,访问自己的ip也可以看到Apache的欢迎界面:)
http://www.zhangzhang.net/articles/2006/09/03/Linux-Installs-Apache2
经过一天的研究,PHP与Mysql的编码问题终于解决,现将我的研究成果与大家分享:

1)读取mysql前设置编码,代码如下:
mysql_query("SET NAMES 'utf-8'",$database->_resource);
mysql_query("SET CHARACTER SET utf-8",$database->_resource);
但不是总有效,设置gb2312就不行;

2)使用iconv函数转换编码,但是Php默认不支持;

3)使用mb_convert_encoding函数转换编码,有些虚拟主机不支持;

4)使用博大公司写的http://zeal.newmenbase.net/attachment/chinese.rar转换编码,可以避免以上出现的问题,为较好的解决方案。 将UTF8转换为GB2312的代码如下:
    include("class.Chinese.php");
   $chs = new Chinese("UTF8","GB2312",trim($title));
   $title = $chs->ConvertIT();

PHP转化GB2312到UTF-8这个问题已经困扰我好几天了,今天终于解决这个问题了。
这几天在网上查了很多的资料,说法不一,也有自己写函数的,看起来实在是复杂,在网上查资料的时候无意间发现了iconv()这个函数,其实找了这么几天,这个函数就是专门用来做编码转化的,直接用它转化为自己想要的编码然后重新更新数据库就可以了。

函数的具体使用是:iconv("UTF-8", "GB2312","待转化的字符串或变量");
里芬奇,通过对话筒吹哨子来入侵电话系统。有5岁小骇客的酷刑:6年不准碰任何电子设备,1. 6 年之内不得自由使用电子产品,所有上网行为必须在监控之下才得以进行。
2. 必须提交所有帐户的帐号、密码。
3. 规范期间不得与骇客组织 UGNazi、Anonymous 或其他骇客成员联系。
————————————————————————————————————

看过一部国产制作宏大的关于部队信息化建设的连续剧.场面颇为宏大,不知动用谁的力量请来了坦克,装甲车,直升机.然后又花费了N多纳税人的钱买来火药加弹药充斥场面.冲着导演这份精神也得赞赏下.

不过,导演在描写一位从美国麻......麻省理工回来的计算机高手(批注: 还是个帅哥)黑网吧电脑时.让我啼笑皆非,导演以非常"简洁"的手法远距离拍摄显示器后背,然后只见高手双手以不规则运动手法敲击键盘,几近秒杀的速度, 电脑全部启动.然后看见明显是WORD编排的字体逐步出现:"你的电脑已全部被我控制......"

以我当时的幼稚头脑都会奇怪导演何以如此简陋拍摄.让我很是怀疑这位高手的身份.同时也为祖国部队的未来担忧,后来长见识了后,也琢磨出来了,不是人家高手无能,要么,是导演电脑水平太次,或者根本不重视这方面细节,要么,黑客这个字眼就是个禁区.导演只好糊弄下过关就OK了.

黑客绝对是个吸引眼球的字眼,君不见,黑客教学光盘,黑客教程图书卖到手软还会惹来众生骚动.网上跟黑客沾边的文章都能点击率飙升,指不定我这篇文章都能沾点光呢.我也算个黑客崇拜迷,看到新闻里报道一位根正苗红发展势头旺盛的青年因为黑了电脑盗取资料而被判刑,在满场惋惜和嘲笑的叹息声中,我却是抛出滔滔江水般的敬仰之心.巴不得立马磕头行八拜之礼拜其为师.渴望艺成之后,能牵着天龙八部,拿着倚天和屠龙,相伴神雕侠侣一起笑傲江湖.当然.相信有我之心的人不在少数.

缘何如此?黑客从某方面来说,代表着技术巅峰,对于IT人来说,踏到这个巅峰就像拿到国家科技奖般令人万种钦佩.就像披红戴帽,骑马游街般令人争相敬仰.虽然,其泡MM效果还比不上帮她装个系统,杀个小毒.同时,成为黑客也意味着这辈子你注定会是个抢手货.挥动下手指就能享受白领高薪待遇.在如今我们这个人才和木材匮乏的国家,你将是个成功的典范.

不过,黑客所以为黑,而不是白.全在于它的不请自入.跟小偷的原理很相像.盗取资料数据还不让你知道.手段高超者,事后连脚印指纹唇纹头发脚毛都不留一点.叫你后院着火叫苦连天之际却不知哪家阿猫阿狗干的.论卑鄙可恶程度,确实犹甚于小偷小摸.这可能也是导演为什么宁愿花血本请来飞机却不敢舍小钱请个黑客顾问的原因吧.

我也很想成了个黑客.像小榕样,只要花个几分钟,就能黑一个网站.不过,我也知道,技术到了那个程度,已是不屑于干这活了.网站被黑往往要么是某个菜鸟级别黑客在练练手,要么就是某个后台组织带有牟利性的行为.不管是哪个原因,做为个IT人,还是不要去以身试法了.要知道现在的网络警察叔叔一天24小时拿着先进性武器,读着先进性教育在网络上监督着呢.要是实在想锻炼自己的能力, 干脆多借几台电脑自己在家随便整.

因为,黑客,可是个禁区哦.
在当今广阔的互联网上,有这么一种无需花费或者花费很低,并且没什么风险,可以避开所有的防护系统,在任何操作系统上都能进行,不会留下犯罪痕迹,几乎百分之百有效,最重要的是人们还没有普遍意识到的东西;它可以只用一个电话,也可以层层布局;可以只花几分钟时间,也可以花上好几年;可以只由一个人完成,也可以团队合作。。。
    是的,我们习惯用IT行业中“没有硝烟的战争”来诠释这门高深莫测的“欺骗艺术”----社会工程学!
     还是一贯作风,先和大家一起了解了解这个信息安全对抗的新对手吧。
     20世纪70年代末期,一个叫做斯坦利·马克·瑞夫金的年轻人成功地实施了史上最大的银行劫案。他没有雇用帮手、没有使用武器、没有天衣无缝的行动计划,“甚至无需计算机的协助”,仅仅依靠一个进入电汇室的机会并打了三个电话,便成功地将一千零二十万美元转入自己在国外的个人账户。“奇怪的是,这一事件却以‘最大的计算机诈骗案’为名,收录在吉尼斯世界纪录中。斯坦利·瑞夫金利用的就是欺骗的艺术,这种技巧我们现在把它称为—社会工程学。” (源自internet资料)
     专家们的完整定义是:社会工程学(Social Engineering),一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段,取得自身利益的手法。
     在社会工程学中,它不单单是一个技术性的问题,更是关于人的问题。
      人,这个世界中最为复杂和 事物,常常说“只有想不到的,没有做不到的”,就算作为一个自认为最有警惕性最小心的人,一样会被高明的社会工程学手段所蒙蔽欺骗。。。
     大家对电影《疯狂的石头》里的“大搬家”有印象吧,就简简单单的几句话几个沉稳的表演,很容易的将两方甚者3方人员全部打包骗倒。。。呵呵,这个,很典型的社会工程学。在我身边发生过的,也有这么一个例子,有个玩网游的朋友,在游戏里认识了一个过命交情的网友,他们从一级一起练起,中间每天花很多时间来练级打包,很多时候那个搭档都会把好的装备物品毫不吝啬的给我这个朋友,所以我的这个朋友很放心的将自己的帐号密码都告诉了那个人,因为要上班,所以那人也拿他的号升了不少的经验打了不少的东西。直到我的这个朋友,级别很高了以后,认识了很多其他的铁哥们,身上的装备也通过各种渠道(人家送啊,自己买啊)提升到一定的档次后,终于有一天,伴随着的就是被那个十分信任的好友洗劫一空,并拿着他的人物的身份向其他网友欺骗了不少金币和装备。。。我的这个朋友,经历了这一幕,对游戏的乐趣一下荡然无存了。。。呵呵。
    你看,这个伪装成“发小”(从1级一起玩到满级)的“高手”(绝对的社会心理学的高手),城府是多么的深,并且有着多么伟大的耐心啊。。。
      E时代的信任危机,已不是简简单单的对某个软件某个系统灾难的恐惧了,在这个企业和个人都逐步把灾难和备份机制完善化的时候,博大精深的心理学倒是冒出了头!
     网站钓鱼、病毒、间谍软件、银行木马,黑客们带着和善的面具,早已为你布下了无孔不入的层层陷阱。。。而你并不知道,他们什么时候会对你耍出新招或者突然下手。
     这里,我们为了对付社会工程攻击,必须组建“由人组成的防火墙”,同时抛弃网络架构刀枪不入之类的幻想,即使你的企业部署了严密的软件硬件防火墙等安全系统。
     互联网络专家给出的应策是:
一,建立事故响应小组,事故响应小组应当由来自公司不同关键部门的知识渊博的员工组成,他们要经过良好培训并随时准备对社会工程攻击做出反应,有效的分析出入侵的目的与方式。
二,制定规章与教育相结合,对员工进行培训,建立雇员参与机制,制定简单的规则,确定什么是敏感信息,提高安全意识。
三,模拟入侵程序,公司利用模拟环境和测试,能有效地评价安全控制措施,来制定相应的对策和解决方法。
四,应用其他技术措施,比如电话录音、客户访问记录、文档等级制度。
   
     最安全的计算机是那台没有连到网络上的单机,社会工程学能做到的,是让你自愿自发的把这台机器接上RJ45插头联入到网络中。。。因此,我们要面对的,还会很多,要提防和注意的,也还是很多很多!。。。
 Mozilla不仅是一个很好的浏览器,而且还是一个很不错的Flash播放器,尤其是它对中文的良好支持可以省去很多麻烦,见图1所示。在Red Hat中,Mollzia作为默认的浏览器,要想使其播放Flash动画,还必需安装一个Linux Mozilla插件。

    1.Linux Mozilla插件的下载

    下载网址为

     http://www.macromedia.com/shockwave/download/alternates/

     请选择相应的版本。

     2.Linux Mozilla插件的安装

   (1)解压文件包:

   [root@localhost Download]#tar zxvf flash_Linux.tar.gz;

   (2)复制文件插件到Mozilla的插件目录:

   将解压后的文件内的这两个文件
    /install_flash_player_7_linux/flashplayer.xpt
    /install_flash_player_7_linux/libflashplayer.so
    复制到
    /usr/lib/mozilla-1.2.1/plugins/   和    /usr/lib/mozilla/plugins/   内即可
  (以上方法仅供参考/测试环境:Red Hat 9)

   命令:[root@localhost install_flash_player_7_linux]  #cp flashplayer.xpt   /usr/lib/mozilla-1.2.1/plugins/

            [root@localhost install_flash_player_7_linux]  #cp libflashplayer.so   /usr/lib/mozilla/plugins/
create table index_analyse_xiangdong select * from relation limit 21000;

一、什么是索引?

索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

假设我们创建了一个名为people的表:


CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );


然后,我们完全随机把1000个不同name值插入到people表。下图显示了people表所在数据文件的一小部分:




可以看到,在数据文件中name列没有任何明确的次序。如果我们创建了name列的索引,MySQL将在索引中排序name列:




对于索引中的每一项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此,如果我们要查找name等于“Mike”记录的peopleid(SQL命令为“SELECT peopleid FROM people WHERE name='Mike';”),MySQL能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的peopleid(999)。在这个过程中,MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引,MySQL要扫描数据文件中的所有记录,即1000个记录!显然,需要MySQL处理的记录数量越少,则它完成任务的速度就越快。

二、索引的类型

  MySQL提供多种索引类型供选择:


普通索引
这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

唯一性索引
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );

主键
主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。

全文索引
MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要了解更多信息,请参见MySQL documentation。
三、单列索引与多列索引

索引可以是单列索引,也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表:


CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT, firstname CHAR(50) NOT NULL, lastname CHAR(50) NOT NULL, age SMALLINT NOT NULL, townid SMALLINT NOT NULL, PRIMARY KEY (peopleid) );


下面是我们插入到这个people表的数据:




这个数据片段中有四个名字为“Mikes”的人(其中两个姓Sullivans,两个姓McConnells),有两个年龄为17岁的人,还有一个名字与众不同的Joe Smith。

这个表的主要用途是根据指定的用户姓、名以及年龄返回相应的peopleid。例如,我们可能需要查找姓名为Mike Sullivan、年龄17岁用户的peopleid(SQL命令为SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age=17;)。由于我们不想让MySQL每次执行查询就去扫描整个表,这里需要考虑运用索引。

首先,我们可以考虑在单个列上创建索引,比如firstname、lastname或者age列。如果我们创建firstname列的索引(ALTER TABLE people ADD INDEX firstname (firstname);),MySQL将通过这个索引迅速把搜索范围限制到那些firstname='Mike'的记录,然后再在这个“中间结果集”上进行其他条件的搜索:它首先排除那些lastname不等于“Sullivan”的记录,然后排除那些age不等于17的记录。当记录满足所有搜索条件之后,MySQL就返回最终的搜索结果。

由于建立了firstname列的索引,与执行表的完全扫描相比,MySQL的效率提高了很多,但我们要求MySQL扫描的记录数量仍旧远远超过了实际所需要的。虽然我们可以删除firstname列上的索引,再创建lastname或者age列的索引,但总地看来,不论在哪个列上创建索引搜索效率仍旧相似。

为了提高搜索效率,我们需要考虑运用多列索引。如果为firstname、lastname和age这三个列创建一个多列索引,MySQL只需一次检索就能够找出正确的结果!下面是创建这个多列索引的SQL命令:



ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age);


由于索引文件以B-树格式保存,MySQL能够立即转到合适的firstname,然后再转到合适的lastname,最后转到合适的age。在没有扫描数据文件任何一个记录的情况下,MySQL就正确地找出了搜索的目标记录!

那么,如果在firstname、lastname、age这三个列上分别创建单列索引,效果是否和创建一个firstname、lastname、age的多列索引一样呢?答案是否定的,两者完全不同。当我们执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于firstname、lastname、age这三个列上的多列索引。

四、最左前缀

多列索引还有另外一个优点,它通过称为最左前缀(Leftmost Prefixing)的概念体现出来。继续考虑前面的例子,现在我们有一个firstname、lastname、age列上的多列索引,我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用fname_lname_age索引:


firstname,lastname,age
firstname,lastname
firstname
从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。下面这些查询都能够使用这个fname_lname_age索引:



SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age='17'; SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan'; SELECT peopleid FROM people WHERE firstname='Mike'; The following queries cannot use the index at all: SELECT peopleid FROM people WHERE lastname='Sullivan'; SELECT peopleid FROM people WHERE age='17'; SELECT peopleid FROM people WHERE lastname='Sullivan' AND age='17';


五、选择索引列

在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在WHERE子句中出现的列,在join子句中出现的列。请看下面这个查询:



SELECT age ## 不使用索引 FROM people WHERE firstname='Mike' ## 考虑使用索引 AND lastname='Sullivan' ## 考虑使用索引


这个查询与前面的查询略有不同,但仍属于简单查询。由于age是在SELECT部分被引用,MySQL不会用它来限制列选择操作。因此,对于这个查询来说,创建age列的索引没有什么必要。下面是一个更复杂的例子:



SELECT people.age, ##不使用索引 town.name ##不使用索引 FROM people LEFT JOIN town ON people.townid=town.townid ##考虑使用索引 WHERE firstname='Mike' ##考虑使用索引 AND lastname='Sullivan' ##考虑使用索引


与前面的例子一样,由于firstname和lastname出现在WHERE子句中,因此这两个列仍旧有创建索引的必要。除此之外,由于town表的townid列出现在join子句中,因此我们需要考虑创建该列的索引。

那么,我们是否可以简单地认为应该索引WHERE子句和join子句中出现的每一个列呢?差不多如此,但并不完全。我们还必须考虑到对列进行比较的操作符类型。MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT peopleid FROM people WHERE firstname LIKE 'Mich%';”这个查询将使用索引,但“SELECT peopleid FROM people WHERE firstname LIKE '%ike';”这个查询不会使用索引。

六、分析索引效率

现在我们已经知道了一些如何选择索引列的知识,但还无法判断哪一个最有效。MySQL提供了一个内建的SQL命令帮助我们完成这个任务,这就是EXPLAIN命令。EXPLAIN命令的一般语法是:EXPLAIN 。你可以在MySQL文档找到有关该命令的更多说明。下面是一个例子:



EXPLAIN SELECT peopleid FROM people WHERE firstname='Mike' AND lastname='Sullivan' AND age='17';


这个命令将返回下面这种分析结果:


table type possible_keys key key_len ref rows Extra
people ref fname_lname_age fname_lname_age 102 const,const,const 1 Where used

下面我们就来看看这个EXPLAIN分析结果的含义。


table:这是表的名字。
type:连接操作的类型。下面是MySQL文档关于ref连接类型的说明:

“对于每一种与另一个表中记录的组合,MySQL将从当前的表读取所有带有匹配索引值的记录。如果连接操作只使用键的最左前缀,或者如果键不是UNIQUE或PRIMARY KEY类型(换句话说,如果连接操作不能根据键值选择出唯一行),则MySQL使用ref连接类型。如果连接操作所用的键只匹配少量的记录,则ref是一种好的连接类型。”

在本例中,由于索引不是UNIQUE类型,ref是我们能够得到的最好连接类型。

如果EXPLAIN显示连接类型是“ALL”,而且你并不想从表里面选择出大多数记录,那么MySQL的操作效率将非常低,因为它要扫描整个表。你可以加入更多的索引来解决这个问题。预知更多信息,请参见MySQL的手册说明。

possible_keys:
可能可以利用的索引的名字。这里的索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字(在本例中,它是“firstname”)。默认索引名字的含义往往不是很明显。

Key:
它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引。

key_len:
索引中被使用部分的长度,以字节计。在本例中,key_len是102,其中firstname占50字节,lastname占50字节,age占2字节。如果MySQL只使用
    前些日子,突然接到表妹打来电话,我想都好久没有联系了,难道是有什么事情要请我帮忙,以前在想要是有能力后, 一定让我表妹来北京给她找份工作,在我心中表妹是很聪明伶俐的,从小学一块上学比我低一个年级之外,而到后来,我到了县里念书后,除了寒假暑期回家外,就很少和她见面了,还记得小时候到外婆家,老是留恋不想回家,不就是有她在嘛,但时光就是那样的催人,转眼间我初中毕业,那时她成绩也不错,本来我是想让她和我一样读个高中(说实话当时也就想永无休止的学完初中就考个师范得了,也是我父母的想法,但那年不招师范了,得等下年,在初中班主任老师的游说下,考了高中,也上了高中,成绩也相当不错),没想到她由于种种原因就读了个中专,到现在还在福州打工,今天突然接到她电话:
第一句话是:哥,你现在上班了没得呀?
我很急忙回答道:5月份都开始上班了啦,当时给你说你还不相信
。。。。。。。。。。
突然,她话题一转说:
哥,我想给你说个事情
我问:什么事情?
她问我过年回家不?
一想到回家,又要说道自己大学几年,一直没有回家,唏嘘的感慨一年年。
不能怪谁,怪得怪自己,过年本来到杭州了,但是还是没有和妈妈一块回去,这里面一是自己二还是自己的情况,我很相信成也它,败也它、、、
最后一直在想这个是怎么回事呀,难道想我回去找我玩,但从她口气上说的是,过年回来耍,我们 那边回来耍是有另外一件含意在里面的,最后呢,我说有啥事呢?她回答道回来耍嘛。我越听糊涂,呵呵
最后在我的
在论坛里看了许多相关帖子,自己也实验了多次,终于在前几天测试成功,感谢cu里的前辈们为我们新人铺路,因为我实际工作中要用到这些,以前是兄弟公司的哥们帮我们配置。现在我也配置成功,和大家分享一下成果吧。一直从cu里吸取精华,希望我的文档能给一些新人有帮助。
  说明:实现WEB服务器能运行html、php、jsp等格式文件

一、 所用软件及版本
1、 操作系统:RHEL as4u3
2、 Apache:httpd-2.2.2.tar.gz
apr-util-1.2.7.tar.gz
apr-1.2.7.tar.gz
3、 Tomcat:apache-tomcat-5.5.15.tar.gz
4、 Mysql:mysql-5.0.22.tar.gz
5、 Jdk:jdk-1_5_0_07-linux-i586.bin
6、 Apache和Tomcat连接:tomcat-connectors-1.2.18-src.tar.gz
7、 Php: php-5.1.4.tar.gz
二、 安装步骤:
1、 安装操作系统:这里就不介绍了,主要将相关的开发包装上。我将所有开发包都安装了。
2、 Apache安装:将以上所需要的所有软件上传到/usr/local下。
先解压:
tar xvfz httpd-2.2.2.tar.gz
cd httpd-2.2.2

首先可以看看里面的安装说明INSTALL和README。
在安装apache之前先安装apr-util-1.2.7.tar.gz和apr-1.2.7.tar.gz
首先安装apr。

tar xvfz apr-1.2.7.tar.gz
cd apr-1.2.7
./configure --prefix=/usr/local/apr-httpd
make
make install
cd ..

再安装apr-util-1.2.7.tar.gz

tar xvfz apr-util-1.2.7.tar.gz
cd apr-util-1.2.7
./configure --prefix=/usr/local/apr-util-httpd --with-apr=/usr/local/apr-httpd
make
make install

3、 接下来继续安装apache

cd ../httpd-2.2.2
./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-module=most --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd --enable-so
make
make install

如果没有报错,apache基本安装完毕。
4、 安装JDK
回到local目录下:

cd ..
./jdk-1_5_0_07-linux-i586.bin
ln –s jdk1.5.0_07 jdk

设置JDK环境变量

vi /etc/profile

再文件尾部增加以下几句:

JAVA_HOME=/usr/local/jdk
JRE=$JAVA_HOME/jre
LC_ALL=zh_CN.GBK
PATH=$JAVA_HOME/bin:$JRE/bin:$PATH
CLASSPATH=.:$JAVA_HOME/bin/tools.jar:$JAVA_HOME/lib/dt.jar
export JAVA_HOME JRE LC_ALL CLASSPATH PATH


5、 安装MYSQL

tar xvfz mysql-5.0.22.tar.gz
cd mysql-5.0.22
./configure --prefix=/usr/local/mysql/ --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler
make
make install
groupadd mysql
useradd -g mysql mysql
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql
bin/mysql_install_db --user=mysql
chown -R root  .
chown -R mysql var
chgrp -R mysql .
bin/mysqld_safe --user=mysql &
mysqladmin –uroot password new-password

6、 安装php

tar xvfz php-5.1.4.tar.gz
cd php-5.1.4
./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs
make && make install
cp php.ini-dist /usr/local/lib/php.ini

7、 安装tomcat

tar xvfz apache-tomcat-5.5.15.tar.gz
mv apache-tomcat-5.5.15 tomcat

8、 安装Apache和Tomcat连接

tar zxvf tomcat-connectors-1.2.18-src.tar.gz
cd tomcat-connectors-1.2.18-src/ native/
./configure --with-apxs=/usr/local/apache/bin/apxs
make && make install

三、 配置httpd.conf

cd /usr/local/conf/
vi httpd.conf

1、 注释掉一下几行

#ServerAdmin you@example.com
#ServerName www.example.com:80
#DocumentRoot "/usr/local/apache/htdocs"

2、 修改里面相关内容
A、

   Options FollowSymLinks
#    AllowOverride None
    AllowOverride all
    Order deny,allow
#    Deny from all
    Allow from all


B、
#

   #
   # Possible values for the Options directive are "None", "All",
   # or any combination of:
   #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
   #
   # Note that "MultiViews" must be named *explicitly* --- "Options All"
   # doesn't give it to you.
   #
   # The Options directive is both complicated and important.  Please see
   # http://httpd.apache.org/docs/2.2/mod/core.html#options
   # for more information.
   #
#    Options Indexes FollowSymLinks
   #
   # AllowOverride controls what directives may be placed in .htaccess files.
   # It can be "All", "None", or any combination of the keywords:
   #   Options FileInfo AuthConfig Limit
   #
   AllowOverride None

   #
   # Controls who can get stuff from this server.
   #
   Order allow,deny
   Allow from all



因为我这里将网站放在/usr/local/tomcat/webapps下

C、将
#Include conf/extra/httpd-vhosts.conf
这行#除掉

3、 增加以下内容:
A、在AddType application/x-gzip .gz .tgz下增加以下两行

AddType application/x-httpd-php .php .phtml
  AddType application/x-httpd-php-source .phps

B、结尾增加

#add mod_jk module
LoadModule jk_module modules/mod_jk.so
# Update this path to match your modules location
# Where to find workers.properties
# Update this path to match your conf directory location (put workers.properties next to #httpd.conf)
 JkWorkersFile /usr/local/apache/conf/workers.properties
# Where to put jk logs
# Update this path to match your logs directory location (put mod_jk.log next to access_log)
 JkLogFile     /usr/local/apache/logs/mod_jk.log
# Set the jk log level [debug/error/info]
 JkLogLevel    info
# Select the log format
 JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
 JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
 JkRequestLogFormat     "%w %V %T"
# Send everything for context /examples to worker named worker1 (ajp13)
 JkMount  /*.jsp worker1


C、在/usr/local/apache/conf下增加一个workers.properties文件,内容如下:

# Define 1 real worker using ajp13
 worker.list=worker1
# Set properties for worker1 (ajp13)
 worker.worker1.type=ajp13
 worker.worker1.host=localhost
 worker.worker1.port=8009
 worker.worker1.lbfactor=50
 worker.worker1.cachesize=10
 worker.worker1.cache_timeout=600
 worker.worker1.socket_keepalive=1
 worker.worker1.reclycle_timeout=300

D、再编辑/usr/local/apache/conf/extra/下httpd-vhosts.conf文件

vi httpd-vhosts.conf

将里面例子修改一下



DirectoryIndex index.htm index.html index.jsp index.php

   ServerAdmin xxx@126.com
   DocumentRoot /usr/local/tomcat/webapps/ROOT
   ServerName 192.168.0.170
   ErrorLog logs/170-error_log
   CustomLog logs/170-access_log common


因为没有做域名解析,我这里在ServerName下直接用的是IP地址。
四、 测试
先启动tomcat,再启动apache。启动apache之前可以到apache/bin下测试一下虚拟域是否配置正确。./httpd –S 如果配置有错误会提示你。
没有问题后,在IE地址栏输入http://192.168.0.170 此时将显示的是tomcat的默认界面,证明可以正常访问jsp文件了。再将/usr/local/tomcat/webapps/ROOT下index.jsp换一个index.php文件,只要在index.php里输入以下内容即可测试:


重启apache,再在IE地址栏输入http://192.168.0.170 将能看到php的相关信息。
主要参考文章有:
http://www.chinaunix.net/jh/13/669895.html
http://www.chinaunix.net/jh/13/770898.html
http://httpd.apache.org/docs/2.2/
linux下安装php运行环境
Submitted by phpox on 2007, April 16, 12:44 PM. Linux

首先我在 /root 目录下建了一个 soft 文件夹来保存我要安装的源码包
mkdir /root/soft
cd /root/soft

先找到 apache php mysql proftpd 源码包下载的URL地址
请浏览
http://www.apache.org
http://www.php.net
http://www.mysql.com
http://www.proftpd.org/


第一步:安装apache
注:当前目录为/root/soft ,
目录下有
httpd-2.0.55.tar.gz, php-5.0.5.tar.gz
等二进制源码包
#号代表为root 根权限,#后是输入的一条命令

执行下列命令
解压源码包
# tar -zxf httpd-2.0.55.tar.gz
进入安装目录
# cd httpd-2.0.55
配置apache安装信息
# ./configure --prefix=/usr/local/apache --enable-modules=so --enable-rewrite
执行make安装
# make; make install
安装完后
# vi /usr/local/apache/conf/httpd.conf
找到 prefork.c 下的
MaxClients 150
改为
ServerLimit 2000
MaxClients 1000
apache默认工作在prefork.c模式下,并发进程为150,超过后就无法访问,150是远远不够的,所以这里按自己网站的需求改, 如1000
由于apache默认最大并发进程是 256 所以要先设置 ServerLimit 2000 将服务器可设的最大并发数设为2000, 然后再设置最大并发数 MaxClients 1000

找到 #ServerName www.example.com:80 在其下设置 ServerName 如下
ServerName www.mysite.com
基中 www.mysite.com 为你网站名,也可用IP代替
找到 DocumentRoot "/usr/local/apache/htdocs"
设置你的 WEB 服务器的根目录 如
DocumentRoot "/myweb"
找到 DirectoryIndex index.html index.html.var 改为
DirectoryIndex index.html index.php index.htm
找到 ForceLanguagePriority Prefer Fallback 在其下加上
AddDefaultCharset gb2312
改完后保存(vi 的用法请查 Linux vi 命令)
用下面命令启动WEB服务器
# /usr/local/apache/bin/apachectl start
查看自己的站点是否正常 http://www.mysite.com 也可用IP
用 # /usr/local/apache/bin/apachectl stop 可停止服务


安装MYSQL
# tar -zxf mysql-standard-5.0.15-linux-i686.tar.gz
# cp -r mysql-standard-5.0.15-linux-i686 /usr/local/mysql
# vi /usr/local/mysql/support-files/my-medium.cnf
在后面加上
max_connections = 1000
log-slow-queries
long_query_time = 5
注 max_connections 为允许的最大连接数
log-slow-queries 打开低速查询日志
long_query_time 低速查询的秒数(运行一句sql达到此时间记录在日志里)
然后COPY 它为 /etc/my.cnf 文件
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
添加mysql用户及用户组
# groupadd mysql
# useradd -g mysql mysql
修改mysql目录权限
# chown -R root /usr/local/mysql
# chgrp -R mysql /usr/local/mysql
# chown -R mysql /usr/local/mysql/data
生成mysql系统数据库
# /usr/local/mysql/scripts/mysql_install_db --user=mysql&
启动mysql服务
# /usr/local/mysql/bin/mysqld_safe --user=mysql&
如出现 Starting mysqld daemon with databases from /usr/local/mysql/data
代表正常启动mysql服务了, 按Ctrl + C 跳出
修改 mysql 的 root 密码
# /usr/local/mysql/bin/mysqladmin -u root -p password 123456
回车出现 Enter password: 最开始密码默认为空 继续回车即可
123456 即为你的新密码

安装GD库(让PHP支持GIF,PNG,JPEG)
首先下载 jpeg6,libpng,freetype 并安装模块
wget http://www.ijg.org/files/jpegsrc.v6b.tar.gz
wget http://nchc.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.8.tar.gz
wget http://keihanna.dl.sourceforge.net/sourceforge/freetype/freetype-2.1.10.tar.gz
wget http://www.boutell.com/gd/http/gd-2.0.33.tar.gz

安装 jpeg6
建立目录
# mkdir /usr/local/jpeg6
# mkdir /usr/local/jpeg6/bin
# mkdir /usr/local/jpeg6/lib
# mkdir /usr/local/jpeg6/include
# mkdir /usr/local/jpeg6/man
# mkdir /usr/local/jpeg6/man/man1
# cd /root/soft
# tar -zxf jpegsrc.v6b.tar.gz
# cd jpeg-6b
# ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static
# make; make install

安装libpng
# cd /root/soft
# tar -zxf libpng-1.2.8.tar.gz
# cd libpng-1.2.8
# cp scripts/makefile.std makefile
# make; make install

安装 freetype
# cd /root/soft
# tar -zxf freetype-2.1.10.tar.gz
# cd freetype-2.1.10
# ./configure --prefix=/usr/local/freetype
# make;make install

安装最新的GD库
# cd /root/soft
# tar -zxf gd-2.0.33.tar.gz
# cd gd-2.0.33
# ./configure --prefix=/usr/local/gd2 --with-jpeg=/usr/local/jpeg6/ --with-png --with-zlib --with-freetype=/usr/local/freetype/
# make; make install

安装最新的Curl库
# cd /root/soft
# wget http://curl.haxx.se/download/curl-7.15.0.tar.gz
# tar -zxf curl-7.15.0.tar.gz
# ./configure --prefix=/usr/local/curl
# make; make install

安装PHP

由于php5需libxml2的支持, 所以先下载并安装libxml2
# cd /root/soft
# wget http://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.19.tar.gz
# tar -zxf libxml2-2.6.19.tar.gz
# cd libxml2-2.6.19
# ./configure --prefix=/usr/local/libxml2
# make; make install

安装 libxslt
# cd /root/soft
# wget http://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1/libxslt-1.1.15.tar.gz
# tar -zxf libxslt-1.1.15.tar.gz
# cd libxslt-1.1.15
# ./configure --prefix=/usr/local/libxslt --with-libxml-prefix=/usr/local/libxml2
# make; make install

# tar -zxf php-5.0.5.tar.gz
# cd php-5.05
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql/ --with-curl=/usr/local/curl --enable-ftp --with-libxml-dir=/usr/local/libxml2 --with-expat-dir=/usr/lib --enable-soap --with-xsl=/usr/local/libxslt --enable-xslt --with-gd=/usr/local/gd2/ --with-jpeg-dir=/usr/local/jpeg6/ --with-zlib-dir=/usr/lib --with-png --with-freetype-dir=/usr/local/freetype
# make
# make install

其中./configure 后的
--prefix=/usr/local/php
--with-apxs2=/usr/local/apache/bin/apxs
--with-mysql=/usr/local/mysql/
--with-libxml-dir=/usr/local/libxml2
是必要的选项

--with-gd=/usr/local/gd2/
--with-jpeg-dir=/usr/local/jpeg6/
--with-png
--with-zlib-dir=/usr/lib
--with-freetype-dir=/usr/local/freetype
这是让PHP支持GD库的配置选项

--with-curl=/usr/local/curl 支持CURL库
--enable-ftp 打开FTP库函数支持

--enable-soap --with-xsl=/usr/local/libxslt --enable-xslt
让PHP支持SOAP, 上面这些一般用得少, 可以去掉

配置 httpd.conf 让apache支持PHP
# vi /usr/local/apache/conf/httpd.conf
找到 AddType application/x-gzip .gz .tgz 在其下添加如下内容
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

重启apache
# /usr/local/apache/bin/apachectl restart
在你Web目录里建一内容为 PHP文件, 输入URL地址查看PHP配置是否正确


安装 phpmyadmin
下载
# cd /root/soft
# wget http://nchc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.6.4-pl3.tar.gz
# tar -zxf phpMyAdmin-2.6.4-pl3.tar.gz
# vi phpMyAdmin-2.6.4-pl3/config.inc.php
找到 $cfg['Servers'][$i]['auth_type'] = 'config'; 将config 改为 http
保存后
mv phpMyAdmin-2.6.4-pl3 /你的phpmyadmin目录
关于mysql4.1-4移植4.0旧数据库中文乱码问题的解决方法
进入phpmyadmin管理
建立你数据库名并选上 gb2312_bin 的编码
然后导入你先前备份好的SQL文件, 导入时选择 文件的字符集:gb2312
完成后就OK了
注: PHP连接mysql4.1和5.0 数据库后需指定字符集 需执行如 mysql_query("SET NAMES 'gb2312' ");
否则会产生中文乱码问题!
如何修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)

要解决JSP乱码,首先就要了解JSP乱码的原因

1.架设服务器安装MYSQL时的会让你选择一种编码,如果这种编码与你的网页不一致,可能就会造成JSP页面乱码
2.在PHPMYADMIN或mysql-front等系统 创建数据库时会让你选择一种编码,如果这种编码与你的网页不一致,也有可能造成JSP页面乱码
3.创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码
4.创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码
5.用户提交JSP页面的编码与显示数据的JSP页面编码不一致,就肯定会造成JSP页面乱码.
如用户输入资料的JSP页面是big5码, 显示用户输入的JSP页面却是gb2312,这种100%会造成JSP页面乱码
6.字符集不正确
要注意:
1.平时你在某些网站看到的文字可能有几种编码, 如你看到一个繁体字,它有可能是big5编码,也有 可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点.
如果你是做一个简体编码的网页,编码定为GB2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法就是(1)将网站编码设为utf-8,这样可以兼容世界上所有字符, (2)如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为GBK,
GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK
7.JSP连接MYSQL数据库语句指定的编码不正确
8.JSP页面没有指定数据提交的编码,就会造成乱码:

所以,JSP乱码的原因无非就是以上几种,知道原因之后,要解决JSP乱码的方法也容易多了
我们一一来表达:
1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题
2.修改数据库编码,如果是数据库编码不正确: 可以在phpmyadmin 执行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将test数据库的编码设为utf8
3.修改表的编码:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是将一个表category的编码改为utf8
4.修改字段的编码:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将test表中 dd的字段编码改为utf8
5.如果是这种情况容易解决,只需检查下页面,修改源文件的charset即可
, //这个正确就无问题了
6.这种情况也是修改页面charset即可,
7.在JSP连接数据库的语句中,
private String url="jdbc:mysql://localhost/"+DB_NAME+" user="+LOGIN_NAME+"&password="+LOGIN_PASSWORD+"&characterEncoding=GBK"; //相键要看characterEncoding
8.这种乱码的情况,只需在页面开头加上request.setCharacterEncoding("GBK"); 指定提交的即可

注意:按照以上方法修改以后只能保证你新插入的数据不会乱码,举个例:如果你用户已提交的数据是BIG5,你却想通过以上方法改为可以在GB2312的网页正确显示是不可能的, 这种文字内码的变换只能通过另写程序来解决,请WEB745.com其它相关文章


总结:先要判断JSP乱码是插入数据库之后乱码,还是JSP页面刚提交过来就乱码了,如果JSP刚接收上一页面的数据显示就乱码了,肯定是字符集不对,可者没有加request.setCharacterEncoding("GBK");

如果是数据库的原因就参考上面的2,3,4种方法



以前偷工减料,到处乱抄东西,现在要几大原则同时进行:
1.不谈个人的情感
2.不谈私生活
3.不谈他人软肋
谈什么:
2.谈技术
3.谈生活

转载请注明 achieverain 找工作中
文章出处: http://php.cublog.cn
其实这并不是什么光彩的事,我原来所在的公司因为民营企业的死亡率最高的原因:资金链断裂而死亡。在近半年没有领到工资之后,终于在公司办公场所即将到期之前决定重新找份工作。
先自我介绍一下,我是一个开源CMS开发组的领导者和核心开发人员之一,开发了大约70%核心部分的代码。能够在linux下完成除图像处理以外的日常工作。我不敢说什么精通,但是至少该会的都会了。个人能力是:
PHP
XHTML + CSS
JAVAScript
C
shell阅读全文
周立功对人才的看法,想进周立功公司的应聘者必看。  2007年03月21日
阅读全文
<?php
class man{
var $sex="男";
var $heigh=1010;
var $weight;
function run(){
echo "I am run !";
}
function sleep($sexs){
echo "I am sleep";
$this->sex=$sexs;

}


}
?>

<?php
$xiangdong=new man();
$xiangdong->sleep(女);
echo "$xiangdong->sex";
echo "$xiangdong->heigh";
echo "$xiangdong->heigh";

echo "$xiangdong->run()--------------";

echo $xiangdong->sleep("男的啊");
$xiangdong->sex;

$serialize=serialize($xiangdong);
echo "序列化后的结果:<br> ";

echo $serialize;
echo " 开始反序列化:";

$unserialize=unserialize($serialize);

echo $unserialize->sex;
echo "<br>";
echo "$unserialize->sleep(\"男的a啊\")";
?>
example: select q.q_id from question as q where q.o_id not in (select answer.o_id from answer) order by q_id
               select count(*) from question as q where q.o_id not in (select answer.o_id from answer) and q.q_status!='del' order by q_id
user表:

id | name
———
1 | libk
2 | zyfon
3 | daodao

user_action表:

user_id | action
—————
1 | jump
1 | kick
1 | jump
2 | run
4 | swim

sql:
select id, name, action from user as u
left join user_action a on u.id = a.user_id

result:
id | name | action
——————————–
1 | libk | jump ①
1 | libk | kick ②
1 | libk | jump ③
2 | zyfon | run ④
3 | daodao | null ⑤

分析:
注意到user_action中还有一个user_id=4, action=swim的纪录,但是没有在结果中出现,
而user表中的id=3, name=daodao的用户在user_action中没有相应的纪录,但是却出现在了结果集中
因为现在是left join,所有的工作以left为准.
结果1,2,3,4都是既在左表又在右表的纪录,5是只在左表,不在右表的纪录

结论:
我们可以想象left join 是这样工作的
从左表读出一条,选出所有与on匹配的右表纪录(n条)进行连接,形成n条纪录(包括重复的行,如:结果1和结果3),
如果右边没有与on条件匹配的表,那连接的字段都是null.
然后继续读下一条。

引申:
我们可以用右表没有on匹配则显示null的规律, 来找出所有在左表,不在右表的纪录, 注意用来判断的那列必须声明为not null的。
如:
sql:
select id, name, action from user as u
left join user_action a on u.id = a.user_id
where a.user_id is NULL
(注意:1.列值为null应该用is null 而不能用=NULL
2.这里a.user_id 列必须声明为 NOT NULL 的)
result:
id | name | action
————————–
3 | daodao | NULL

——————————————————————————–

Tips:
1. on a.c1 = b.c1 等同于 using(c1)
2. INNER JOIN 和 , (逗号) 在语义上是等同的
3. 当 MySQL 在从一个表中检索信息时,你可以提示它选择了哪一个索引。
如果 EXPLAIN 显示 MySQL 使用了可能的索引列表中错误的索引,这个特性将是很有用的。
通过指定 USE INDEX (key_list),你可以告诉 MySQL 使用可能的索引中最合适的一个索引在表中查找记录行。
可选的二选一句法 IGNORE INDEX (key_list) 可被用于告诉 MySQL 不使用特定的索引。
4. 一些例子:
mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
-> LEFT JOIN table3 ON table2.id=table3.id;
mysql> SELECT * FROM table1 USE INDEX (key1,key2)
-> WHERE key1=1 AND key2=2 AND key3=3;
mysql> SELECT * FROM table1 IGNORE INDEX (key3)
-> WHERE key1=1 AND key2=2 AND key3=3;

7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN
在MySQL中,A LEFT JOIN B join_condition执行过程如下:

· 根据表A和A依赖的所有表设置表B。

· 根据LEFT JOIN条件中使用的所有表(除了B)设置表A。

· LEFT JOIN条件用于确定如何从表B搜索行。(换句话说,不使用WHERE子句中的任何条件)。

· 可以对所有标准联接进行优化,只是只有从它所依赖的所有表读取的表例外。如果出现循环依赖关系,MySQL提示出现一个错误。

· 进行所有标准WHERE优化。

· 如果A中有一行匹配WHERE子句,但B中没有一行匹配ON条件,则生成另一个B行,其中所有列设置为NULL。

· 如果使用LEFT JOIN找出在某些表中不存在的行,并且进行了下面的测试:WHERE部分的col_name IS NULL,其中col_name是一个声明为 NOT NULL的列,MySQL找到匹配LEFT JOIN条件的一个行后停止(为具体的关键字组合)搜索其它行。

RIGHT JOIN的执行类似LEFT JOIN,只是表的角色反过来。

联接优化器计算表应联接的顺序。LEFT JOIN和STRAIGHT_JOIN强制的表读顺序可以帮助联接优化器更快地工作,因为检查的表交换更少。请注意这说明如果执行下面类型的查询,MySQL进行全扫描b,因为LEFT JOIN强制它在d之前读取:

SELECT *
FROM a,b LEFT JOIN c ON (c.key=a.key) LEFT JOIN d ON (d.key=a.key)
WHERE b.key=d.key;阅读全文
分页: 261/272 第一页 上页 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 下页 最后页 [ 显示模式: 摘要 | 列表 ]