延吉虹桥广告的Mysql教程第三弹来了!除了制作延吉广告,延吉牌匾,延吉广告牌,延吉宣传单,延吉宣传册,延吉展架的延吉广告公司外我们还发布公益类的网站开发小技巧哟~么么哒~

禹林
2019-10-18

延吉虹桥广告的Mysql教程又来了!本来想整合一些关于Php的教程,但是很多宝贝们对数据库的基础的安装不太懂,而你的整合内容是给专业人士看的吗?不是的~好吧今天我们就来补上一期整合的安装环境与Mysql+php或者java连接的内容。其实很简单再次声明哟,本整合内容来自MySQL的新闻,不是我在瞎掰,另外,让我们再喊一次 延吉虹桥的口号:我们除了制作延吉广告,延吉牌匾,延吉广告牌,延吉宣传单,延吉宣传册,延吉展架的延吉广告公司外我们还发布公益类的网站开发小技巧哟~么么哒~

72zs3wz2r5g7.jpg

好了回过头来,我们继续今天的整合内容:


Mysql学习点滴




一:由于工作中需要使用mysql,笔者通过网上学习,动手实践,终于从一个"数据库菜鸟"变成了能熟练操作mysql的"准大虾"了



,:)。现将学习心得整理如下。



  MySQL是完全网络化的跨平台关系型数据库系统,一个真正的多用户、多线程SQL数据库服务器,同时是具有客户机/服务器



体系结构的分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多



语言编写访问MySQL 数据库的程序,对于中、小型应用系统是非常理想的。除了支持标准的ANSI SQL语句,更重要的是,它还支



持多种平台,而在Unix系统上该软件支持多线程运行方式,从而能获得相当好的性能。对于不使用Unix的用户,它可以在



Windows NT系统上以系统服务方式运行,或者在Windows 95/98系统上以普通进程方式运行。而在Unix/Linux系统上,MySQL支持



多线程运行方式,从而能获得相当好的性能,而且它是属于开放源代码软。



  MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成,MySQL 的执行



性能非常高,运行速度非常快,并非常容易使用,是一个非常棒的数据库。MySQL的官方发音是"My Ess Que Ell"(不是 MY-SEQUEL )。



一.获得MySQL

  首先必须下载MySQL。Mysql的官方网站是:http://www.mysql.com ,在中国的镜像是:

http://www.freecode.net.cn/mirror/mysql/ 或者http://www2.linuxforum.net/mirror/mysql/,可以下载MySQL的稳定版本


3.22.32(截止到笔者发稿为止)。其版本名称是mysql-shareware-3.22.32-win,不但免费而且没有所谓的"30天使用期限"。



二.MySQL的安装


(一)在Win98/Winnt下的安装

  到一个目录,运行Setup程序,会提示整个安装的过程。它默认安装到c:\mysql下,如果要安装到其它目录下还有改动一些

东西,作为初学者,可以先不管,以默认的目录安装。好了,安装后,进入c:\mysql\bin目录下,运行mysqld-shareware.exe文

件在Win98下直接运行,正常情况下,没有什么提示信息。

  1。将下载后的文件解压解压到一个临时目录。

  2。点击setup.exe安装到c:\mysql(默认)。

  3。将mysql_example.cnf拷贝到c:\my.cnf,把文件中的#basedir=d:/mysql/改为basedir=c:\mysql。

  4。进入msdos,到目录c:\mysql\bin。

  5。输入mysqld-shareware -install,此为启动Mysql数据库服务。

  6。mysqladmin -u root -p password 新密码,此为修改root用户的密码(原来默认的密码为空。)

  7。输入mysql -u root -p。

  8.接着,根据提示输入新密码 ,正常情况下会出现几行提示信息并出现提示符号:

    Welcome to the MySQL monitor. Commands end with ; or \g.

    Your MySQL connection id is 6268 to server version: 3.22.32

    Type 'help' for help.

    mysql>

到此,你已经成功安装了MySQL。


二:


(二)在Windows2000 下的安装

  1。安装时选默认目录: c:\mysql

  2。把 c:\mysql\my-example.cnf copy 为 c:\my.cnf,并把 c:\mysql\lib\cygwinb19.dll copy 到 winnt\system32。

  3。启动 mysql的方法是:

    c:\mysql\bin\mysqld-shareware --install

    net start mysql

  这么简单,就可以启动了。

  4。更改 超级用户(root) 的密码:

    C:\mysql\bin\mysql mysql

    mysql> UPDATE user SET password=PASSWORD('your password') WHERE user='root';

    mysql> QUIT

    C:\mysql\bin\mysqladmin reload

    使用命令C:\mysql\bin\mysqlshow去看看检测一下。在这里应该显示:

    +-----------+

    | Databases |

    +-----------+

    | mysql |

    | test |

    +-----------+

    看到这些信息这一步就证明没问题了

    再来:

    C:\mysql\bin\mysqlshow --user=root --password=your password mysql

    在这里应该显示:

    Database: mysql

    +--------------+

    | Tables |

    +--------------+

    | columns_priv |

    | db |

    | host |

    | tables_priv |

    | user |

    +--------------+

    一切搞定!

  5。C:\mysql\bin\mysqladmin version status proc

  应该可以看到这些版本信息的:

   mysqladmin Ver 8.0 Distrib 3.22.32, for Win95/Win98 on i586

   TCX Datakonsult AB, by Monty


   Server version 3.22.32-shareware-debug

   Protocol version 10

   Connection localhost via TCP/IP

   TCP port 3306

   Uptime: 1 hour 29 min 30 sec


   Threads: 1 Questions: 72 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 0 Memory in use: 16423K

Max memory      used: 16490K

   Uptime: 5370 Threads: 1 Questions: 72 Slow queries: 0 Opens: 16 Flush tables: 1 Open tables: 0 Memory in

use: 16423K     Max memory used: 16490K

    +----+------+-----------+----+---------+------+-------+------------------+

    | Id | User | Host | db | Command | Time | State | Info |

    +----+------+-----------+----+---------+------+-------+------------------+

    | 35 | ODBC | localhost | | Query | 0 | | show processlist |

    +----+------+-----------+----+---------+------+-------+------------------+

  接着,用show databases命令可以将安装的数据库列出来:

    mysql> show databases;

  你就可以看到:

    +----------+

    | Database |

    +----------+

    | mysql |

    | test |

    +----------+

    2 rows in set (0.00 sec)

  如果一切正常的话,那说明MySQL可以完全工作了!如果要退出程序,输入:exit

    mysql> exit;

    Bye


