|
|
用户名:RTDT 笔名:LenggneL 地区: 天堂-地狱 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
怒发冲冠,凭阑处、潇潇雨歇。抬望眼、仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲、白了少年头,空悲切。 靖康耻,犹未雪;臣子恨,何时灭。驾长车踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河。朝天阙。 --------岳飞
关于本BLOG:闲暇之余,泛泛而谈,看看可以,不供参考。本BLOG所有内容遵循GPL!
开源资源中心:http://noroot.info
Web:http://www.goodgoodgood.cn
本blog不更新,更新请查看新的空间
捕捉网络的精灵——捕网者!
捕捉网络的精灵——捕网者!
呵呵,明白就好
Bash Shell基础
感受昙花一现的美!
呵呵,昨晚,我家那盆昙花开了,长这么大以来,终于亲自看到了昙花一现的美!
小弟摄像技术不佳,还请大家多多包涵,呵呵!
Ltteer Oredr and Wrod Undestrdaning
PHP文字过滤函数
使用wget
莫爾斯電碼也不難


Illuminati






博客中国升级,我也改朝换代,
搭建基于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,就这样简单,呵呵,
最后,为了操作方便,可以在桌面建立一些快捷方式阿,等等,
我读白鹿原
昨晚读完了陈忠实先生的小说《白鹿原》,久久不能入眠,总是把自己生硬的比作是小说里面的角色,连做梦都浮想联翩,一会儿自己成了黑娃,一会儿又成了鹿兆鹏,一会儿还成了白鹿原上最好的长工鹿三,一会儿还去了白雪皑皑的关中平原......
《白鹿原》最能震撼人心的是它的纯美,但是呢,那种纯美又被那个动荡的年代所蹂躏,作为白鹿原首席执行官的白嘉轩,一次又一次得想通过自己来维护白鹿原上那少有的宁静和祥和,但是呢,结果往往难以让人捉摸,不过白嘉轩真的让人敬佩的是始终都坚持原则,和那被土匪打折了的"挺的太硬的腰杆"。
《白鹿原》中的现代爱情基本上都是悲剧。黑娃最初与田小娥的闪电式的爱情,结果呢,黑娃不仅与父亲断绝了父子关系,还弄得人不人,鬼不鬼的,其实,我很不喜欢田小娥,说白了,那娘们儿给人的感觉就是做妓女的料子(个人意见,不供参考),比起黑娃后来娶的那房知书达理的媳妇,简直是一个天上,一个地下。白灵与兆海,最初给人的感觉就是两情相悦,有情人终成眷属,结果呢,他们都选择了自己的事业,都为了自己的事业献出了生命,尤其是死的最冤的白灵,居然死在了自己人手里......
《白鹿原》中我最欣赏的最同情的是黑娃。黑娃其实挺有志气的,从一开始的坚决不给"腰杆挺的太硬"的嘉轩叔干活,到为了自己的追求,居然和全村人都闹翻了,成了土匪。最后的,成了朱先生最后的一个也是最好的一个的学生,黑娃真的很像个爷们儿。我同情黑娃,是因为他的死,居然被白孝义这狗日的算计了。白孝义我不喜欢的,但是他是优秀的,尤其是在官场上,他真的很适合当官,因为他够滑,花花肠子够多。其实黑娃在起义后,就应该推出了,自己完成最后的愿望,和朱先生一样,当个老师,找一块清静的地方,好好的过剩下的日子,当然了,这是理想状态,理想往往和实际差距很大的。
《白鹿原》是一本非常好的教你做人的教材,里面有非常多的经典的语句,令我感触最深的,就是以下两段话:
节选一:
世上有许多事,尽管看得清清楚楚,却不能说出口来。有的事看见了认准了,必须说出来;有的事至死也不能说。能握住什么事必须说,什么事不能说的人,才是真正的男人。
节选二:
无论你将来成龙或是成虫,无论是居宫还是为民,无论你是做庄稼还是经商以至学艺,只要居于人下就不可避免要受制于人,就要受欺,你必须忍受,哪怕是辱践也要忍受;但是,你如果只是忍受而不思报复永远忍受下去,那你注定是个没出息的软蛋狗熊窝囊废;你在心里忍着,又必须在心里记者,有日一定要跷到他头上,让他也尝尝辱践的味道......
以上都是小弟的肤浅之鉴,以后再续,找个时间,准备再品味品味,呵呵
一切竟在《白鹿原》中!
RTDT
2005-04-02
Unix/Linux10分钟入门
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
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
一个自动安装Apache+PHP+MySQL的脚本