关于作者

用户名:RTDT
笔名:LenggneL
地区: 天堂-地狱
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



Private Links

Favorite Logo

访问统计:
文章个数:52
评论个数:95
留言条数:8




Powered by BlogDriver 2.1/a>

文章

本Blog将不再更新
由于种种原因,本Blog将不再更新,以后更新均发布在:

http://donotry.net

上.


- 作者: LenggneL 2005年10月3日, 星期一 02:17  回复(0) |  引用(0) 加入博采

Bash Shell基础
呵呵,没事儿做,看见这篇文章很好(http://www.hypexr.org/bash_tutorial.shtml),
顺便练习练习中英文表达能力,就有了这篇文章(翻译+修改)。

如果你对Bash Shell非常熟悉了,就根本用不着看了,呵呵

1.Bash Shell是个啥玩意儿?
要明白啥是Bash Shell,就要先知道什么是shell?shell,根据书面解释,是这样的“Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系统。它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。(引号中的内容是完全复制别人的,保护知识产权的人不要找我麻烦啊)”。我认为,shell就好比人的神经系统,将大脑与四肢连接起来。有的人四肢发达而头脑简单;有的人头脑发达而四肢简单,这都是由于shell的不协调性导致的。而植物人,那就是一个没有shell的肉体罢了。可见,shell的重要性,没有shell,就没有操作系统的今天。
在Linux世界中,可用的shell有很多很多,而Bash Shell就是众多shell中比较杰出的一种(个人认为BASH非常好),全称是:GNU Bourne-Again SHell (BASH),它吸取了csh和ksh的优势,并且遵循POSTIX 2规范 ,为*nix系统提供一个CLI的交互接口,是大部分Linux的默认shell。


2.Bash的配置文件
Bash主要有三个配置文件,你可以在你的主目录下面发现:
.bash_profile:这个文件当你在登录系统的时候会被执行,该文件也可叫做: .bash_login或.profile
.bashrc:当你在执行一个子shell的时候将被执行
.bash_logout:顾名思义,退出时候执行

需要说明的是,在登录时没有发现.bash_profile,就会依此查找.bash_login和.profile,如果都没有,那就会读取/etc/profile的内容,如果连/etc/profile都没有,那你就应该反省反省了,呵呵。对了,可以使用source命令来同步.bash_profile和.bashrc的内容,当你需要的时候。

3.set命令
使用set命令可以来设置Bash的工作模式,有两种:一个是vi,一个是emacs。
set -o vi   设置成vi模式
set -o emacs   设置成emacs模式
具体的大家可以根据自己的需要来设定,我比较熟悉vi,所以就用vi模式了。

4,常用命令
这里提到的命令没有vi和emacs两种模式的限制,都可以用,嘿嘿
ctrl+t:当你输错命令的时候,ctrl+t可以翻转最后两个字母的顺序,比如:emasc,ctrl+t以后就成了emacs,有时间还是比较实用的,但是我用的不多,我输错了命令一般都重输,哈哈
查询历史命令:历史命令都保存在.bash_history里面,使用上下箭头就可以查询了,这是最常用的一种方式;还有一种就是使用ctrl+r,直接查询,这个实际情况中可能用的不多。
空格的处理:使用反斜扛,如:mkdir foo\ bar 就创建一个foo bar的目录
        使用引号(单双都可以),如:rm "foo bar",至于使用单双引号的区别,这也是一个老生常谈的问题了。我是这样理解的:
            单引号,该输出啥就是啥,一点都不含糊;双引号,意志不坚定,发现有变量的就把变量内容给输出来了,你怪不怪!
{}的作用:一个例子说明最好,言语很难说清,
    touch {a,b,c,d} 就创建除了 a,b,c,d四个文件,明白了吧,哈哈
多命令:使用“;”隔开,如:mkdir abc;rmdir abc
    使用“&&”,如:mkdir abc && rmdir abc 使用&&,前面的命令必须成功执行才能执行后面的
管道输出:管道这个东西,功能太强大了,详细的可以查看shell编程的相关文章。我对管道的认识就是:管道就好比举行接力赛的场地,命令必需一个一个的传递其结果,一个环节出问题,就有可能全盘皆负。

5,命令别名alias
有些命令比较长,有些命令带参数使用的情况最多,这时候,alias就有作为了。下面是我常用的部分alias:
    alias cp='cp -i'
    alias rm='rm -i'
    alias rd='rm -rf'
    alias ls='ls --color=tty'
    alias la='ls -al'


6,修改命令提示符
命令提示符有两个:PS1和PS2,PS1是最常见的,PS2当处理多行命令的时候会出现。我一般都是修改Bash配置文件来得到自己需要的提示符,至于提示符常用的参数,可以参考原文列出来的,我的提示符号如下:
    PS1:[\u@\h \W]\$
    PS2:PS2

7,关于Tab补全
以下内容都可以使用Tab补全:
    文件名
    目录名
    可执行程序名
    用户名(以~开头)
    主机名(以@开头)
    变量名(以$开头)


呵呵,以上就是对Bash Shell的最最最简单的一些基础知识,预知详细的关于Bash的资料,请查看:
http://www.faqs.org/docs/bashman/bashref_toc.html


2005-08-02-Tue


    

 

- 作者: LenggneL 2005年08月3日, 星期三 08:22  回复(1) |  引用(67) 加入博采

感受昙花一现的美!

呵呵,昨晚,我家那盆昙花开了,长这么大以来,终于亲自看到了昙花一现的美!

小弟摄像技术不佳,还请大家多多包涵,呵呵!

- 作者: LenggneL 2005年07月11日, 星期一 23:04  回复(1) |  引用(0) 加入博采

Ltteer Oredr and Wrod Undestrdaning

Ltteer Oredr and Wrod Undestrdaning


 A pointer to this recently came over an internal mailing list and I found it fascinating:

    Aoccdrnig to a rscheearch at Cmabrigde Uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist and lsat ltteer be at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe.

上网随便溜达的时候发现的,呵呵,挺有意思的!

- 作者: LenggneL 2005年06月11日, 星期六 00:24  回复(1) |  引用(0) 加入博采

PHP文字过滤函数
呵呵,非常简单的一个文字过滤的函数

function words_filter($string)
{
$obscenities = array("fuck","sex"); //使用数组保存需要过滤的词语
//$obscenities = file ("/path/fuck_word.txt"); //使用文件保存需要过滤的词语
foreach ($obscenities as $fuck_word)
{
if (stristr(trim($string),$fuck_word))
{
$length = strlen($fuck_word);
for ($i = 1; $i <= $length; $i++)
{
$stars .= "*";
}
$string = eregi_replace($fuck_word,$stars,trim($string));
$stars = '';
}
}
return $string;
}


?>


//下面是以个调用的例子
$string = "fuck and sex not allow to print.";
print words_filter($string);
?>


嘿嘿,非常简单吧,

- 作者: LenggneL 2005年05月29日, 星期日 10:23  回复(0) |  引用(0) 加入博采

使用wget
wget技巧

wget是Hrvoje Niksic先生编写的运行于linux的一个强大的下载软件,又被移植到了其它的一些操作系统,不过我只是在linux下面使用过,呵呵

简要说以下wget的优点:
1,小巧玲珑
2,支持断点续传
3,支持FTP和HTTP下载
4,支持代理服务器
5,基于命令行操作,使用简单
6,免费开源


wget基本语法:
    wget [参数] URL

下面我说说我经常使用的参数,

    -r    递归下载,常用于全站下载
        小心使用,因为会下载与网站所有关联的页面,包括其它网站的
    -l number    常与-r搭配使用,来限制下载的层数,如: -l 3
    -m    给一个站点做镜像,我最常用的,呵呵
    -c    断点续传
    --reject    不下载文件 如:--reject=jpg,gif 不下载jpg,gif文件
    --http-user=USER    设置登陆用户名(需要的话)
    --hetp-passwd=PASSWD    设置登陆密码(需要的话)
    -i    批量下载(把所有的url放置到一个文件内批量下载)

给几个例子,
    wget -m --reject=png    http://www.abc.com
    给www.abc.com站点做个镜像,但是不要png文件,
    如果站点只有三层,也可以这样写:
    wget -rl 3 http://www.abc.com
    批量下载的例子:假设所有的url都保存到URL.txt文件中
    wget -i URL.txt

如何使用代理:
在用户目录下创建.wgetrc文件,添加如下内容
http-proxy = 123.123.123.123:119
ftp-proxy = 213.213.213.213:119

好了,由于wget功能过于强大,我也就领悟到了这么点点,具体的大家就参考man手册吧。


2005-05-24-Tuesday
            
   
 

- 作者: LenggneL 2005年05月25日, 星期三 17:46  回复(0) |  引用(0) 加入博采

莫爾斯電碼也不難
呵呵,昨日無意中發現了一個很好的玩意兒,莫爾斯電碼,先看看這張圖:



簡要説明一下:
如果是"DAH(噠)",那就向左開始走
如果是"DIT(嘀)",那就向右開始走
舉例説明一下:
如果是DAH-DAH-DAH,那就是字母O,
如果是DAH-DIT,那就是字母N
如果是DIT-DIT-DIT,那就是字母S,
如果是DIT-DAH,那就是字母A,

下面這張圖就是詳細的摩爾斯解碼表了,


有意思吧,呵呵,更多的内容可以查看
http://www.learnmorsecode.com/
裏面還有一些相關的測試供大家下載呢。



- 作者: LenggneL 2005年05月10日, 星期二 19:11  回复(7) |  引用(0) 加入博采

Illuminati
利用五一放假,看完了DAN BROWN先生的《天使与魔鬼》,小说我就不说了,精彩分层,非常值得一读,不过对于DAN BROWN先生的书,我最喜欢的还是那本《数字堡垒,因为感觉离自己不远,而《天使与魔鬼》和《达芬奇密码》这两本书虽然非常的不错,但是感觉融入了太多的神学色彩,可能是自己的阅历不够,所以觉得没有《数字堡垒》爽。

好了,废话少说,继续《天使与魔鬼》,令我最记忆犹新的就是光照派的那些图标,他们真的是非常非常的让人感觉完美,非常对称,我上网搜刮了一遍,终于找到了这些图标,就贴出来给大家看看。

Illuminati


WATER


FIRE

EARTH

AIR

最后一个,光照之星


真的非常佩服设计这些图标的艺术家们!

- 作者: LenggneL 2005年05月5日, 星期四 12:47  回复(7) |  引用(0) 加入博采

博客中国升级,我也改朝换代,
这几天博客中国的升级活动进行的可谓是热火朝天,真是累煞了那帮程序员的兄弟们啊,在此,向他们表示感谢,呵呵

反正这几天浏览也不是特别正常,我也有非长充裕的时间,所以就来给自给的博客进行了些修改,

首先,换掉了以前的GOOGLE的风格,用了现在的,总体感觉还不错啊,呵呵,等有空在自己来修改修改CSS;

其次,删除了一些没啥大意义的文章,这也是为了减轻博客中国的负担做贡献啊,哈哈哈哈

再次,好像就没啥了,呵呵,


但愿博客中国越来越好,但愿偶的博客小站永久不衰啊,哈哈哈


- 作者: LenggneL 2005年04月25日, 星期一 23:02  回复(32) |  引用(0) 加入博采

搭建基于FC3的Eclipse集成开发环境

1,要用到的软件以及下载地址

jdk-1_5_0_02-linux-i586.bin
这个是必需的,没有就跑不了eclipse,http://sun.java.com可以下载

eclipse-SDK-3.0.2-linux-gtk.p
eclipse主程序,最好下载gtk版本的,因为安装起来方便

org.eclipse.cdt-2.1.1-linux.x86.p
CDT是个是eclipse的一个插件,装上了就可以调试C/C++了,:)