3


三.Mysql常识


(一) 字段类型


  1.INT[(M)]

  正常大小整数类型


  2.DOUBLE[(M,D)] [ZEROFILL]

  正常大小(双精密)浮点数字类型


  3.DATE

  日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示DATE值,但是允许你使用字符串


或数字把值赋给  DATE列


  4.CHAR(M)

  定长字符串类型,当存储时,总是是用空格填满右边到指定的长度


  5.BLOB TEXT

  BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。


  6.VARCHAR

  变长字符串类型,最常用的类型。

(二)基本操作

  1: 显示数据库

   mysql>SHOW DATABASES;

  2:当前选择的数据库,

   mysql> SELECT DATABASE();

   +------------+

   | DATABASE() |

   +------------+

   | test |

   +------------+

  3.当前数据库包含的表信息:

   mysql> SHOW TABLES;

   +---------------------+

   | Tables in test |

   +---------------------+

   | mytable1 |

   | mytable2 |

   +---------------------+

  4.获取表结构


   mysql> desc mytable1;

   +---------+-------------+------+-----+---------+-------+

   | Field | Type | Null | Key | Default | Extra |

   +---------+-------------+------+-----+---------+-------+

   | s1 | varchar(20) | YES | | NULL | |

   +---------+-------------+------+-----+---------+-------+

  5.创建表


  表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。创建表的基本语法如下:

   create table table_name

   (column_name datatype {identity |null|not null},

   …)

  其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数datatype是一个标准的SQL类

型或由用户数  据库提供的类型。用户要使用non-null从句为各字段输入数据。

  create table还有一些其他选项,如创建临时表和使用select子句从其他的表中读取某些字段组成新表等。还有,在创建表

是可用PRIMARY   KEY、KEY、INDEX等标识符设定某些字段为主键或索引等。书写上要注意: 在一对圆括号里的列出完整的字

段清单。字段名间用逗号隔开  。 字段名间的逗号后要加一个空格。最后一个字段名后不用逗号。所有的SQL陈述都以分

号";"结束。

  例:

   mysql>CREATE TABLE guest (name varchar(10),sex varchar(2),age int(3),career varchar(10));

  6.创建索引


  索引用于对数据库的查询。一般数据库建有多种索引方案,每种方案都精于某一特定的查询类。索引可以加速对数据库的查

询过程。创建  索引的基本语法如下:

   create index index_name

   on table_name (col_name[(length)],... )

  例:

   mysql> CREATE INDEX number ON guest (number(10));

  7.执行查询


  查询是使用最多的SQL命令。查询数据库需要凭借结构、索引和字段类型等因素。大多数数据库含有一个优化器(optimizer)


,把用户的查  询语句转换成可选的形式,以提高查询效率。

  值得注意的是MySQL不支持SQL92标准的嵌套的where子句,即它只支持一个where子句。其基本语法如下:

   SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]

   [DISTINCT | DISTINCTROW | ALL]

   select_expression,...

   [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]

   [FROM table_references

   [WHERE where_definition]

   [GROUP BY col_name,...]

   [HAVING where_definition]

   [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]

   [LIMIT [offset,] rows]

   [PROCEDURE procedure_name] ]

  其中where从句是定义选择标准的地方,where_definition可以有不同的格式,但都遵循下面的形式:


  字段名操作表达式

  字段名操作字段名

  在第一种形式下,标准把字段的值与表达式进行比较;在第二种形式下,把两个字段的值进行比较。根据所比较的数据类型

,       search_condition中的操作可能选以下几种:


   = 检查是否相等

   != 检查是否不等


   > (或>=) 检查左边值是否大于(或大于等于)右边值

   < (或<=) 检查左边值是否小于(或小于等于)右边值

   [not] between 检查左边值是否在某个范围内

   [not] in 检查左边是否某个特定集的成员

   [not] like 检查左边是否为右边的子串

   is [not] null 检查左边是否为空值

  在这里,可以用通配符_代表任何一个字符,%代表任何字符串。使用关键字、和可以生成复杂的词,它们运行检查时使用 

 布尔表达式的多重标准集。


  例:

   mysql> select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.name;

   mysql> select college, region, seed from tournament

   ORDER BY region, seed;

   mysql> select col_name from tbl_name WHERE col_name > 0;

  8.改变表结构

  在数据库的使用过程中,有时需要改变它的表结构,包括改变字段名,甚至改变不同数据库字段间的关系。可以实现上述改

变的命令是   alter,其基本语法如下:

  alter table table_name alter_spec [, alter_spec ...]

  例:

   mysql> alter table dbname add column userid int(11) not null primary key auto_increment;

  这样,就在表dbname中添加了一个字段userid,类型为int(11)。


  9.修改表中数据

  在使用数据库过程中,往往要修改其表中的数据,比如往表中添加新数据,删除表中原有数据,或对表中原有数据进行更改

。它们的基本  语法如下:

  数据添加:


   insert [into] table_name [(column(s))]

   values (expression(s))

  例:

   mysql>insert into mydatabase values('php','mysql','asp','sqlserver','jsp','oracle');

4

  10. 表的数据更新


  (1) 一次修改一个字段,再次注意语法。文本需要加引号但数字不要。

   mysql>update table01 set field03='new info' where field01=1;

   Query OK, 1 row affected (0.00 sec)

  (2)一次改变多个字段,记住在每一个更新的字段间用逗号隔开。

   mysql>update table01 set field04=19991022, field05=062218 where field01=1;

   Query OK, 1 row affected (0.00 sec)

  (3) 一次更新多个数据

   mysql>update table01 set field05=152901 where field04>19990101;

   Query OK, 3 rows affected (0.00 sec)

  11. 删除数据

   mysql>delete from table01 where field01=3;

   Query OK, 1 row affected (0.00 sec)

  12.导入数据库表

   (1)创建.sql文件

   (2)先产生一个库如auction.c:\mysql\bin>mysqladmin -u root -p creat auction,会提示输入密码,然后成功创建。

   (3)导入auction.sql文件

    c:\mysql\bin>mysql -u root -p auction < auction.sql。

   通过以上操作,就可以创建了一个数据库auction以及其中的一个表auction。

  13.mysql数据库的授权

   mysql>grant select,insert,delete,create,drop

   on *.* (或test.*/user.*/..)

   to 用户名@localhost

   identified by '密码';

  如:新建一个用户帐号以便可以访问数据库,需要进行如下操作:

   mysql> grant usage

   -> ON test.*

   -> TO testuser@localhost;

   Query OK, 0 rows affected (0.15 sec)

  此后就创建了一个新用户叫:testuser,这个用户只能从localhost连接到数据库并可以连接到test 数据库。下一步,我们


