|
|
用户名: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 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
一个自动安装Apache+PHP+MySQL的脚本
FC3中架设Apache+PHP+MySQL
如何在FC3中为yum安装GPG Key
You have enabled checking of packages via GPG keys. This is a good thing.所以你就需要把FC的GPG key装上,如下:
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.
Fedora3中使用apt-get