以上两款软件都可在www.eclipse.org下载

PHPEclipse1.1.3-2005-01-29.p
呵呵,一个调试PHP代码的插件,刚发现的,不知道好不好用,目前我用BlueFish很顺手
http://www.phpeclipse.de/ 是下载地址

当然了,你也可以在eclipse的主页下载你需要的插件,这点充分体现出了eclipse的灵活

2,开工
为了方便,我把下载了的安装包都放到了/usr/local目录下
第一步:安装JDK
#cd /usr/local
#chmod 711 jdk-1_5_0_02-linux-i586.bin
稍等片刻,安装就完成了,并且生成了/usr/local/jdk1.5.0_02目录
接下来,我们就需要设定一下环境变量
#vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.5.0_02
export PATH=$JAVA_HOME/bin:$PATH

ok,接下来是第二步:
安装eclipse,这个最简单,呵呵,解压就行了
unp eclipse-SDK-3.0.2-linux-gtk.p
等一会儿,搞定

第三步:安装插件,也非常非常非常简单,unp就ok
unp org.eclipse.cdt-2.1.1-linux.x86.p
unp PHPEclipse1.1.3-2005-01-29.p
如果在运行时候插件不能正常工作,看是否是解压到eclipse的plugins目录

ok,就这样简单,呵呵,

最后,为了操作方便,可以在桌面建立一些快捷方式阿,等等,

- 作者: LenggneL 2005年04月24日, 星期日 00:11  回复(2) |  引用(0) 加入博采

我读白鹿原

昨晚读完了陈忠实先生的小说《白鹿原》,久久不能入眠,总是把自己生硬的比作是小说里面的角色,连做梦都浮想联翩,一会儿自己成了黑娃,一会儿又成了鹿兆鹏,一会儿还成了白鹿原上最好的长工鹿三,一会儿还去了白雪皑皑的关中平原......