必须指定     testuser这个用户可以执行哪些操作:

   mysql> GRANT select, insert, delete,update

   -> ON test.*

   -> TO testuser@localhost;

   Query OK, 0 rows affected (0.00 sec)

  此操作使testuser能够在每一个test数据库中的表执行SELECT,INSERT和DELETE以及UPDATE查询操作。现在我们结束操作并


退出MySQL客户  程序:

   mysql> exit

   Bye

  14.授权 MySQL用户密码

  MySQL数据库的默认用户名为"root"(MS SQL Server 的 sa 相似),密码默认为空。在DOS提示符(注意,不是mysql提示符)


下输入


  c:\mysql\bin>"mysqladmin -u root -p password newpassword

  回车后会提示你输入原来的密码,由于原来密码为空,直接回车,root用户的密码便改为"newpassword"了。



5


四.安装phpMyAdmin


  MySQL图形界面管理器phpMyAdmin是一套以php3 写成,针对MySQL数据库系统的Web管理界面。它可以很方便地以图形化界面


,来对MySQL数据库里的字段、数据进行增加、删除等的动作,更可以做数据库本身的增删管理;phpMyAdmin可以管理整个MySQL


服务器(需要超级用户),也可以管理单个数据库。另外,您也可以通过使用这个图形化界面来学习SQL正确的语法,直至熟练掌


握。那要等到你看过MySQL手册中相关的部分。你可以到http://www.phpwizard.net/phpMyAdmin/ 去




下载最新的版本。


首先,将phpMyAdmin软件包解到一个目录下。

1.修改文档config.inc.php3。

将原来的设定:

$cfgServers[1]['host'] = ''; // MySQL hostname

$cfgServers[1]['port'] = ''; // MySQL port - leave blank for default port

$cfgServers[1]['adv_auth'] = false; // Use advanced authentication?

$cfgServers[1]['stduser'] = ''; // MySQL standard user (only needed with advanced auth)

$cfgServers[1]['stdpass'] = ''; // MySQL standard password (only needed with advanced auth)

$cfgServers[1]['user'] = ''; // MySQL user (only needed withbasic auth)

$cfgServers[1]['password'] = ''; // MySQL password (only needed with basic auth)

$cfgServers[1]['only_db'] = ''; // If set to a db-name, only this db is accessible

$cfgServers[1]['verbose'] = ''; // Verbose name for this host -leave blank to show the hostname

:

:

require("english.inc.php3");




修改成:


$cfgServers[1]['host'] = 'MySQL Server的hostname'; // 填入您的MySQL Server的主机名称


$cfgServers[1]['port'] = ''; // 填入连结 MySQL的


port,不填则以预设的port进行连结


$cfgServers[1]['adv_auth'] = true; // 改成true则进入phpMyAdmin必须先身份认证


$cfgServers[1]['stduser'] = 'root'; // MySQL使用者的帐号


$cfgServers[1]['stdpass'] = '密码'; // MySQL使用者的密码


$cfgServers[1]['user'] = 'root'; // MySQL管理帐号


$cfgServers[1]['password'] = '密码'; // MySQL管理密码


$cfgServers[1]['only_db'] = ''; // 指定管理的资库名称,不填则可以管理整个Server

$cfgServers[1]['verbose'] = ''; // 指定MySQL的名称,不填则使用系统本身的hostname

:

:

require("chinese_gb.inc.php3"); //将语言改成中文


说明:

 (1)因本管理接口,可以以一个接口,管理多个MySQL Server,所以可以在config.inc.php3中找到

  $cfgServers[1]...


  $cfgServers[1]...


  $cfgServers[1]...

   :

  $cfgServers[2]...


  $cfgServers[2]...


  $cfgServers[2]...


  其中[1]代表第一个MySQL Server,[2]代表第二个MySQL Server,您要管理的MySQL Server超过三台以上,您可以依照同样


的述,增加[4].....下去!

  (2)若您的MySQL Server与http Server是同一台,则$cfgServers[1]['host'] =可直接填入localhost。

最后,打开流览器,输入 http://你的网址/phpMyAdmin 之后您会看到一个密码验证的小窗口,输入您的MySQL管理帐号及密码




,即可成功地看到phpMyAdmin的管理画面。通过phpmyadmin,你就可以图形化的、方便的管理你的所有数据库了。


五.小结

  通过以上的学习和操作,终于可以自由操作mysql数据库了,也可以轻车熟路的使用php或者asp调用mysql了。最后,笔者要


特别感谢开发了mysql并且免费贡献的天才以及在网上提供mysql使用说明的大虾们。

用Java+MySQL+PHP轻松构建跨平台的搜索引擎


1  此搜索引擎适于在一个中等规模的局域网中使用,由于找到的网页存在数据库中,不仅可以索静态的HTML页面,可以搜索php、asp等动态页面。对于一个拥有5万个网页的系统(使用PII-400作为服务器),搜索响应时间在2-10秒左右,完全可以满足要求,由于Java、MySQL、PHP都是跨平台的软件,所以此搜索引擎不仅可以工作在Windows服务器上,而且也可以工作在Linux等其他系统中。

  一、建立搜索引擎需要的数据库和数据表。

  首先建立数据库:

  c:\mysql\bin\> mysqladmin -uroot -pmypasswd create Spider

  然后建立数据库中的表结构

  c:\mysql\bin\> mysql -uroot -pmypasswd Spider < Spider.mysql

  其中Spider.mysql为一个文本文件,其内容如下:

CREATE TABLE link (

Id int(10) unsigned NOT NULL auto_increment,

Url varchar(120) NOT NULL,

Class tinyint(3) unsigned NOT NULL default 0 ,

IsSearchLink tinyint(3) unsigned default 0,

PRIMARY KEY (Url),

UNIQUE Id (Id),

KEY Url (Url),

KEY Class (Class)

);

  # 本局域网的初始主页地址,搜索蜘蛛从此网址开始搜索所有其他网页

INSERT INTO link VALUES( '1', 'HTTP://102.211.69.1/', '0', '0');

  # 数据表 webpagelocal 用来存放下载的所有的网页

