关于作者

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

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



Private Links

Favorite Logo

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




Powered by BlogDriver 2.1

混沌糊涂日至

 

怒发冲冠,凭阑处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。 靖康耻,犹未雪;臣子恨,何时灭。驾长车踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河。朝天阙。 --------岳飞
关于本BLOG:闲暇之余,泛泛而谈,看看可以,不供参考。本BLOG所有内容遵循GPL
开源资源中心:http://noroot.info
Web:http://www.goodgoodgood.cn

本blog不更新,更新请查看新的空间

文章

NoRoot,开源相关资源荟萃
http://noroot.info

- 作者: LenggneL 2008年01月14日, 星期一 20:48  回复(0) |  引用(0) 加入博采

捕捉网络的精灵——捕网者!
捕网者:http://www.goodgoodgood.cn
本站更新也转战至:http://logs.goodgoodgood.cn

- 作者: LenggneL 2007年09月21日, 星期五 16:02  回复(0) |  引用(0) 加入博采

捕捉网络的精灵——捕网者!
捕网者:http://www.goodgoodgood.cn
本站更新也转战至:http://logs.goodgoodgood.cn

- 作者: LenggneL 2007年09月21日, 星期五 16:01  回复(0) |  引用(0) 加入博采

呵呵,明白就好
我换了个新的blog地址:
http://cmyf.name
有兴趣的兄弟可以看看

- 作者: LenggneL 2006年02月28日, 星期二 14:06  回复(0) |  引用(0) 加入博采

本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 sec)

从上面的例子我们就可以得出以下几个结论:
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(*) |
+---------+------+----------+
| bird | 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) 加入博采