《白鹿原》最能震撼人心的是它的纯美,但是呢,那种纯美又被那个动荡的年代所蹂躏,作为白鹿原首席执行官的白嘉轩,一次又一次得想通过自己来维护白鹿原上那少有的宁静和祥和,但是呢,结果往往难以让人捉摸,不过白嘉轩真的让人敬佩的是始终都坚持原则,和那被土匪打折了的"挺的太硬的腰杆"。

《白鹿原》中的现代爱情基本上都是悲剧。黑娃最初与田小娥的闪电式的爱情,结果呢,黑娃不仅与父亲断绝了父子关系,还弄得人不人,鬼不鬼的,其实,我很不喜欢田小娥,说白了,那娘们儿给人的感觉就是做妓女的料子(个人意见,不供参考),比起黑娃后来娶的那房知书达理的媳妇,简直是一个天上,一个地下。白灵与兆海,最初给人的感觉就是两情相悦,有情人终成眷属,结果呢,他们都选择了自己的事业,都为了自己的事业献出了生命,尤其是死的最冤的灵,居然死在了自己人手里......

《白鹿原》中我最欣赏的最同情的是黑娃。黑娃其实挺有志气的,从一开始的坚决不给"腰杆挺的太硬"的嘉轩叔干活,到为了自己的追求,居然和全村人都闹翻了,成了土匪。最后的,成了朱先生最后的一个也是最好的一个的学生,黑娃真的很像个爷们儿。我同情黑娃,是因为他的死,居然被白孝义这狗日的算计了。白孝义我不喜欢的,但是他是优秀的,尤其是在官场上,他真的很适合当官,因为他够滑,花花肠子够多。其实黑娃在起义后,就应该推出了,自己完成最后的愿望,和朱先生一样,当个老师,找一块清静的地方,好好的过剩下的日子,当然了,这是理想状态,理想往往和实际差距很大的。

《白鹿原》是一本非常好的教你做人的教材,里面有非常多的经典的语句,令我感触最深的,就是以下两段话:

节选一:
世上有许多事,尽管看得清清楚楚,却不能说出口来。有的事看见了认准了,必须说出来;有的事至死也不能说。能握住什么事必须说,什么事不能说的人,才是真正的男人。

节选二:
无论你将来成龙或是成虫,无论是居宫还是为民,无论你是做庄稼还是经商以至学艺,只要居于人下就不可避免要受制于人,就要受欺,你必须忍受,哪怕是辱践也要忍受;但是,你如果只是忍受而不思报复永远忍受下去,那你注定是个没出息的软蛋狗熊窝囊废;你在心里忍着,又必须在心里记者,有日一定要跷到他头上,让他也尝尝辱践的味道......

以上都是小弟的肤浅之鉴,以后再续,找个时间,准备再品味品味,呵呵

一切竟在《白鹿原》中!

RTDT
2005-04-02


- 作者: RTDT 2005年04月2日, 星期六 12:13  回复(11) |  引用(0) 加入博采

非常有趣的一张图
呵呵,在一网页上看见的,觉得挺有意思的,博人一乐


- 作者: RTDT 2005年03月16日, 星期三 16:09  回复(1) |  引用(0) 加入博采

Unix/Linux10分钟入门
UNIX/Linux十分钟

原文地址:
http://freeengineer.org/learnUNIXin10minutes.html

原文是学习UNIX 10分钟,其实大部分都适合Linux系统,呵呵,活学活用吧,个人认为该文非常精炼,非常棒,包含了UNIX/Linux的最基本操作,值得一览.

UNIX目录和文件

在UNIX中文件和目录路径使用"/"来分隔.
如:
/    "root"目录
/usr    usr目录
/usr/STRIM100    /usr的子目录STRIM100

目录切换

pwd    present working directory
cd     切换当前目录到你的HOME目录
cd /usr/STRIM100 切换当前目录到/usr/STRIM100
cd ..    切换当前目录到其父目录
cd $STRMWORK 切换当前目录到环境变量定义的$STRMWORK目录

列出目录内容

ls    列出目录
ls -l    列出目录的所有属性
ls -a   列出以.开头的隐藏目录

更改文件权限和属性
chmod 755 file 改变文件属性为rwx(文件所由者),rx(文件所有者所在组),rx(所有用户)
chgrp user file 使file文件属于user组
chown cliff file 使file文件属于cliff
chown -R cliff dir 使dir目录中的所有内容都属于cliff
备注:如果你要修改文件存取权限,你必需是文件的拥有者,或者你是root用户

删除,移动,重命名,拷贝文件
cp file1 file2 拷贝文件
mv file1 renamed_file1 移动或者该明file1
rm file 删除file
rm -r dir 删除dir目录中的所有内容
mkdir dir_name 创建一个目录
rmdir dir_name 删除一个空目录

查看编辑文件
cat filename 以ASCII形式查看filename文件内容
more filename 以more的方式查看文件内容 ENTER下一行,SPACEBAR下一页,q退出
less filename 同more 但是可以Page-Up
vi filename 使用vi编辑文件,vi是个好动西阿,所有的UNIX系统都有
emacs filename 使用emacs边际文件,emacs功能比vi强大,但不是所有的UNIX都有
head filename 显示文件的前几行
head -n filename 显示文件的前n行
tail filename 显示文件最后几行
tail -n filename 显示文件最后n行

SHELLs
你使用的SHELL不同,会有一些细微的区别,一些SHELL的扩展有些非常时髦的功能.
如何查看你使用的SHELL
    printenv SHELL
当然,你也可以把一系列的命令都写在一个文件里面,然后执行它来完成一个任务,这个就是SHELL SCRIPT(shell脚本)

环境变量
你可以自定义一些环境变量来方便你使用
比如:
export CASROOT=/usr/loacl/CAS3.0 定义CASROOT并且赋值
cd $CASROOT 改变目录到CASROOT定义的地方

历史记录
在bash和tcsh可以使用up-arrow(上箭头)来访问你以前使用的命令.

自动补全
在bash和tcsh中,可以使用TAB键来自动补全命令或者文件名

BASH自动补全增强
在bash中,按两次TAB可以列出所有符合的文件,大部分Linux都使用BASH作为默认的shell

重定向
grep string filename > newfile 将grep结果重定向输出到newfile文件
grep string filename >> existfile 将grep结果重定向增加到existfile
很容易可以看出>要覆盖掉以前的文件内容,而>>则是在已有文件中追加

管道PIPES
"|"这个符号标志的是管道,用来将一个命令的结果输出到另一个
比如:
ls -l | more
这个首先列出目录内容,然后再调用more来输出

在文件中查找字符串grep
grep string filename 在filename中查找所有包含string的行

查找文件 find
find search_path -name filename
find . -name aaa.txt 在现在所处目录中查找所有aaa.txt
find / -name vimrc 查找系统中所有的vimrc文件
find /usr/local/games -name "*xpilot*" 在/usr/local/games中查找文件名包含"xpilot"的所有字符串