CREATE TABLE webpagelocal (

Id int(10) unsigned NOT NULL auto_increment,

Url varchar(120) NOT NULL,

Content text NOT NULL,

PRIMARY KEY (Url),

UNIQUE Id (Id),

KEY Url (Url)

);

  # 数据表 webpagefindfast

  # 用MakeFast.php从表webpagelocal中提取512字节的检索信息存放其中

CREATE TABLE webpagefindfast (

Id int(10) unsigned NOT NULL,

Url varchar(120) NOT NULL,

Title varchar(64),

Content blob,

PRIMARY KEY (Url),

KEY Url (Url),

KEY Title (Title)

);

2  二、以下为搜索网页和下载网页至本地数据库的Java程序LinkToDB.java,它也是此搜索引擎的核心和基础

/***************************** LinkToDB.java ***********************************

*

* 对URL中的http链接进行分析,将相对路径转换为绝对路径,排序方式输出结果到数据库

*

* 如果分析得到的URL是Link表中唯一的,就将其内容下载到表 WebPageLocal 中。

*

********************************************************************************

/

import java.io.*;

import java.util.*;

import java.net.*;

import java.lang.String;

import java.sql.*;

import java.text.*;


class Counter {

private int i = 1;

int read() { return i; }

void increment() { i++; }

}


public class LinkToDB {

String UrlHost = "";

String UrlFile = "";

String UrlPath = "";

static String StartWith = null;

boolean outsideTag = true; //判断是否在标记之中

static char[] buffer = new char[4096]; // 缓冲区:用于保存从 URL 读的数据

InputStreamReader read = null;

BufferedReader reader = null;

URLConnection uc = null;

private URL url = null;

private StreamTokenizer st;

private TreeMap counts = new TreeMap();//以排序方式保存找到的链接


LinkToDB(String myurl,String StartOnly){

try {

StartWith = StartOnly;

if(StartOnly!=null) { if(!myurl.startsWith(StartOnly)) return; }//只搜索此网站

url = new URL(myurl);

UrlHost = url.getHost();

UrlHost = UrlHost.toUpperCase();

UrlFile = url.getFile();

int v=UrlFile.lastIndexOf("/");

if(v!=-1) UrlPath = UrlFile.substring(0,v);

System.out.println("分析文件:"+myurl);

int uclength=200000;

int ucError=0;

try{

uc = url.openConnection();

uc.setUseCaches(false);

uc.connect();

}

catch(IOException io) { ucError=1; System.out.println("打不开待分析网页:"+myu

rl); }

if(ucError!=1){

uclength = uc.getContentLength();

if (uclength<200000) {

try{ read = new InputStreamReader(url.openStream()); }

catch(IOException io) {System.out.println("流打开错误:"+myurl);}

}

else System.out.println("文件太大,不分析");

}

if(read!=null){

reader=new BufferedReader(read);

if(reader!=null){

st = new StreamTokenizer(reader);

st.resetSyntax(); // 重置语法表

st.wordChars(0,255); // 令牌范围为全部字符

st.ordinaryChar('<'); // HTML标记两边的分割符

st.ordinaryChar('>');

}

}

}

catch(MalformedURLException e){ System.out.println("Malformed URL String!");}

}

void cleanup() {

try { read.close(); }

catch(IOException e) { System.out.println("流关闭错误"); }

}

void countWords() {

try {

while(st.nextToken()!=StreamTokenizer.TT_EOF) {

String s0="";

String s_NoCase="";

switch(st.ttype) {

case '<': //入标记字段

outsideTag=false;

continue; //countWords();

case '>': //出标记字段

outsideTag=true;

continue; //countWords();

case StreamTokenizer.TT_EOL: s0 = new String("EOL"); break;

case StreamTokenizer.TT_WORD: if(!outsideTag) s0 = st.sval; /*已经是字符

串*/ break;

default: s0 = "";// s0 = String.valueOf((char)st.ttype);/*单一字符*/

}

if(outsideTag) continue;//出了标记区域(<a >)

String s = "";

s_NoCase = s0.trim();

s0=s_NoCase.toUpperCase();

if(s0.startsWith("A ")||s0.startsWith("AREA ")||s0.startsWith("FRAME ")||s0.s

tartsWith("IFRAME ")){ //以这些开始的都是超级链接

int HREF_POS = -1;

if(s0.startsWith("FRAME ")||s0.startsWith("IFRAME ")) {

HREF_POS = s0.indexOf("SRC=");

s0 = s0.substring(HREF_POS+4).trim();

s_NoCase=s_NoCase.substring(HREF_POS+4).trim();

}

else {

HREF_POS=s0.indexOf("HREF=");

s0=s0.substring(HREF_POS+5).trim();

s_NoCase=s_NoCase.substring(HREF_POS+5).trim();

}

if(HREF_POS!=-1) {

if(s0.startsWith("\""))

{s0=s0.substring(1);s_NoCase=s_NoCase.substring(1);}

int QUOTE=s0.indexOf("\"");

if(QUOTE!=-1)

{s0=s0.substring(0,QUOTE).trim();s_NoCase=s_NoCase.substring(0,QUOTE).trim

();}

int SPACE=s0.indexOf(" ");

if(SPACE!=-1)

{s0=s0.substring(0,SPACE).trim();s_NoCase=s_NoCase.substring(0,SPACE).trim

();}

if(s0.endsWith("\""))

{s0=s0.substring(0,s0.length()-1);s_NoCase=s_NoCase.substring(0,s_NoCase.l

ength()-1);}

if(s0.indexOf("'")!=-1||s0.indexOf("JAVASCRIPT:")!=-1||s0.indexOf("..")!=-1

)

{s0="";s_NoCase="";} //有这些符号,认为非合法链接;两点表示上一目录,而我

只想向下级查找

if ( !s0.startsWith("FTP://") &&//以下后缀或前缀通常非网页格式

!s0.startsWith("FTP://") &&

!s0.startsWith("MAILTO:") &&

!s0.endsWith(".SWF") &&

!s0.startsWith("../")) //因../表示上一目录,通常只需考虑本级和下N级目录

s=s0;

if (!s.startsWith("HTTP://")&&!s.equals("")) {s=UrlHost+UrlPath+"/"+s;s_No

Case=UrlHost+UrlPath+"/"+s_NoCase;}

else if(s.startsWith("/")) {s=UrlHost+s;s_NoCase=UrlHost+s_NoCase;}

if(s.startsWith("HTTP://")) {s=s.substring(7);s_NoCase=s_NoCase.substring(

7);}

int JinHao=s.indexOf("#"); //如果含有"#"号,表示有效的链接是此前的部分

if(JinHao!=-1) {s=s.substring(0,JinHao).trim();s_NoCase=s_NoCase.substring(

0,JinHao).trim();}

int H=-1; //以下将/./转换为/

for(int m=0;m<4;m++){

H=s.indexOf("/./");

if(H!=-1) {s=s.substring(0,H)+s.substring(H+2);s_NoCase=s_NoCase.substring

(0,H)+s_NoCase.substring(H+2);}

}

int TwoXG=-1; //以下将//转换为/

for(int m=0;m<5;m++){

TwoXG=s.indexOf("//");

if(TwoXG!=-1) {s=s.substring(0,TwoXG)+s.substring(TwoXG+1);s_NoCase=s_NoCa

se.substring(0,TwoXG)+s_NoCase.substring(TwoXG+1);}

}

int OneXG=s.indexOf("/");

if(OneXG==-1) {s=s+"/";s_NoCase+="/";} //将xx.xx.xx.xxx转换为xx.xx.xx.xxx/的

标准形式

if (!s.startsWith("HTTP://")) {s="HTTP://"+s;s_NoCase="HTTP://"+s_NoCase;}

}

}