文件的打包和压缩
主要就包含两个命令tar和gzip(bzip,compress).tar命令用来打包,gzip,bzip,compress主要用来压缩,目前主要使用gzip,bzip压缩,详细的查看原文或者man手册,呵呵

帮助信息 man
大部分的命令都有自己的参考手册,这就是非常强大的man
比如:
man ls 显出ls的使用手册,非常详尽

vi基础
vi filename 打开filename文件,或者创建filename文件
i 在光标前插入内容
I  在光标所在行前插入内容
a 在光标后插入内容
A 在最后行插入
Esc 模式切换
x 删除一个字符
dd 删除现在所处行
ndd 删除n行
u Undo最后一个动作
yy 拷贝所处行到buffer
nyy 拷贝n行到buffer
p 粘贴buffer的内容在所处行的后面
h 左
j 下
k 上
l 右

:w 写入
:w new.file 写入到新文件
:wq 写入退出
:q 退出
:q! 不保存退出
:e filename 打开filename
:set number 打开行号
:set nonumber 关闭行号


XiaoKang.Leng
2005-03-12-Sat


- 作者: RTDT 2005年03月12日, 星期六 15:24  回复(2) |  引用(0) 加入博采

MySQL中的用户管理

参考过N多相关书籍文章以后,有了下面这点东西

从MySQL3.22.11开始就引入了两条语句来进行用户的管理:
GRANT语句用来创建用户并制定许可
REVOKE语句删除许可