if(counts.containsKey(s_NoCase)) ((Counter)counts.get(s_NoCase)).increment();

else counts.put(s_NoCase,new Counter());

}

} catch(IOException e) {

System.out.println("st.nextToken() unsuccessful");

}

}

Collection values() { return counts.values(); }

Set keySet() { return counts.keySet(); }

Counter getCounter(String s) { return (Counter)counts.get(s); }


public static void main(String[] argv) throws FileNotFoundException {

try{

Class.forName("org.gjt.mm.mysql.Driver").newInstance();

}

catch (Exception E) {

System.out.println("加载Jdbc驱动程序失败");

E.printStackTrace();

}

try{

Connection conn = DriverManager.getConnection(

"jdbc:mysql://localhost/Spider?user=root&password=mypassword");

Statement stmt = conn.createStatement();

String myurl;

for(int i=1;i<=6;i++){

String query = "SELECT Url FROM link WHERE IsSearchLink=0 and Class="+(i-1)+"

ORDER BY Url";

ResultSet rs = stmt.executeQuery(query);

while (rs.next()) {

myurl = rs.getString("Url");

String StartOnly = null;

if(argv.length>0) StartOnly=argv[0];

LinkToDB wc = new LinkToDB(myurl,StartOnly);

if(wc.reader!=null){

stmt.executeUpdate("UPDATE Link SET IsSearchLink=1 WHERE Class="+(i-1)+" a

nd Url='"+myurl+"'");

wc.countWords();

Iterator keys = wc.keySet().iterator();

while(keys.hasNext()) {

String key = (String)keys.next();

System.out.println("分析找到链接:"+key + ": "+ wc.getCounter(key).read());

int ErrorDB=0;

if(StartWith==null||(StartWith!=null&&key.startsWith(StartWith))){

try{//-------------------------- 找到的链接插入数据库link -----------------

--

stmt.executeUpdate("INSERT INTO Link(Id,Url,Class) VALUES(0,'"+key+"',"+

i+")");

}

catch(SQLException ex){

ErrorDB=1;

System.out.println("插入数据错 SQLException: " + ex.getMessage())

;

}

if(ErrorDB!=1){ //链接不重复就下载网页到WebPageLocal

System.out.println("下载网页:"+key);

int length; // 读的字符数

int filelength=200000;

InputStreamReader read=null;

URL rurl=null;

URLConnection urlc=null;

String Content="";

try{ rurl = new URL(key); }

catch(MalformedURLException mu) {

System.out.println("打开下载网页出错:"+mu.getMessage());

}

if(rurl!=null){

int ucError=0;

try{ urlc = rurl.openConnection(); urlc.connect();}

catch(IOException io) { ucError=1; System.out.println("下载网页打不开:"+ke

y); }

if(ucError==0){

try{

filelength=urlc.getContentLength();

if (filelength>=200000) System.out.println("网页太大,我不下载了。"+key);

else read = new InputStreamReader(rurl.openStream());

}

catch(IOException io) {System.out.println("下载网页打不开:"+key);}

}

// 读入 URL 并写入数据库

if(read!=null&&filelength<200000){

try{

while((length = read.read(buffer)) != -1) {

String s = new String(buffer, 0, length);

Content=Content+s;

}

}

catch(IOException io) {

Content="";

System.out.println("不能读入URL文件");

}

try{

Statement stmt2 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, Res

ultSet.CONCUR_UPDATABLE);

ResultSet uprs = stmt2.executeQuery("SELECT Id,Url,Content FROM WebPageLoca

l WHERE 0");//WHERE 0很重要,否则会耗尽内存

uprs.moveToInsertRow();

uprs.updateInt("Id",0);

uprs.updateString("Url",key);

uprs.updateString("Content",Content);

uprs.insertRow();

uprs.beforeFirst();

uprs.close();

stmt2.close();

}

catch(SQLException ex){

System.out.println("插入数据错:" + ex.getMessage());

}

}//if(read!=null&&filelength<200000)

}//

}

}

//------------------------------- 下载网页 ----------------------------------

}//while(keys.hasNext())

wc.cleanup();

}//if(wc.reader!=null)

}//while rs.next

rs.close(); //关闭记录结果

}//end for

stmt.close(); //关闭语句

conn.close(); //关闭连接

}//try

catch(SQLException ex){ System.out.println("SQL异常:" + ex.getMessage()); }

}//main()函数结束

}//类 LinkToDB 结束


  三、编译和运行此Java程序


d:\Spider\> set CLASSPATH=d:\j\mm.mysql.jdbc2;

d:\Spider\> d:\j\bin\javac LinkToDB.java

d:\Spider\> d:\j\bin\java LinkToDB

  其中第一行命令是设置MySQL的JDBC驱动程序路径。


3

  四、由于网页中含有大量的无用的格式信息,直接用它来搜索要浪费大量的时间,所以需要掉其中的HTML格式控制信息,并将太长的网页截短,然后将整理后的用于搜索的信息存到另一个数据表中。由于PHP4中有一个很方便的函数strip_tags可以去掉其中的HTML格式标记,所以我们用PHP来整理。


  MakeFast.php的内容如下:

<?php