创建并授权:
GRANT格式:
GRANT privileges(columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION

P.S
REVOKE的格式也类似:

REVOKE privileges (columns) ON what FROM user

小写字母部分都需要填写:
privileges
授予用户的许可权,下面是可用于GRANT语句的许可权指定符:
ALTER 修改表和索引
CREATE 创建数据库和表
DELETE 删除表中已有记录
DROP 删除数据库和表
INDEX 创建或删除索引
INSERT 插入权
REFERENCE 未用
SELECT 检索表中的记录
UPDATE 修改现存表记录
FILE 读写文件
PROCESS 查看删除服务器中线程
RELOAD 重载授权表,清空日志,逐级缓存,或表缓存
SHUTDOWN 关闭权
ALL 所有;同ALL PRIVILEGES
USAGE 特殊的"无许可权"的许可权

columns
许可权使用的列,可选,如果设置多列,用逗号分开

what
许可权运用级别,全局,特定资料库,特定表,

user
许可授权的用户,由用户名和主机名组成。在MySQL中,不但能指定哪个可以连接,还能指定从哪里连接。

password
用户密码,可选,当然,为了安全起见,还是需要的,呵呵,如果你对现有用户使用IDENTIFIED BY就会修改老密码,不指定的时候,老密码不变。

WITH GRANT OPTION
指定用户可以管理用户,可选

ok,下面就是我试验的例子:
MySQL版本4.0.23a

1,指定用户从指定地点连接

GRANT ALL ON test_db.* TO rtdt@localhost IDENTIFIED BY "rtdt"
GRANT ALL ON test_db.* TO tuser@192.168.3.13 IDENTIFIED BY "welcome"
GRANT ALL ON samp_db.* TO ipmast@192.168.3.0/17 IDENTIFIED BY "welcome"

test_db.*的意思是test_db数据库中的所有表,其它的旧不用解释了吧,呵呵

2,制定super用户可以从任何地点连接

GRANT ALL ON test_db.* TO super@% IDENTIFIED BY "superman"

%是做为一个通配符,与LIKE中的一样,呵呵

3,设定一个可以管理用户的帐号

GRANT ALL ON test_db.* TO admin@loaclhost INDETIFIED BY "adminuser" WITH GRANT OPTION

4,设置一个superman的超级用户

GRANT ALL ON *.* TO superman@localhost IDENTIFIED BY "iamthehead" WITH GRANT OPTION

更多的例子就不说了,活学活用,我这个也只供参考,呵呵

要注意一点,REVOKE只能取消用户权利,不能删除用户,如果想彻底删除,就要使用一条DELETE命令从user表中把用户记录删除掉。


RTDT@gmail.com
2005-02-21-Mon


- 作者: RTDT 2005年02月22日, 星期二 10:55  回复(2) |  引用(0) 加入博采

MySQL初学指南

这几天放假,没啥事儿做,弄出了这个玩意儿,仅供MySQL初学者参考。
根据MySQL Reference Manual(http://dev.mysql.com/doc/mysql/en/tutorial.html)翻译加修改的最基础的MySQL操作指南,欢迎大家拍砖。

先说说我的实验环境:

Fedora Core3,MySQL版本:4.0.23a
备注:排版不好,特别是sql语句选择出来的结果部分,
点击此处下载排版很好txt版,呵呵

连接与断开MySQL服务器
要连接到MySQL服务器,从照逻辑上来讲,你需要一个用户名和一个密码,当然了,如果你的服务器不在你自己的机器上,那你就需要一个

MySQL服务器指定好了的主机名,当你拥有了MySQL的服务器主机名,用户名,密码以后,你就可以通过mysql来连接了:

shell>mysql -h host_name -u user_name -p
Enter password:**********

如果你输入的主机名,用户名,密码都正确的话,就可以出现下面的信息了:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25338 to server version: 4.0.23a

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

这个提示就告诉你,你已经顺利的连接到了MySQL服务器了,可以使用之了。
有些MySQL服务器允许匿名在本机上登录,也就是说,你只是需要输入:

shell>mysql

就可以使用了。

当你使用完MySQL后,你需要退出,也很简单:

mysql>quit

如果你使用的是Unix系统,也可以使用Ctrl-D来结束。

说明:在以后的例子中,你都已经连接好了MySQL服务器了的。

MySQL中的SQL语句
首先要确保和MySQL服务器已经连接正常,这节主要来讨论最基本的输入命sql查询语句的原则,给一个很简单的查询版本和时间的例子:

mysql>SELECT VERSION(),CURRENT_DATE;
+--------------+--------------+
| VERSION() | CURRENT_DATE |
+--------------+--------------+
| 4.0.23a | 2005-02-17 |
+--------------+--------------+
1 row in set (0.01 ec)

从上面的例子我们就可以得出以下几个结论:
MySQL中的sql语句是以分号结尾的,当然有些例外的可以省略,比如:quit,use命令。
当你输入一个sql语句后,mysql把这条语句发送到服务器,然后执行,给出结果,然后又返回到mysql>提示符,等待输入下一条语句
mysql输入的查询结果是以表格的形式来展现给用户的。第一行包含了每列的列名,接下来的行就包含查询的结果了。通常情况下,列

名都是你建立的表格的列名。
mysql在最后会显示出一个统计信息,包含了多少行,以及查询的时间,这个信息只能给一个大体上的参考,是一个不精确的结果,因

为它不是表示的CPU的执行时间,它要受到服务器的相应时间和网络等的限制。

MySQL中的sql查询语句是不区分大小写的,比如,下面这些都是等价的:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;


给一个可以把mysql当作计算器的例子:

mysql>SELECT SIN(PI()/3),3+2-5;
+-------------+---------+
| SIN(PI()/4) | 3+2-5 |
+-------------+---------+
| 0.707107 | 0 |
+-------------+---------+
1 row in set (0.00 sec)

下面这个例子就说明,你可以在一行上输入多个sql语句,只要每个sql语句以分号结束就行了

mysql>SELECT VERSION();SELECT NOW();
+--------------+
| VERSION() |
+--------------+
| 4.0.23A |
+--------------+
+---------------------+
| NOW() |
+---------------------+
| 2005-02-17 20:07:36 |
+---------------------+

当你在输入一个很长的sql语句的时候,可以分别在多行输入这个语句,mysql不会按照每行结束来标志sql语句结束,而是根据每个sql语句的

分号来标志,如:

mysql>SELECT
->USER()
->,
->CURRENT_DATE;
+--------------------+--------------+
| USER() | CURRENT_DATE |
+--------------------+--------------+
| root@localhost | 2005-02-17 |
+--------------------+--------------+

你可能会从上面的例子中发现,mysql的提示符由>变成了->,mysql就用这个来指出:这个语句是长语句,要在这里休息休息,接着输入。其实

提示符很友好的给你返回了信息,让你知道这时候该干啥了。

如果你在输入一个sql语句后,不想执行它,那就输入\c,例子:

mysql> SELECT
-> CURRENT_DATE()
-> \c
mysql>

下面就来说说mysql中的提示符的意思:
mysql> 准备输入一条新的sql语句
-> 等待一个多行的sql语句
'> 等待下一行,用单引号括起来的
"> 同上,只不过用双引号
`> 同上,只不过用`这个符号
个人感觉,前两种是最常用的,后面的只是在有字串的情况下用,如下面这种情况:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>

就提示你输入有错误,因为少了一个'。
当然了,后面三种提示符是很重要的,因为后面三种会很好的提示你当你在输入一个很长的sql语句的时,如果字串输入出错的情况。

创建和使用数据库
ok,前面那些文字已经说明了MySQL的一些基本操作,只要多多练习,就能更好的领悟了。下面呢,我们就来说说如何在MySQL中创建使用数据

库,包括以下内容:
创建和选择数据库
创建一个表格
用LOAD DATA INFILE命令装在数据到表格
用sql语句查询表格内容
Let` GO!

这里我们用一个宠物管理(menagerie)的数据库为例子。

首先,使用show databases;命令来查看目前存在的数据库。

mysql>show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+

mysql和test这两个数据库是在安装MySQL的时候就建立好了的。

使用use命令来选择数据库

mysql>use test
Database changed

use命令和quit命令一样,都可以忽略掉分号。

下面我们就来创建数据库menagerie;

mysql>CREATE DATABASE menagerie;

注意:如果在UNIX系统中,数据库名是要区分大小写的。
创建好数据库后,数据库不是被选中的正在使用的数据库,需要使用use命令来切换。

mysql>USE menagerie
Database changed

数据库只允许被创建一次,但是你每次登录都需要使用use来选择以后才能使用之。当然,你也可以在登录的时候使用以下命令取得同等效果:

shell>mysql -h host_name -u user_name -p DATABASE_NAME
Enter password:***********

这样在你登录以后就直接切换到了DATABASE_NAME数据库。

下面我们就来创建一个储存数据的表格:
使用SHOW TABLES可以查询当前数据库中的表格数量

mysql>SHOW TABLES;
Empty set (0.00 sec)

由于我们的数据库还没有任何表格,当然是空的罗哦。
创建表格之前,如何定义表格的结构是非常重要的,你可以查看一下相关的数据库设计的书籍来学习,我这里就不再啰嗦了,直接创建了:

使用CREATE TABLE来创建表格:

mysql>CREATE TABLE pet (name VARCHAR(30),owner VARCHAR(30),species VARCHAR(20),sex CHAR(1),birth DATE,death DATE);

少许的说明:VARCHAR是name,owner,species的最好选择,因为这些列的长度都是改变的。VARCHAR的长度是1-255,要注意,不要超标了。如果在

创建完成后发现有需要修改的地方,可以使用ALTER TABLE来执行,这个以后会说到。

现在,我们在show一下menagerie中的表格,就会发现多了一个pet。

使用DESCRIBE语句可以来查看表的结构,

mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| owner | varchar(20) | YES | | NULL | |
| species | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| death | date | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+

DESCRIBE可以简写成DESC,不知道其它版本的MySQL是不是也一样。

表创建好了,自然就应该往表里面灌数据了。

下面就说说如何向表格中添加数据:
在MySQL中,如果要批量的数据数据,可以使用LOAD DATA来实现,如果是少量数据,当然也可以使用INSERT语句。
为了方便,我们这里要输入一批数据,并且是很规范的文本文件,我们就使用LOAD DATA。

首先,创建文件data.txt,内容如下:

name owner species sex birth death
Fluffy Harold cat f 1993-02-04 NULL
Claws Gwen cat m 1994-03-17 NULL
Buffy Harold dog f 1989-05-13 NULL
Fang Benny dog m 1990-08-27 NULL
Bowser Diane dog m 1979-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11 NULL
Whistler Gwen bird NULL 1997-12-09 NULL
Slim Benny snake m 1996-04-29 NULL
Puffball Diane hamster f 1999-03-30 NULL

注意,日期的格式必须是:YYYY-MM-DD

然后,我们就来把data.txt灌到pet表中去:

mysql>LOAD DATA INFILE '/PATH/data.txt' INTO TABLE pet;

注意:如果你使用的是windows操作系统,并且如果换行符使用的是\r\n,就需要使用下面的命令

mysql>LOAD DATA INFILE '/PATH/data.txt' INTO TABLE pet;
->LINES TERMINATED BY '\r\n';

更多的关于LOAD DATA基于安全方面的考虑,可以查看一下网页:
http://dev.mysql.com/doc/mysql/en/load-data-local.html

如果使用INSERT语句来插入数据的话,按照以下格式就行了:

mysql>INSERT INTO pet
->VALUES ('Name','OwnerA','Diane','hamster','f','2005-02-18',NULL);

当然了,你也可以选择指定的列插入,更多的查看INSERT语句相关资料。

数据库,表,以及数据的输入都已经完成了,下面我就来说说关于对表的一般操作。

SELECT语句是表操作的一个最主要的语句,最基本的格式如下:

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;

what_to_select指的是你想获取的内容,说白了,就是列名。which_table 指的是哪个表,也就是表名称,conditions_to_satisfy指的是需要

满足的条件。

一个最简单的SELECT的例子就是:

mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+

这是用来检索你表中的所有数据,如果你刚用LOAD DATA来转载数据的话,这样查看一遍是非常有必要的,当然,如果数据量非常大,要的时间

也是非常的漫长的。

下面,就用几个来说明以下SELECT的其它用法:

例一:选择指定名称的行

mysql> SELECT * FROM pet WHERE name = 'Bowser';
+--------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+

例二:根据指定的日期选择

mysql> SELECT * FROM pet WHERE birth >= '1998-1-1';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+

例三:连接词"AND"的使用

mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

例四:连接词"OR"的使用:

mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+-------+---------+------+------------+-------+

例五:"AND"和"OR"的混合使用:

mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
-> OR (species = 'dog' AND sex = 'f');
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

例六:DISTINCT的用法:
说明:DISTINCT是指定输出内容无重复选项的一个关键词。

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner |
+--------+
| Benny |
| Diane |
| Gwen |
| Harold |
+--------+

例七:输出内容的排序,ORDER BY的使用:

mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name | birth |
+----------+------------+
| Buffy | 1989-05-13 |
| Bowser | 1989-08-31 |
| Fang | 1990-08-27 |
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Slim | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+

例八:ORDER BY排序的使用

mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name | birth |
+----------+------------+
| Buffy | 1989-05-13 |
| Bowser | 1989-08-31 |
| Fang | 1990-08-27 |
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Slim | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+

默认情况下,ORDER BY是使用升序排序,可以使用DESC修饰词进行降序排序:

mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name | birth |
+----------+------------+
| Puffball | 1999-03-30 |
| Chirpy | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim | 1996-04-29 |
| Claws | 1994-03-17 |
| Fluffy | 1993-02-04 |
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| Buffy | 1989-05-13 |
+----------+------------+

在给一个多列排序的例子:

mysql> SELECT name, species, birth FROM pet
-> ORDER BY species, birth DESC;
+----------+---------+------------+
| name | species | birth |
+----------+---------+------------+
| Chirpy | bird | 1998-09-11 |
| Whistler | bird | 1997-12-09 |
| Claws | cat | 1994-03-17 |
| Fluffy | cat | 1993-02-04 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
| Buffy | dog | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim | snake | 1996-04-29 |
+----------+---------+------------+

ok,关于SELECT的一些基本的玩意儿,就说这么多了,其实最主要的是要"实战",多练多积累经验。

下面,我们讨论讨论数据的计算:
如果我们想知道每只宠物的年龄,就需要用到对数据的计算:

mysql> SELECT name, birth, CURDATE(),
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5) -> AS age
-> FROM pet;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
+----------+------------+------------+------+

做小小的说明,year函数用来截取日期中年的部分,right函数用来截取指定字符串最右边的指定字节,month函数可以用来截取日期中月的部

分(month在以后的例子会用到)。知道了这两个以后,上面的例子就很好理解了。

对上面一个例子的升级,根据年龄来排序:

mysql> SELECT name, birth, CURDATE(),
-> (YEAR(CURDATE())-YEAR(birth))
-> - (RIGHT(CURDATE(),5) -> AS age
-> FROM pet ORDER BY age;
+----------+------------+------------+------+
| name | birth | CURDATE() | age |
+----------+------------+------------+------+
| Chirpy | 1998-09-11 | 2003-08-19 | 4 |
| Puffball | 1999-03-30 | 2003-08-19 | 4 |
| Whistler | 1997-12-09 | 2003-08-19 | 5 |
| Slim | 1996-04-29 | 2003-08-19 | 7 |
| Claws | 1994-03-17 | 2003-08-19 | 9 |
| Fluffy | 1993-02-04 | 2003-08-19 | 10 |
| Fang | 1990-08-27 | 2003-08-19 | 12 |
| Bowser | 1989-08-31 | 2003-08-19 | 13 |
| Buffy | 1989-05-13 | 2003-08-19 | 14 |
+----------+------------+------------+------+

再次升级,只列出死亡宠物的年龄:

mysql> SELECT name, birth, death,
-> (YEAR(death)-YEAR(birth)) - (RIGHT(death,5) -> AS age
-> FROM pet WHERE death IS NOT NULL ORDER BY age;
+--------+------------+------------+------+
| name | birth | death | age |
+--------+------------+-----------+------+
| Bowser | 1989-08-31 | 1995-07-29 | 5 |
+--------+------------+------------+------+

前面提到了month函数,下面给一个相关的例子
mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name | birth | MONTH(birth) |
+----------+------------+--------------+
| Fluffy | 1993-02-04 | 2 |
| Claws | 1994-03-17 | 3 |
| Buffy | 1989-05-13 | 5 |
| Fang | 1990-08-27 | 8 |
| Bowser | 1989-08-31 | 8 |
| Chirpy | 1998-09-11 | 9 |
| Whistler | 1997-12-09 | 12 |
| Slim | 1996-04-29 | 4 |
| Puffball | 1999-03-30 | 3 |
+----------+------------+--------------+

关于NULL,
NULL是一个比较奇特的值,概念上讲,NULL的意思是遗失值或者不知道的值。用比较符号=,<,<>可以很好的测试NULL,例:

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+

从上面的例子,应该可以很好的理解NULL吧,为了加深一下,可以使用IS NULL和IS NOT NULL关键词:

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+

注意:在MySQL中,0或者NULL指的是false,其它的任何值就是true,也就是1。

MySQL中的字符匹配:
在MySQL中," _ "符号表示每个单一字符的匹配," % "用来匹配任何数量的字符,注意,在MySQL中,如果要使用上诉两种符号,不能使用等

号(=)或者不等于(<>)来执行,而是使用LIKE 或者 NOT LIKE。

下面给几个例子:
例一:查找名字以'b'开头的

mysql> SELECT * FROM pet WHERE name LIKE 'b%';
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

例二:查找以'fy'结尾的

mysql> SELECT * FROM pet WHERE name LIKE '%fy';
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+

例三:查找名字中包含'w'的

mysql> SELECT * FROM pet WHERE name LIKE '%w%';
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+

例四:查找名字为五个字符的,使用五个'_'号

mysql> SELECT * FROM pet WHERE name LIKE '_____';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

对于其它的在MySQL中使用的匹配模式,也可以使用正则表达式(P.S:看来正则表达式很重要啊,到处都在用,大家一定要研究透彻,我的美味

书签http://del.icio.us/rtdt里面收藏了几篇关于正则表达式学习的很好的文章,有兴趣的可以看看),当你要使用正则表达式时,不能使用

LIKE或者NOT LIKE来作为操作符了,而要使用 REGEXP 或者 NOT REGEXP,下面提供一些正则表达式的参考:

_:这个符号表示单一字符的匹配
[]:包含在[]中的内容都匹配
*:匹配任何相同的在"*"前的字符,比如:x*,表示任何数目的x
^:表示开头
$:表示结尾

更多关于正则表达式的规则请参考正则表达式的相关内容,下面给几个例子:

例一:查找b开头的字符

mysql> SELECT * FROM pet WHERE name REGEXP '^b';
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

备注:在3.23.4以前的版本,REGXP都区分大小写,前面的那个例子就要写成这样:

mysql> SELECT * FROM pet WHERE name REGEXP '^[bB]';

例二:查找名字以fy结尾的

mysql> SELECT * FROM pet WHERE name REGEXP 'fy$';
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+

例三:查找名字包含w的

mysql> SELECT * FROM pet WHERE name REGEXP 'w';
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+

例四:查找五个字符的名字

mysql> SELECT * FROM pet WHERE name REGEXP '^.....$';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

前面对例子也可以写成这样,使用{n}作为重复次数:

mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

ok,关于MySQL的匹配模式就说这么多,还是那句老话,多练多积累经验。

下面说说COUNT这个东东

COUNT是用来计算行的数量的,比如:

mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

当然,你也可以使用COUNT来计算其它的一些东西,还是用例子来说明:

例一:计算每个人拥有的宠物数量

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+--------+----------+
| owner | COUNT(*) |
+--------+----------+
| Benny | 2 |
| Diane | 2 |
| Gwen | 3 |
| Harold | 2 |
+--------+----------+

注意,一定要使用GROUP BY owner,要不然,会出错误的,嘿嘿。

例二:对宠物的一次普查

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bid | NULL | 1 |
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
+---------+------+----------+

例三:对例二的一个升级,去掉了不明性别的宠物

mysql> SELECT species, sex, COUNT(*) FROM pet
-> WHERE sex IS NOT NULL
-> GROUP BY species, sex;
+---------+------+----------+
| species | sex | COUNT(*) |
+---------+------+----------+
| bird | f | 1 |
| cat | f | 1 |
| cat | m | 1 |
| dog | f | 1 |
| dog | m | 2 |
| hamster | f | 1 |
| snake | m | 1 |
+---------+------+----------+

COUNT就说这么多了,自己多琢磨琢磨。

下面说多表查询。
在实际的生产中,绝大部分时间其实都是在做多表查询,用一个表的时间可以说很好。
我们先创建一个event的事件表,保存宠物都干了些啥。

mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
-> type VARCHAR(15), remark VARCHAR(255));

表的内容如下:

name date type remark
Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1994-06-19 litter 3 puppies, 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
Whistler 1998-12-09 birthday First birthday

当然,我们仍然需要使用LOAD FILE INFILE来把它们灌入到表中:

mysql> LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

ok,下面我们就来说几个例子,来具体说明多表查询,其实只要你非常熟悉了单表查询,要掌握多表查询也是非常容易的。

例一:查找在event表中type为litter的对应宠物的年龄

mysql> SELECT pet.name,
-> (YEAR(date)-YEAR(birth)) - (RIGHT(date,5) -> remark
-> FROM pet, event
-> WHERE pet.name = event.name AND type = 'litter';
+--------+------+-----------------------------+
| name | age | remark |
+--------+------+-----------------------------+
| Fluffy | 2 | 4 kittens, 3 female, 1 male |
| Buffy | 4 | 5 puppies, 2 female, 3 male |
| Buffy | 5 | 3 puppies, 3 female |
+--------+------+-----------------------------+

说明:要在每个表格的列的前面加上表格名,即:tbl_name.col_name
当然,也可以使用别名:见下例

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
-> FROM pet AS p1, pet AS p2
-> WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
+--------+------+--------+------+---------+
| name | sex | name | sex | species |
+--------+------+--------+------+---------+
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
| Buffy | f | Bowser | m | dog |
+--------+------+--------+------+---------+

多表查询就扯这么多了,多练吧,嘿嘿

下面说说如何使用MySQL的批处理模式

批处理模式在有时候是非常有用的,比如你已经用一些文本编辑器编辑好了sql语句,就可以直接载入,而无须在输入了。

格式如下:

shell> mysql -h host -u user -p < batch-file
Enter password: ********

如果在windows下,一些特殊的字符可能导致问题,你可以使用这样的格式:

C:\> mysql -e "source batch-file"

当我们明白了批处理模式以后,如果在结合上脚本变成,那MySQL就如虎添翼了。

好了,我该歇哈儿间了,休息休息,MySQL的基本操作差不多也就这么多了,如果哪里有错了的地方,欢迎大家拍砖(RTDT36@gmail.com)。以后我会将MySQL的其它

操作搞出来的,如果您有耐心,并且对MySQL又不太熟悉,就等待吧,哈哈哈。

RTDT
2005-02-20-Sun


- 作者: RTDT 2005年02月20日, 星期日 17:30  回复(0) |  引用(0) 加入博采

一个自动安装Apache+PHP+MySQL的脚本
呵呵,其实是非常非常简单的一个脚本,就是把命令都向搭积木一样堆积起来就ok了,呵呵

#!/bin/sh
#Email:RTDT36@gmail.com
#WeBLog:http://rtdt.blogchina.com

#以下部分是定义Apache,PHP,MySQL的版本号
ApacheVersion="2.0.52"
PHPVersion="4.3.10"
MySQLVersion="4.0.23a"

#解压所有的tar包
tar zxvf httpd-$ApacheVersion.tar.gz &&
tar zxvf mysql-$MySQLVersion.tar.gz &&
tar zxvf php-$PHPVersion.tar.gz &&

#开始安装Apache
echo "Configure And Install Apache" &&
cd httpd-$ApacheVersion &&
./configure
--prefix=/usr/local/apache2
--enable-mods-shared=most &&
make &&
make install &&

#安装MySQL部分
cd .. &&
echo "Configure And Install MySQL"
cd mysql-$MySQLVersion
./configure
--prefix=/usr/local/mysql
--localstatedir=/usr/local/mysql/data
--disable-maintainer-mod
--with-mysqld-user=mysql
--enable-large-files &&
make &&
make install &&
groupadd mysql &&
useradd -g mysql mysql &&
./scripts/mysql_install_db &&
chown -R root:mysql /usr/local/mysql &&
chown -R mysql:mysql /usr/local/mysql/data &&

#安装PHP部分
echo "Configure And Install PHP" &&
cd &&
cd php-$PHPVersion &&
./configure
--prefix=/usr/local/php
--with-apxs2=/usr/local/apache2/bin/apxs
--with-mysql=/usr/local/mysql &&
make &&
make install &&
cp php.ini-dist /usr/local/lib/php.ini &&

echo "Congrutations!" &&
echo "Apache,MySQL and PHP are installed on your system! "



RTDT
2005-02-06-Sun

- 作者: RTDT 2005年02月6日, 星期日 16:54  回复(0) |  引用(0) 加入博采

FC3中架设Apache+PHP+MySQL

Fedora3中Apache+Mysql+PHP安装全攻略
这是我个人在FC3中安装AMP的过程,供大家参考。
第一步:
软件的下载:
需要的软件如下:
    httpd-2.0.52.tar.gz http://www.apache.org    
    mysql-4.0.23.tar.gz http://www.mysql.com
    php-4.3.10.tar.gz http://www.php.net
当然,你可以选用版本更高的,呵呵,但是可能在安装上有点不同,你可以查看相关的手册。

第二步:
解压:
呵呵,这步是必须的啊,不解压,怎么装?
    tar -zxvf httpd-XXXX.tar.gz
    tar -zxvf mysql-XXXX.tar.gz
    tar -zxvf php-XXXX.tar.gz

ok,前面的都是写准备工作,下面,我们就要开工罗哦,呵呵

安装Apache:
#cd httpd-XXXX
#./configure --prefix=/usr/local/apache2 --enable-mods-share=most
当然,你可以查看编译参数--help,获得更多的资料,我这里只是把一些模块编译了进去。
如果一切正常,你就可以执行下面的了,
#make
#make install
这是一个非常漫长的过程,看机器性能了,呵呵,
Apache就装到这里,我们转到MySQL的安装

安装MySQL
#cd mysql-XXXX
#./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --disable-maintainer-mode --with-mysqld-user=mysql --enable-large-files
还是那句话,--help可以知道更多的编译参数
ok,如果你运气号,就可以编译成功,当然不成功页不要气馁,多试几遍就ok了
#make
#make install
安装MySQL的时间大概是Apache的4,5倍,很长很长,足够时间去洗个澡,换件衣服,呵呵
ok,全部搞定以后,你需要对MySQL做小小的设置:
#groupadd mysql //添加mysql用户组
#useradd -g mysql mysql //添加一个mysql的用户
接着,你需要对MySQL的数据库进行安装
#./scripts/mysql_install_db
接着,授权用户以及组:
#chown -R root:mysql /usr/local/mysql
#chown -R mysql:mysql /usr/local/mysql/data
为了避免问题,可以对ld.so.conf文件进行修改(备注:其实这个可以不用的)
#vi /etc/ld.so.conf  添加下面这行
/usr/local/lib/mysql
ok,MySQL安装就到这里完成了,下面就是启动它:
#/usr/local/mysql/bin/mysqld_safe & //后台启动mysql
大家都应该很清楚,MySQL安装完成后,最重要的就是修改root密码,我也不利外:
#/usr/local/mysql/bin/mysqladmin -u root password new_password
MySQL的基本安装与配置到此为止,剩下的关于MySQL的操作就是MySQL的事了,呵呵

安装PHP
#cd php-XXXX
#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql
#make
#make install
如果不出现意外,PHP安装就OK了,下面要对PHP进行少少的配置:
#cp php.ini-dist /usr/local/lib/php.ini //php.ini-dist文件在php的安装文件里面,呵呵
#vi /usr/local/lib/php.ini
找到doc_root,修改成对应的地址:/usr/local/apache2/htdocs/
为了安全,我关闭了file_uploads,默认的是开启。

ok,安装工作到此结束,下面,要对Apache的配置文件进行修改:
#vi /usr/local/apache2/conf/httpd.conf
修改如下:
LoadModule php4_module        modules/libphp4.so
DirectoryIndex index.html index.php
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
保存退出,启动apache
#/usr/local/apache2/bin/apachect1 start
在htdoc里面新建一个php测试页面,
#vi /usr/local/apache2/htdocs/test.php
内容如下://其实都是千篇一律的,哈哈哈
    phpinfo();
?>
现在基本上可以收工了,呵呵,因为打开你的Firefox或者Mozilla,输入地址,如果不出先意外,就可以看见php的信息页面了!

以下部分是让系统启动是自动运行MySQL和Apache的,
关于MySQL的自动运行:
#cp support-files/mysql.server /etc/init.d/mysql
然后,用chkconfig来设定,呵呵:
#chkconfig --level 35 mysql  //让mysql自动在level3和level5两个级里面自动运行,当然,你可以根据实际情况而定
应该就这么简单吧,呵呵,
关于Apache的自动运行:
apache2好象不支持chkconfig来设定,我在网上找到了一个玩意儿,就能启动了,如下:
#cp apachect1 /etc/init.d/httpd
然后,
#vi /etc/init.d/httpd
在开头(即#!/bin/sh)后面加入:
#chkconfig:2345 10 90  //2345是运行的级别,后面的是优先级
#description:Run the httpd server
经过改造以后,Apache也可以使用chkconfig来进行设定了,哈哈哈哈
不过我看见网上还有一种方法是在rc3.d里面ln一个链接来设定的,有空我试试,呵呵!

ok,收工!如果你经常安装的话,可以写一个shell脚本来全自动运行,呵呵
如果那位仁兄发现哪里有不足的地方,欢迎拍砖(RTDT36@gmail.com)


RTDT
2005-01-31-Mon




- 作者: RTDT 2005年01月31日, 星期一 22:44  回复(2) |  引用(0) 加入博采

如何在FC3中为yum安装GPG Key
在默认情况下,如果你使用yum升级系统,就会检查你的GPG Key,
当你输入:yum update  的时候,
如果没有GPG Key,就会出现以下提示:
You have enabled checking of packages via GPG keys. This is a good thing.
However, you do not have any GPG public keys installed. You need to download
the keys for packages you wish to install and install them.
You can do that by running the command:
rpm --import public.gpg.key
For more information contact your distribution or package provider.
所以你就需要把FC的GPG key装上,如下:
rpm --import /usr/share/rhn/RPM-GPG-KEY-fedora

ok,现在如果再运行yum update的话,就没有任何问题了,

当然了,使用yum升级是非常慢的,可能是我的网速不行,花了我N多时间

对了,你也可以下载一个gyum来看看,有图形化的界面,可能更方便一点,
下载地址:http://fedoranews.org/tchung/gyum/fc3/

给个FC3 GPG  的参考网址:
http://fedora.redhat.com/about/security/

RTDT
2005-01-23


- 作者: RTDT 2005年01月23日, 星期日 06:02  回复(0) |  引用(0) 加入博采

Fedora3中使用apt-get
Fedora3中使用apt-get
呵呵,apt-get这个东西应该属于Debian的专利吧,的确很方便,解决了安装rpm包安装的时候包关联的一些不必要的问题.

要想在FC3中使用apt-get,首先,下载apt-get的rpm包,然后rpm -ivh上,下载地址是:
http://ayo.freshrpms.net

安装完成后,要先获取pkglist,运行:
apt-get update
然后,你可以升级一下您的系统,FC3有很多的升级包了,当然,你也可以通过FC3自带的yum来升级,看网速而定了
apt-get方式:apt-get upgrade
如果网速慢,可能会浪费很多时间的,
接着,你就可以享受apt-get超市给你带来的乐趣了,需要什么,就get一个什么吧:
比如:apt-get install mplayer

如果您想知道更多的apt-get的信息,就man出来看看吧,呵呵

收工,

2005-01-22 Sat


- 作者: RTDT 2005年01月22日, 星期六 02:44  回复(0) |  引用(0) 加入博采