mysql_connect("localhost","root","mypassword");

$result = mysql_db_query("Spider","select Id,Url,Content from WebPageLocal whe

re Id>$n1 and Id<$n2");

while($mt = mysql_fetch_array($result)){

$Title = "";

$Body = "";

$mt2 = strtoupper($mt[2]);

$PosTitleL = strpos($mt2,"<TITLE>");

$PosTitleR = strpos($mt2,"</TITLE>");

$PosBody = strpos($mt2,"<BODY");

$PosHeadR = strpos($mt2,"</HEAD>");

if($PosTitleL&&$PosTitleR) $Title = substr($mt[2],$PosTitleL+7,$PosTitl

eR-$PosTitleL-7);

$Title = eregi_replace("'","’",$Title);

if($PosBody) $Body = substr($mt[2],$PosBody);

else if($PosHeadR) $Body = substr($mt[2],$PosHeadR+7);

else if($PosTitleR) $Body = substr($mt[2],$PosTitleR+8);

else if($PosTitleL) $Body = substr($mt[2],$PosTitleL);

else $Body = $mt[2];

$BodyText = strip_tags($Body);

$BodyNoSpace = eregi_replace(" ","",$BodyText);

$BodyNoQuote = eregi_replace("'","",$BodyNoSpace);

$Body512 = substr($BodyNoQuote,0,511)." ";

$Id = $mt[0];

$Url = $mt[1];

$sql="Insert Into WebPageFindFast(Id,Url,Title,Content)

VALUES($Id,'$Url','$Title','$Body512')";

mysql_db_query("Spider",$sql) or die($sql);

echo $Id." ";

}

?>

  使用方式:

  在浏览器中输入http://mywebsite/Spider/MakeFast.php?n1=1&n2=10000

4  五、以上是建立搜索引擎所用到的数据,下面编制用于用户搜索的网页和PHP脚本文件。首先是用于搜索的表单页面SearchForm.htm,其内容如下。

<html>

<head>

<title>红蜘蛛搜索引擎-V0.1</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<link rel="stylesheet" href="../All.css" type="text/css">

</head>


<body bgcolor="#eeffee" text="#000000">

<table width="600" border="0" cellspacing="2" cellpadding="2" align="center" bgc

olor="#99CC00">

<tr>

<td>

<div align="center"><font color="#FF0000"><b><span class="pt16">红蜘蛛搜索

引擎</span>

<span class="pt12">V0.1</span></b></font></div>

</td>

</tr>

</table>

<form name="form1" method="post" action="Search.php">


<table width="600" border="1" cellspacing="1" cellpadding="1" align="center" b

ordercolor="#99CC00">

<tr>

<td>

<div align="left"><span class="pt15"><font color="#FF0000"><b>关 键 字</

b>:</font></span>

<input type="text" name="KeyWords" size="40" maxlength="40">

</div>

</td>

<td>

<div align="left"><span class="pt15"><font color="#FF0000"><b>查找范围</

b>:</font></span>

<select name="SearchIn">

<option value="Content" selected>网页正文</option>

<option value="Title">网页标题</option>

</select>

</div>

</td>

</tr>

<tr>

<td colspan="2"><span class="pt15"><font color="#FF0000"><b>查找方式</b>:

</font></span>

<select name="Speed">

<option value="Fast" selected>快速查找</option>

<option value="Slow">更深查找</option>

</select>

</td>

</tr>

<tr>

<td colspan="2">

<div align="left">

<input type="submit" name="Submit" value="搜索">

</div>

</td>

</tr>

</table>

</form>

<table width="600" border="0" cellspacing="2" cellpadding="2" align="center">

<tr>

<td height="18">

<p class="pt12"><font color="#FF0000"><b>使用方法</b></font>:仅需在关键字

一栏输入查询内容并按回车键(Enter)即可。

</p>

<blockquote>

<p align="left" class="pt12">如果希望输入多个条件,只需要用空格分隔即可:

</p>

<p class="pt12">例如:要查询同时包含“西昌”和“卫星”的网页,只需输入[西

昌 卫星]。</p>

<p class="pt12">又如:要查询只包含关键字“西昌”而不包含“卫星”的网页,

只需要输入[西昌 -卫星]。注意中间的空格不能少。</p>

</blockquote>

<p class="pt12"><font color="#FF0000"><b>查找范围</b></font>:你可以选择从

“网页标题”中查找或者从“网页正文”中查找。</p>

<p class="pt12"><font color="#FF0000"><b>查找方式</b></font>:“快速查找”

速度快但找到的网页数可能较少,因为:</p>

<blockquote>

<p class="pt12">“快速查找”只搜索网页正文的前512个字符。</p>

<p class="pt12">“更深查找”搜索网页正文的前2048个字符。</p>

<div align="right"><a href="mailto:zdyhlp@263.net"><font color="#FF0000" class="pt13"><b>欢迎

提出宝贵意见</b></font></a></div>

</blockquote>

</td>

</tr>

</table>

</body>

</html>

  search.php根据用户输入的条件,完成搜索,显示找到的网页的链接地址、标题和提要信息

。内容如下:

<TITLE>红蜘蛛正在搜索关键词为[<?php echo $KeyWords?>]的网页</TITLE>

<link rel="stylesheet" href="../All.css" type="text/css">

<body bgcolor="#eeffee">

<table width="96%" border="0" cellspacing="2" cellpadding="2" align="center" bgc

olor="#99CC00">

<tr>

<td>

<div align="center"><font color="#FF0000"><b><span class="pt16">红蜘蛛搜索

引擎</span>

<span class="pt12">V0.1</span></b></font></div>

</td>

</tr>

</table>

<form name="form1" method="post" action="Search.php">

<table width="96%" border="1" cellspacing="1" cellpadding="1" align="center" b

ordercolor="#99CC00">

<tr>

<td valign="top"> <font color="#FF0000"><b><span class="pt13">关键字</span

></b><span class="pt13">:</span></font>

<input type="text" name="KeyWords" value="<?php echo $KeyWords?>" size="

30" maxlength="30">

<input type="submit" name="Submit" value="重新搜索">

</td>

<td valign="top"><font color="#FF0000"><b><span class="pt13">查找范围</spa

n></b><span class="pt13">:</span></font>

<select name="SearchIn">

<option value="Content" <?php if ($SearchIn=="Content") echo "selected

";?>>网页正文</option>

<option value="Title" <?php if ($SearchIn=="Title") echo "selected

";?>>网页标题</option>

</select>

</td>

<td valign="top">

<div align="left"><font color="#FF0000"><b><span class="pt13">查找方式</

span></b><span class="pt13">:</span></font>

<select name="Speed">

<option value="Fast" <?php if ($Speed=="Fast") echo "selected";?>>快

速查找</option>

<option value="Slow" <?php if ($Speed=="Slow") echo "selected";?>>更

深查找</option>

</select>

</div>

</td>

</tr>

</table>

</form>

<?php

if($SearchIn=="Title") $SQL="SELECT Id,Url,Title,Content FROM WebPageFindFast

WHERE ";

else $SQL="SELECT Id,Url,Title,Content FROM WebPageFind$Speed WHERE ";

$KeyWords=str_replace(" ", " ", $KeyWords);

if($KeyWords=="") {echo "关键字不能为空"; exit();}

$tok = strtok($KeyWords," ");

$i=0;

$j=0;

while($tok) {

$i++;

$tok = strtok(" ");

}

$key = strtok($KeyWords," ");

while($key) {

$j++;

if(substr($key,0,1)!="-") {

$SQL=$SQL.$SearchIn." LIKE '%".$key."%' ";

$Words[]=$key;

}

else {

$SQL=$SQL.$SearchIn." NOT LIKE '%".substr($key,1)."%' ";

}

if($j<$i) $SQL.=" AND ";

$key = strtok(" ");

}

if($CurPos!="") $SQL.=" AND Id>=$CurPos ";

$SQL.=" LIMIT 100";

//echo "\$SQL=".$SQL."<br>";

mysql_connect("localhost","root","mypassword");

$result=mysql_db_query("Spider",$SQL);

$RowCount=mysql_num_rows($result);

$FindCount=0;

?>

<table border=0 align=center width="96%">

<tr>

<th nowrap width="41%">

<div align="left" class="pt12">共找到关键字为 <font color=red>

<?php echo $KeyWords?>

</font> 的网页共 <font color=red>

<?php echo $RowCount;?>

</font> 个</div>

</th>

<td nowrap>

</td>

</tr>

<tr bgcolor="#FF0000">

<th nowrap colspan="2" height="3"></th>

</tr>

<?php while($row= mysql_fetch_array($result)){

$Pos=$row[0];

$FindCount++;

if($FindCount>20) break;?>

<tr>

<td nowrap colspan="2">

<?php echo $FindCount;?>

<a href="<?php echo $row[1]?>" target=_black>

<?php if($row[2]!="") echo $row[2];

else echo substr($row[3],0,64);

?>

</a></td>

</tr>

<tr>

<td colspan="2" ><span class="pt13">摘要:</span>

<?php

if($SearchIn=="Title") {

$ZhaiYao=substr($row[3],0,1024);

}

else{

if($Speed=="Fast") $ZhaiYao=$row[3];

else{

$RowLen=strlen($row[3]);

if ($RowLen<1024) {

$ZhaiYao=$row[3];

}

else {

$CutPos=0;

$PosWord1=strpos($row[3],$Words[0]);

if($PosWord1-512<0) $ZhaiYao=substr($row[3],0,1024);

else {

for($i=24;$i<500;$i++){ //避免将中文字符从半个字处截断,选择从英文处截断

if(ord(substr($row[3],$PosWord1-$i,1))<128) {$CutPos=$i;break;}

}

$ZhaiYao=substr($row[3],$PosWord1-$CutPos,1024);

}

}

}

for($i=0;$i<count($Words);$i++){

$ZhaiYao=str_replace($Words[$i],"<font color=red>".$Words[$i]."</font>", $ZhaiY

ao);

}

}

echo $ZhaiYao;

?>

</td>

</tr>

<tr>

<td colspan="2" align="right"><a href="One.php?num=<?php echo $row[0]?>" tar

get=_black>

<font color="#0033FF" class="pt12">本地镜像</font></a></td>

</tr>

<tr bgcolor="#999933">

<td nowrap colspan="2" height="1"></td>

</tr>

<?php } ?>

<?php if($RowCount>20){ ?>

<tr>

<td align="right" colspan="2" height="10">

<form name="form2" method="post" action="Search.php">

<input type="hidden" name="KeyWords" value="<?php echo $KeyWords;?>">

<input type="hidden" name="SearchIn" value="<?php echo $SearchIn;?>">

<input type="hidden" name="Speed" value="<?php echo $Speed;?>">

<input type="hidden" name="CurPos" value="<?php echo $Pos;?>">

<input type="submit" name="Submit" value="下20个网页">

</form>

</td>

</tr>

<?php } ?>

</table>

  One.php用于从本地镜像中显示一个找到的网页。由于网页的原始信息已经在WebPageLocal中存储,所以

只需简单的读出,发给用户。


<?php

 mysql_connect("localhost","root","mypassword");

 $sql="select Url,Content from WebPageLocal where ";

 if($num!="") $sql=$sql."Id=$num";

 else exit();

 $result=mysql_db_query("Spider",$sql);

 $mt=mysql_fetch_row($result);

 echo $mt[1];

?>


Eclipse+JBoss+MySQL开发环境设置


J2EE是很好的。作为开发环境,如果采用经典配置:JBuilder+Weblogic+Oracle,自是得心应手,但价格是惊人的。此配置主要是针对大型或超大型应用,硬件要求也很高,针对国内以中小型应用为主的现况,不作推荐。


  虽然国内开发者早已习惯了D版,但笔者以为还是防患于未然,应尽早加入OpenSource行列,促进国内软件业的发展。

  本文所推荐的Eclipse、JBoss、MySQL均是名气很高的开源软件,并且非常实用。


  1、JDK:到http://java.sun.com下载,推荐使用J2SDK1.4.X


  2、JBoss:到http://www.jboss.org下载,笔者使用jboss-3.0.4_tomcat-4.0.6


  3、MySQL:到http://www.mysql.com下载,笔者使用mysql-4.0.13,另须下载MySQL Control Center(图形化管理工具),到http://sourceforge.net/projects/mmmysql/下载MySQL的JDBC驱动程序,如mm.mysql-2.0.14-you-must-unjar-me.jar


  4、Eclipse:到http://www.eclipse.org下载,最新版本为3.0M8,如果是新手推荐下载2.1.2和语言包(2.1.2_Translations)。到http://www.objectlearn.com/下载lomboz(此插件开发J2EE必需),需要注意的是lomboz的版本必须与eclipse版本一致,否则不正常。


  环境设置(以win2000下D盘作根目录为例):


  1、JDK的安装配置在此不再说明。


  2、将JBoss解压到D:\,将MySQL的JDBC驱程包中的mm.mysql-2.0.14-bin.jar解压到D:\jboss-3.0.4_tomcat-4.0.6\server\default\lib中,再将D:\jboss-3.0.4_tomcat-4.0.6\docs\examples\jca目录下的mysql-service.xml拷贝到D:\jboss-3.0.4_tomcat-4.0.6\server\default\deploy目录下,找到相应段落并作如下修改:


<attribute name="JndiName">MySqlDS</attribute>


<attribute name="ManagedConnectionFactoryProperties">

<properties>

<config-property name="ConnectionURL" type="java.lang.String">jdbc:mysql://localhost:3306/test</config-property>

<config-property name="DriverClass" type="java.lang.String">org.gjt.mm.mysql.Driver</config-property>

<!--set these only if you want only default logins, not through JAAS -->

<config-property name="UserName" type="java.lang.String">root</config-property>

<config-property name="Password" type="java.lang.String"></config-property>

</properties>


</attribute>


  3、安装MySQL和MySQL Control Center,到mysql\bin目录中启动mysqld-nt.exe,即开启mysql服务。使用MySQL Control Center很方便地进行管理(类似SQL Server)。


  4、将Eclipse(以3.0M8为例)解压到D:\,再将lomboz包中plugins目录中的内容解压到D:\Eclipse\plugins中,启动eclipse。(1)window--preferences--lomboz,设置JDK Tools.jar,Server Definitions--Server types:JBoss 3.0--Application Server Directory:D:/jboss-3.0.4_tomcat-4.0.6;Classpath Variable:D:/jboss-3.0.4_tomcat-4.0.6(2)window--Customize Perspective--Shortcuts--New--Java,勾选lomboz J2EE Wizards。














MySQL数据库SQL语法参考




一、资料定义 ddl(data definition language)


  资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。


  1、建表格:


create table table_name(

column1 datatype [not null] [not null primary key],

column2 datatype [not null],

...);


  说明: 


datatype --是资料的格式,详见表。

nut null --可不可以允许资料有空的(尚未有资料填入)。

primary key --是本表的主键。


  2、更改表格 


alter table table_name

add column column_name datatype


  说明:增加一个栏位(没有删除某个栏位的语法。


alter table table_name

add primary key (column_name)


  说明:更改表得的定义把某个栏位设为主键。


alter table table_name

drop primary key (column_name)


  说明:把主键的定义删除。


  3、建立索引 


create index index_name on table_name (column_name)


  说明:对某个表格的栏位建立索引以增加查询时的速度。


  4、删除 


drop table_name

drop index_name


  二、资料操作 dml (data manipulation language)


  资料定义好之後接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法:


  1、增加资料:


insert into table_name (column1,column2,...)

values ( value1,value2, ...)


  说明:


  1.若没有指定column 系统则会按表格内的栏位顺序填入资料。


  2.栏位的资料形态和所填入的资料必须吻合。


  3.table_name 也可以是景观 view_name。


insert into table_name (column1,column2,...)

select columnx,columny,... from another_table


  说明:也可以经过一个子查询(subquery)把别的表格的资料填入。


  2、查询资料:


  基本查询


select column1,columns2,...

from table_name


  说明:把table_name 的特定栏位资料全部列出来


select *

from table_name

where column1 = xxx

[and column2 > yyy] [or column3 <> zzz]


  说明:


  1.'*'表示全部的栏位都列出来。


  2.where 之後是接条件式,把符合条件的资料列出来。


select column1,column2

from table_name

order by column2 [desc]


  说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大


  排列


  组合查询


  组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。


select *

from table1,table2

where table1.colum1=table2.column1


  说明:


  1.查询两个表格中其中 column1 值相同的资料。


  2.当然两个表格相互比较的栏位,其资料形态必须相同。


  3.一个复杂的查询其动用到的表格可能会很多个。


  整合性的查询:


select count (*)

from table_name

where column_name = xxx


  说明:


  查询符合条件的资料共有几笔。


select sum(column1)

from table_name


  说明:


  1.计算出总和,所选的栏位必须是可数的数字形态。


  2.除此以外还有 avg() 是计算平均、max()、min()计算最大最小值的整合性查询。


select column1,avg(column2)

from table_name

group by column1

having avg(column2) > xxx


  说明:


  1.group by: 以column1 为一组计算 column2 的平均值必须和 avg、sum等整合性查询的关键字一起使用。


  2.having : 必须和 group by 一起使用作为整合性的限制。


  复合性的查询


select *

from table_name1

where exists (

select *

from table_name2

where conditions )


  说明:


  1.where 的 conditions 可以是另外一个的 query。


  2.exists 在此是指存在与否。


select *

from table_name1

where column1 in (

select column1

from table_name2

where conditions )


  说明: 


  1. in 後面接的是一个集合,表示column1 存在集合里面。


  2. select 出来的资料形态必须符合 column1。


  其他查询


select *

from table_name1

where column1 like 'x%'


  说明:like 必须和後面的'x%' 相呼应表示以 x为开头的字串。


select *

from table_name1

where column1 in ('xxx','yyy',..)


  说明:in 後面接的是一个集合,表示column1 存在集合里面。


select *

from table_name1

where column1 between xx and yy


  说明:between 表示 column1 的值介於 xx 和 yy 之间。


  3、更改资料:


update table_name

set column1='xxx'

where conditoins


  说明:


  1.更改某个栏位设定其值为'xxx'。


  2.conditions 是所要符合的条件、若没有 where 则整个 table 的那个栏位都会全部被更改。


  4、删除资料:


delete from table_name

where conditions


  说明:删除符合条件的资料。


  说明:关于where条件后面如果包含有日期的比较,不同数据库有不同的表达式。具体如下:


  (1)如果是access数据库,则为:where mydate>#2000-01-01#


  (2)如果是oracle数据库,则为:where mydate>cast('2000-01-01' as date) 或:where mydate>to_date('2000-01-01','yyyy-mm-dd')

在delphi中写成:


thedate='2000-01-01';

query1.sql.add('select * from abc where mydate>cast('+''''+thedate+''''+' as date)');


  如果比较日期时间型,则为:


where mydatetime>to_date('2000-01-01 10:00:01','yyyy-mm-dd hh24:mi:ss');




分享