标题: MySQL入门学习指南 zt
蓝色虫
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 17077
精华 8
积分 1729
帖子 3270
活跃指数 938
LU金币 3923 个
LU金条 82 个
阅读权限 210
注册 2004-4-4
来自 战国-赵都
 
发表于 2007-1-2 14:58  资料  个人空间  短消息  加为好友 
MySQL入门学习指南 zt

  第一篇入门

  4、第一条命令
mysql> select version(),current_date();
+----------------+-----------------+
| version() | current_date() |
+----------------+-----------------+
| 3.23.25a-debug | 2001-05-17 |
+----------------+-----------------+
1 row in set (0.01 sec)
mysql>


  此命令要求mysql服务器告诉你它的版本号和当前日期。尝试用不同大小写操作上述命令,看结果如何。

  结果说明mysql命令的大小写结果是一致的。

  练习如下操作:
mysql>Select (20+5)*4;
mysql>Select (20+5)*4,sin(pi()/3);
mysql>Select (20+5)*4 AS Result,sin(pi()/3); (AS: 指定假名为Result)


  · 5、多行语句

  一条命令可以分成多行输入,直到出现分号“;”为止:
mysql> select
-> USER()
-> ,
-> now()
->;
+--------------------+---------------------+
| USER() | now() |
+--------------------+---------------------+
| ODBC@localhost | 2001-05-17 22:59:15 |
+--------------------+---------------------+
1 row in set (0.06 sec)
mysql>


  注意中间的逗号和最后的分号的使用方法。

  · 6、一行多命令

  输入如下命令:

mysql> SELECT USER(); SELECT NOW();
+------------------+
| USER() |
+------------------+
| ODBC@localhost |
+------------------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2001-05-17 23:06:15 |
+---------------------+
1 row in set (0.00 sec)
mysql>


  注意中间的分号,命令之间用分号隔开。

  · 7、显示当前存在的数据库
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 row in set (0.06 sec)
mysql>


  · 8、选择数据库并显示当前选择的数据库
mysql> USE mysql
Database changed
mysql>
(USE 和 QUIT 命令不需要分号结束。)
mysql> select database();
+---------------+
| database() |
+---------------+
| mysql |
+---------------+
1 row in set (0.00 sec)


  · 9、显示当前数据库中存在的表
mysql> SHOW TABLES;


  · 10、显示表(db)的内容
mysql>select * from db;


  · 11、命令的取消

  当命令输入错误而又无法改变(多行语句情形)时,只要在分号出现前就可以用 c来取消该条命令

  MySQL入门学习(3)

  · 学习篇

  了解了一些最基本的操作命令后,我们再来学习如何创建一个数据库和数据库表。

  · 1、使用SHOW语句找出在服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
3 rows in set (0.00 sec)


  · 2、创建一个数据库abccs
mysql> CREATE DATABASE abccs;


  注意不同操作系统对大小写的敏感。

  · 3、选择你所创建的数据库
mysql> USE abccs
Database changed


  此时你已经进入你刚才所建立的数据库abccs.

  · 4、 创建一个数据库表

  首先看现在你的数据库中存在什么表:
mysql> SHOW TABLES;
Empty set (0.00 sec)


  说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable:

  我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。
mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1),
-> birth DATE, birthaddr VARCHAR(20));
Query OK, 0 rows affected (0.00 sec)


  由于name、birthadd的列值是变化的,因此选择VARCHAR,其长度不一定是20。可以选择从

  1到255的任何长度,如果以后需要改变它的字长,可以使用ALTER TABLE语句。);

  性别只需一个字符就可以表示:"m"或"f",因此选用CHAR(1);

  birth列则使用DATE数据类型。

  创建了一个表后,我们可以看看刚才做的结果,用SHOW TABLES显示数据库中有哪些表:
mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| mytables |
+---------------------+

  · 5、显示表的结构:
mysql> DESCRIBE mytable;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| birth | date | YES | | NULL | |
| deathaddr | varchar(20) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)


  · 6、 往表中加入记录

  我们先用SELECT命令来查看表中的数据:
mysql> select * from mytable;
Empty set (0.00 sec)


  这说明刚才创建的表还没有记录。

  加入一条新记录:
mysql> insert into mytable
-> values (´abccs´,´f´,´1977-07-07´,´china´);
Query OK, 1 row affected (0.05 sec)


  再用上面的SELECT命令看看发生了什么变化。

  我们可以按此方法一条一条地将所有员工的记录加入到表中。

  · 7、用文本方式将数据装入一个数据库表

  如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。

  创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在

  CREATE TABLE语句中列出的列次序给出,例如:
abccs f 1977-07-07 china  
mary f 1978-12-12 usa
tom m 1970-09-02 usa


  使用下面命令将文本文件“mytable.txt”装载到mytable表中:
mysql> LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet;


  再使用如下命令看看是否已将数据输入到数据库表中:
mysql> select * from mytable;

  --多表操作

  前面我们熟悉了数据库和数据库表的基本操作,现在我们再来看看如何操作多个表。

  在一个数据库中,可能存在多个表,这些表都是相互关联的。我们继续使用前面的例子。前面建立的表中包含了员工的一些基本信息,如姓名、性别、出生日期、出生地。我们再创建一个表,该表用于描述员工所发表的文章,内容包括作者姓名、文章标题、发表日期。

  1、查看第一个表mytable的内容:
mysql> select * from mytable;
+----------+------+------------+-----------+
| name   | sex | birth   | birthaddr |
+----------+------+------------+-----------+
| abccs  |f   | 1977-07-07 | china   |
| mary   |f   | 1978-12-12 | usa    |
| tom   |m   | 1970-09-02 | usa    |
+----------+------+------------+-----------+


  2、创建第二个表title(包括作者、文章标题、发表日期):
mysql> create table title(writer varchar(20) not null,
  -> title varchar(40) not null,
  -> senddate date);


  向该表中填加记录,最后表的内容如下:
mysql> select * from title;
+--------+-------+------------+
| writer | title | senddate  |
+--------+-------+------------+
| abccs | a1  | 2000-01-23 |
| mary  | b1  | 1998-03-21 |
| abccs | a2  | 2000-12-04 |
| tom  | c1  | 1992-05-16 |
| tom  | c2  | 1999-12-12 |
+--------+-------+------------+
5 rows in set (0.00sec)

 3、多表查询

  现在我们有了两个表: mytable 和 title。利用这两个表我们可以进行组合查询:

  例如我们要查询作者abccs的姓名、性别、文章:
mysql> SELECT name,sex,title FROM mytable,title
  -> WHERE name=writer AND name='abccs';
+-------+------+-------+
| name | sex | title |
+-------+------+-------+
| abccs | f  | a1  |
| abccs | f  | a2  |
+-------+------+-------+


  上面例子中,由于作者姓名、性别、文章记录在两个不同表内,因此必须使用组合来进行查询。必须要指定一个表中的记录如何与其它表中的记录进行匹配。

  注意:如果第二个表title中的writer列也取名为name(与mytable表中的name列相同)而不是writer时,就必须用mytable.name和title.name表示,以示区别。

  再举一个例子,用于查询文章a2的作者、出生地和出生日期:
mysql> select title,writer,birthaddr,birth from mytable,title
  -> where mytable.name=title.writer and title='a2';
+-------+--------+-----------+------------+
| title | writer | birthaddr | birth   |
+-------+--------+-----------+------------+
| a2  | abccs | china   | 1977-07-07 |
+-------+--------+-----------+------------+


  --修改和备份、批处理

  有时我们要对数据库表和数据库进行修改和删除,可以用如下方法实现:

  1、增加一列:

  如在前面例子中的mytable表中增加一列表示是否单身single:
mysql> alter table mytable add column single char(1);


  2、修改记录

  将abccs的single记录修改为“y”:
mysql> update mytable set single='y' where name='abccs';


  现在来看看发生了什么:
mysql> select * from mytable;
+----------+------+------------+-----------+--------+
| name   | sex | birth   | birthaddr | single |
+----------+------+------------+-----------+--------+
| abccs  |f   | 1977-07-07 | china   | y   |
| mary   |f   | 1978-12-12 | usa    | NULL  |
| tom   |m   | 1970-09-02 | usa    | NULL  |
+----------+------+------------+-----------+--------+

  3、增加记录

  前面已经讲过如何增加一条记录,为便于查看,重复与此:
mysql> insert into mytable
  -> values ('abc','f','1966-08-17','china','n');
Query OK, 1 row affected (0.05 sec)


  查看一下:
mysql> select * from mytable;
+----------+------+------------+-----------+--------+
| name   | sex | birth   | birthaddr | single |
+----------+------+------------+-----------+--------+
| abccs  |f   | 1977-07-07 | china   | y   |
| mary   |f   | 1978-12-12 | usa    | NULL  |
| tom   |m   | 1970-09-02 | usa    | NULL  |
| abc   |f   | 1966-08-17 | china   | n   |
+----------+------+------------+-----------+--------+


  3、删除记录

  用如下命令删除表中的一条记录:
mysql> delete from mytable where name='abc';


  DELETE从表中删除满足由where给出的条件的一条记录。

  再显示一下结果:
mysql> select * from mytable;
+----------+------+------------+-----------+--------+
| name   | sex | birth   | birthaddr | single |
+----------+------+------------+-----------+--------+
| abccs  |f   | 1977-07-07 | china   | y   |
| mary   |f   | 1978-12-12 | usa    | NULL  |
| tom   |m   | 1970-09-02 | usa    | NULL  |
+----------+------+------------+-----------+--------+


  4、删除表:
mysql> drop table ****(表1的名字),***表2的名字;


  可以删除一个或多个表,小心使用。

  5、数据库的删除:
mysql> drop database 数据库名;

  小心使用。

  6、数据库的备份:

  退回到DOS:
mysql> quit
d:mysqlbin


  使用如下命令对数据库abccs进行备份:
mysqldump --opt abccs>abccs.dbb


  abccs.dbb就是你的数据库abccs的备份文件。

  7、用批处理方式使用MySQL:

  首先建立一个批处理文件mytest.sql,内容如下:
use abccs;
select * from mytable;
select name,sex from mytable where name='abccs';


  在DOS下运行如下命令:
d:mysqlbin mysql < mytest.sql


  在屏幕上会显示执行结果。

  如果想看结果,而输出结果很多,则可以用这样的命令:
mysql < mytest.sql | more


  我们还可以将结果输出到一个文件中:
mysql < mytest.sql > mytest.out





公司信息化管理方案[点击这里]
客户关系管理方案[点击这里]
OA、产品项目解决方案[点击这里]
教育机构远程培训管理方案[点击这里]
企业项目管理方案演示[点击这里]

移动飞信群号——4121165
新论坛:http://e-office.5d6d.com
顶部
蓝色虫
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 17077
精华 8
积分 1729
帖子 3270
活跃指数 938
LU金币 3923 个
LU金条 82 个
阅读权限 210
注册 2004-4-4
来自 战国-赵都
 
发表于 2007-1-2 15:00  资料  个人空间  短消息  加为好友 
如何采用ODBC接口访问MySQL

MySQL的ODBC接口实现是通过安装MyODBC驱动,这个驱动程序是跨平台的。如果在Linux等unix体系操作系统下使用,需要先安装iodbc这些第三方ODBC标准支援平台。

简单的ASP示例代码:
dim sql,mysql
set sql = server.createobject("adodb.connection")
mysql="driver={mysql odbc 3.51 driver};database=库;server=主机;uid=用户;password
=密码;" 'option = 设置
sql.open mysql


    上边这段代码是采用MyODBC开发版3.51连接的示例,使用开发版是因为一些新的特性和稳定性2.x正式版所不具备的。前几天看了篇微软安全专家所撰写的如何编写安全程序的教程。上边提到如果按照上边示例的方法一旦ASP文件的代码被骇客看到,那么数据库可能不保,然后引发一连串的问题,甚至被夺得管理权限。文章中顺便提到了解决方法,是通过编写com组件,然后由ASP调用组件的方法连接数据库。这么做的好处是提高了安全性,但是问题是有能力这么做的人毕竟是少数。那么我的折衷方案是定义数据源。将库、用户、密码以及设置这些连接信息统统在数据源中定义,从很大程度简单化了实现的难度,而且也起到增强安全性的作用。当然,为了保证数据源可以在实际运作环境中被访问到,一定要定义为“系统数据源”,开发时定义为“用户数据源”或者“系统数据源”我倒觉得无伤大雅。

使用数据源的ASP示例代码
dim sql
set sql = server.createobject("adodb.connection")
sql.open "dns=MySQL数据源名称"





公司信息化管理方案[点击这里]
客户关系管理方案[点击这里]
OA、产品项目解决方案[点击这里]
教育机构远程培训管理方案[点击这里]
企业项目管理方案演示[点击这里]

移动飞信群号——4121165
新论坛:http://e-office.5d6d.com
顶部
蓝色虫
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 17077
精华 8
积分 1729
帖子 3270
活跃指数 938
LU金币 3923 个
LU金条 82 个
阅读权限 210
注册 2004-4-4
来自 战国-赵都
 
发表于 2007-1-2 15:01  资料  个人空间  短消息  加为好友 
MySQL服务器的启动与停止

  服务器可以手动或自动启动。如果你手动启动它,服务器以你登录Unix(Linux)的用户身份启动。

  一、以非特权用户运行MySQL服务器

  在讨论如何启动MySQL服务器之前,让我们考虑一下应该以什么用户身份运行MySQL服务器。服务器可以手动或自动启动。如果你手动启动它,服务器以你登录Unix(Linux)的用户身份启动,即如果你用paul登录Unix并启动服务器,它用paul运行;如果你用su命令切换到root,然后运启动服务器,则它以root运行。然而,大多数情况下你可能不想手动启动服务器,最有可能是你安排MySQL服务器在系统引导时自动启动,作为标准引导过程的一部分,在Unix下,该引导过程由系统的Unix用户root执行,并且任何在该过程中运行的进程均以root权限运行。

  你应该牢记MySQL服务器启动过程的两个目标:

  你想让服务器以某个非root用户运行。一般地,你想限制任何运行进程的能力,除非确实需要root权限,而MySQL不需要。

  你想让服务器始终以同一个用户运行,此时用一个用户而其他时候以另一个不同的用户运行服务器是很不方便的,这造成了为文件和目录以具有不同属主的数据目录下被创建,并可能导致服务器不能访问数据库或表,这看你以哪个用户运行。统一用同一个用户运行服务器是你避免这个问题。

  要一个普通的非特权用户运行服务器,按照下列步骤:

  选择一个用于运行服务器的用户,mysqld可以用任何用户运行。但在概念上较清晰的是为MySQL操作创建一个单独的用户。你也可以特别为MySQL选择一个用户组。本文使用mysqladm和mysqlgrp分别作为用户名和用户组名。

  如果你已在自己的账号下安装好了MySQL且没有系统上的特殊管理权限,你将可能在你自己的用户ID下运行服务器。在这种情况下,用你自己的登录名和用户组代替mysqladm和mysqlgrp。

  如果你在RedHat Linux上用rpm文件安装MySQL,该安装将自动创建一个名为mysql的账号,用该账号代替mysqladm。

  如果必要,用系统通常的创建用户的过程创建服务器账号,你需要用root做它。

  如果服务器在运行,停止它。

  修改数据目录和任何子目录和文件的属主,这样使得mysqladm用户拥有它们。例如,如果数据目录是/usr/local/var,你可以如下设置mysqladm的属主(你需要以root运行这些命令):

  #cd /usr/local/var

  #chown -R mysqladm.mysqlgrp

  修改数据目录和任何子目录和文件的权限,使得它们只能由mysqladm用户访问。如果数据目录是/usr/local/var,你可以设置由mysqladm拥有的任何东西:

  # cd /usr/local/var

  # chmod -R go-rwx

  当你设置数据目录及其内容的属主和模式时,注意符号连接。你需要顺着它们并改变它们指向的文件或目录的属主和模式。如果连接文件的目录位于不属于你的地方,会有些麻烦,你可能需要root身份。

  在你完成了上述过程后,你应该确保总是在以mysqladm或root登录时启动服务器,在后者,确定指定--user=mysqladm选项,使服务器能将其用户ID切换到mysqladm(同时也适用于系统启动过程)。

  --user选项在MySQL 3.22中引入,如果你有老版本,你可以使用su命令告诉系统在以root运行时在特定的用户下运行服务器。

  二、启动服务器的方法

  在我们确定了用于运行服务器的账号后,你可以选择如何安排启动服务器。你可以从命令行手动或在系统引导过程中自动地运行它。对于启动服务器由三种主要方法:

  直接调用mysqld。

  这可能是最不常用的方法,建议不要多使用,因此本文不详细介绍。

  调用safe_mysqld脚本。

  safe_mysqld试图确定服务器程序和数据目录的位置。然后用反映这些值的选项调用服务器。safe_mysqld将标准出错设备从服务器重定位到数据目录下的一个出错文件,使得有它的一条记录。在启动服务器后,safe_mysqld也监视它并且如果它死掉则重启它。safe_mysqld常用于BSD风格的Unix系统。

  如果你以root或在系统引导期间启动sqfe_mysqld,出错日志由root拥有,这可能在你以后试图用一个非特权用户调用safe_mysqld时将导致“permission denied”(权限拒绝)错误,删除出错日志再试一下。

  调用mysql.server脚本。

  这个脚本通过有意用于System V的启动和停止系统上的safe_mysqld.mysql.server来启动服务器,该系统包含几个包含在机器进入或退出一个给定运行级别时被点用的脚本目录。它可以用一个start或stop参数点用以表明你是想启动还是想停止服务器。

  safe_mysqld脚本安装在MySQL安装目录的bin目录下,或可在MySQL源代码分发的scripts目录下找到。mysql.server脚本安装在MySQL安装目录下的share/mysqld目录下或可以在MySQL源代码分发的support_files目录下找到。如果你想使用它们,你需要将它们拷贝到适当的目录下。

  对BSD风格的系统(FreeBSD,OpenBSD等),通常在/etc目录下有几个文件在引导时初始化服务,这些文件通常有以“rc”开头的名字,且它有可能由一个名为“rc.local”的文件(或类似的东西),特意用于启动本地安装的服务。在这样的系统上,你可能将类似于下列的行加入rc.local文件中以启动服务器(如果safe_mysqld的目录在你的系统上不同,修改它即可):

  if [ -x /usr/local/bin/safe_mysqld ]; then  /usr/local/bin/safe_mysqld &fi

  对于对于System V风格的系统,你可以通过将mysql.server放在/etc下适当的启动目录下来安装它。如果你运行Linux并从一个RPM文件安装MySQL,这些已经为你做好了,否则将脚本安装在主启动目录下,并将指向它的连接放在适当的运行级别目录下。你也可以使脚本只能由root启动。

  启动文件的目录布局各系统不同,所以你需要检查一下看看你的系统如何组织它们。例如在Linux PPC上,目录是/etc/rc.d和/etc/rc.d/rc3.d,这样你可以这样安装脚本:

  #cp mysql.server /etc/rc.d/init.d#cd /etc/init.d#chmod 500 mysql.server#cd /etc/rc.d/rc3.d#ln -s ../init.d/mysql.server S99mysql

  在solaris上,主脚本目录是/etc/init.d,并且运行级别目录是/etc/rd2.d,所以命令看上去像这样:

  #cp mysql.server /etc/rc.d/init.d#cd /etc/init.d#chmod 500 mysql.server#cd /etc/rc2.d#ln -s ../init.d/mysql.server S99mysql

  在系统启动时,S99mysql脚本将自动用一个start参数调用。如果你有chkconfig命令(Linux上有),你可以由它帮助安装mysql.server脚本而不是象上面那样手工运行上述命令。

  2.1 指定启动选项

  如果你想在服务器启动时指定额外的启动选项,你可有两种方法。你可以修改你使用的启动脚本(safe_mysqld或mysql.server)并直接在调用服务器的行上指定选项,或在一个选项文件中指定选项。建议你如果可能在一个全局选项文件中指定选项,它通常位于/etc/my.cnf(Unix)或c:\my.cnf(Windows)。

  某些种类的信息无法以服务器选项指定。对于这些你可能需要修改safe_mysqld。例如,如果你的服务器不能正确选择本地时区而以GMT返回时间值,你可以设置TZ环境变量给它一个指示。如果你用safe_mysqld或mysql.server启动服务器,你可以将一个时区设置加到safe_mysqld。找到启动服务器的行并在该行前加入下列命令:

  TZ=US/Centralexport TZ

  上面命令的语法是Solaris的,对于其他系统语法可能不同,请查阅相关手册。如果你确实修改了你的启动脚本,要记住下次你安装MySQL时(如升级到新版本),你的修改将失去,除非你首先在别处复制了启动脚本。在安装了新版本后,比较新旧版本的脚本,看看你需要重建什么改变。

  2.2 在启动时检查你的表

  除了安排你的服务器在系统引导时启动,你可能要安装myisamchk和isamchk脚本,以在服务器启动前检查你的表。你可能在一个崩溃后重启,有可能表已经损害,在启动前检查它是一个发现问题的好方法。

  三、停止服务器

  要手工启动服务器,使用mysqladmin:

  %mysqladmin shutdown

  要自动停止服务器,你不需做特别的事情。BSD系统一般通过向进程发一个TERM信号停止服务,它们或者正确应答它或被粗鲁地杀死。mysqld在它收到这个信号时以终止作为应答。对于用mysql.server启动服务器的System V风格的系统,停止进程将用一个stop参数调用该脚本,告诉服务器终止,当然假定你已安装了mysql.server。

  四、如果你不能连接服务器,如何重新获得对服务器的控制

  在某些情况下,你可能由于不能连接它而手工重启服务器。当然,这有点矛盾。因为一般你通过连接服务器而手工关掉它,那么这种情况如何会出现。

  首先,MySQL root口令可以已经设置为你不知道的值,这可能发生在你修改口令时,例如,如果你在输入新口令时偶然键入一个不可见的控制字符。你也可能忘记口令。

  其次,连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。

  如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。这里的骗局是你不能用套接字建立连接因为它不见了,你必须建立一个TCP/IP连接,例如,如果服务器主机是pit.snake.net,你可以这样连接:

  %mysqladmin -p -u root -h pit.snake.net shutdown

  如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一个或使用一个不同的套接字文件,你可以使用全局选项文件指定一个不同的套接字,例如,如果数据目录是/usr/local/var,你可以通过将下列行加入/etc/my.cnf中,将套接字文件移到那里:

  [mysqld]socket=/usr/local/var/mysql.sock[client]socket=/usr/local/var/mysql.sock

  对服务器和客户均指定路径名,使得它们都使用同一个套接字文件。如果你只为服务器设置路径,客户程序将仍然期望在原位置执行套接字,在修改后重启服务器,使它在新位置创建套接字。

  如果你由于忘记root口令或已经将它设置为不同于认为的值而不能连接,你需要重新获得对服务器的控制,是你能再次设置口令:

  中断服务器

  如果你以root登录服务器主机,你可以用kill命令终止服务器。你可以使用ps命令或通过寻找服务器的PID文件(通常在数据目录中)找出服务器进程的ID。

  最好是首先尝试用一个向服务器发出一个TERM信号的正常kill看它是否将以正常终止应答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,你可以用kill -9强制终止它。这是最后的手段了,因为这可能有未清空的修改,而且你冒着让表处于一个不一致状态的风险。

  如果你用kill -9终止服务器,要确保在启动服务器前用myisamchk和isamchk检查你的表。

  用--skip-grant-table选项重启服务器。

  这告诉服务器不使用授权表验证连接,这允许你以root连接而无须口令。在你已经连接后,改变root口令。

  用mysqladmin flush-privileges告诉服务器再次使用授权表启动

  如果你的mysqladmin版本不认识flash-privileges,试一试reload。

  五、运行多个服务器

  大多数再一台给定的机器上运行单个MySQL服务器,但在很多情况下,运行多个服务器是很有用的:

  你可能想测试一个服务器的新版本,而保留你正在运行的生产服务器。在这种情况下,你会运行不同的服务器代码。

  操作系统一般限制每个进程的打开文件句柄数量。如果你的系统很难提高这个限制,运行多个服务器是解决限制的一种方法。在这种情况下,你可能运行统一服务器的多个实例。

  ISP经常为其客户提供自己的MySQL安装,有必要涉及单独的服务器。在这种情况下,你可能运行同一版本的多个实例或不同版本,如果不同的客户想要不同版本的MySQL。

  很自然地,运行多个服务器比只运行一个服务器要复杂得多。如果你安装多个版本,你不能在同一个地方安装所有东西。当服务器运行时,某些参数必须或很可能对每个服务器是唯一的,它们包括服务器在哪安装、其数据目录的路径名、TCP/IP端口和UNIX域套接字路径名以及用于运行服务器的UNIX账号(如果你不再同一账号下运行所有服务器)。如果你决定运行多个服务器,一定要注意你使用的参数,是你不至于丢失对所发生的事情的踪迹。

  5.1 配置和安装多个服务器

  如果你要运行不同版本的服务器而不是同一版本的多个实例,你必须在不同地点安装它们。如果你安装二进制分发(不用RPM),它们将安装在包含不同版本号的目录名下。如果你从源代码安装,最简单的方法是在每个版本运行configure配置MySQL安装过程中使用--with-prefix选项使得不同分发分开,这将使得所有东西安装在一个单独的目录下,你可以将目录域分发版本号联系起来,如,你可以象这样配置一个MySQL分发,其中version是MySQL版本号:

  %.configure --with-prefix=/usr/local/mysql-version

  --with-prefix选项也决定了服务器的一个唯一数据目录。你可能想加上其它服务器特定的选项,如TCP/IP端口号和套接字路径名(--with-tcp-port和--with-unix-socket)。

  如果你想运行同一版本服务器的多个实例,任何必须基于一个服务器特定设置的选项将需要在运行时指定。

  5.2 多服务器的启动过程

  启动多个服务器比使用一个服务器要复杂。因为safe_mysqld和mysql.server均在单个服务器设置上工作得最好。建议你仔细研究一下safe_mysqld并用它作为你的启动过程的基础,使用你修改的版本,你能针对你自己的需要更精确地裁剪它。

  你必须处理的一个问题是如何在选项文件(my.cnf)中指定选项。对于多服务器,你不能对于每个不同的服务器设置使用/etc/my.cnf,你只能对所有服务器相同的设置使用该文件。如果服务器有一个不同的编译进去的数据目录位置,你可以在每个服务器数据目录中的my.cnf中指定所有服务器要使用的设置,而使用DATADIR/my.cnf指定服务器特定的设置,这里DATADIR以服务器不同而不同。

  另一种指定服务器选项的方法是用--default-file=path_name作为命令行的第一个选项,告诉服务器从名为path_name中的文件中读取选项,这样你可以把一个服务器选项放在一个对该服务器唯一的文件中,然后告诉服务器在启动时读取该文件。注意,如果你指定这个选项,将不使用通常的选项文件如/etc/my.cnf的任何一个。





公司信息化管理方案[点击这里]
客户关系管理方案[点击这里]
OA、产品项目解决方案[点击这里]
教育机构远程培训管理方案[点击这里]
企业项目管理方案演示[点击这里]

移动飞信群号——4121165
新论坛:http://e-office.5d6d.com
顶部
蓝色虫
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 17077
精华 8
积分 1729
帖子 3270
活跃指数 938
LU金币 3923 个
LU金条 82 个
阅读权限 210
注册 2004-4-4
来自 战国-赵都
 
发表于 2007-1-2 15:09  资料  个人空间  短消息  加为好友 
安装与卸载MySQL系统服务(常见问题)

  将Mysql添加到Windows系统服务中:

  1.、 安装服务。

  在Windows2000下,安装完成后,并没有把MySQL安装成服务,我们必须执行下面的语句把MySQL注册为服务:installdir\mysql\bin\mysqld-nt –-install。

  Windows98下没有服务的概念,所以不用安装服务。

  2.、 启动服务

  在Windows2000下,安装服务后可以启动MySQL服务:net start mysql。

  在Windows98下,可以用下面的命令启动服务:c:\mysql\bin\mysqld,服务启动后在后台运行,并没有界面。

  3.、 停止服务

  在Windows2000下,可以通过下面的命令停止MySQL服务:net stop mysql。

  在Windows98下,可以通过下面命令停止服务:C:\> C:\mysql\bin\mysqladmin -u root shutdown

  4、 卸载服务

  可以通过下面的命令卸载MySQL服务:installdir\mysql\bin\mysqld-nt –-remove。

  经过上面的安装就可以使用了,可以把我们系统空的数据库内建到mySQL数据目录即可,缺省数据库目录在installdir\mysql\data。

  访问MySQL数据库可以通过dbExpress组件,dbExpress组件是一组高效的数据库访问组件,只要改变连接串,我们就可以直接把数据源连接到MSSQLServer等数据库。

  安装与卸载windows系统服务有专门软件,如果需要,mail to me:wangyihust@163.com

  删除了原来的mysql4.1系统服务后,下载了一个5.0的non-install版本,将其添加到windows系统服务后,为什么无法启动?-1056错误

  1.报错:Can't find messagefile 'F:\Program Files\mysql\share\english\errmsg.sys'

  原因:原来的4.1版本安装在F:\Program Files\mysql目录;而现在的5.0版本在F:\database目录

  解决方法:在c:\winnt\目录下找到my.ini文件,修改或删除之

  2.报错:ready for connections.

  Version: '5.0.21-community-nt' socket: '' port: 3306 MySQL Community Edition (GPL)

  原因:socket为空,没有配置mysql;或者端口已经占用

  解决方法: \mysql\bin目录下运行MySQLInstanceConfig.exe配置mysql实例

  如何更改Win2000服务MySQL属性中的可执行文件路径!

  开始时在D盘装了MySQL,后来卸载后,格式化D盘,再次安装,路径与原路径不同,不能通过“net start mysql”启动。查看win2000服务中MYsql的属性,可执行文件路径在位于D盘。现在怎么样更改,或启动Mysql?

  注册表里HKEY_LOCAL_MECHINE---SYSTEM ---CurrentControlSet里

  启动MYSQL服务时出错的几种解决方法

  1

  安装MYSQL后更改了ROOT的密码后用net startmysql启动时我就遇到了这样的问题.使用以下命令后c:\mysql\bin\mysqladmin-u root -p shutdown再net start mysql就没有这个错误提示了!

  2

  MySQL的1067错误

  Q:我的Mysql碰到了 1067 错误

  错误信息为:

  A system error has occurred.

  System error 1067 has occurred.

  The process terminated unexpectedly.

  A:在我的机上的解决办法是:

  修改%windir%\my.ini,增加

  [mysqld]

  #设置basedir指向mysql的安装路径

  basedir=D:\Program\Tools\mysql

  datadir=D:\Program\Tools\mysql\data

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

  3

  已经弄好了!!!

  好像是这样……

  mysql_install_db脚本只是在初次安装时才需要运行一次,之后就不用再运行了,不知道是不是这么回事.我把mysql.server拷贝至/etc/rc.d/init.d/中,运行chkconfig mysql.server,至此mysql服务器每次开机自动启动,只要设置好PATH,在命令行上输入mysql就一切搞定!

  看来摸索的过程实在是痛苦啊,这已经折磨我好几天了……

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

  4

  问:我的Mysql碰到了 1067 错误

  错误信息为:

  A system error has occurred.

  System error 1067 has occurred.

  The process terminated unexpectedly.

  答:

  解决办法:

  1.检查你的Mysql目录有没有给系统的System用户权限。

  2.删除掉你的 %WINDOWS%/my.ini 文件。

  3.检查你的 c:/my.cnf 文件配置是否正确。

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

  5

  MySql的默认安装目录是c:mysql,安装结束后没有任何提示信息说安装结束,请点Finish按钮之类的话,直接就退出了。如果需要安装到其他目录,建议先安装到c:mysql,然后再整个目录move到自己希望的地方,例如移动到d:mysql 之后,需要编辑 d:mysqlmy-example.cnf (*.cnf的文件在Windows 2000中会被注册成为 SpeedDial文件,在资源管理器中无法操作,要用命令行来启动notepad编辑,例如运行notepadd:mysqlmy-example.cnf ,但是这个文件是UNIX系统下的文本文件格式,在notepad中不能正确换行,可以用write打开编辑,

  或者用write打开后保存一次,再用notepad就可以编辑了。)找到basedir一行,去掉前面的“#”号注释,将后面的路径改为移动后的目录(目录分隔符要用斜线而不是反斜线),然后另存为:c:my.cnf 用服务方式启动的MySql如果用 net stop mysql 来停止,会得到一条 出错消息,例如:

  C:>net stop mysql

  MySql 服务正在停止.

  系统出错。

  系统发生 1067 错误。

  进程意外终止。

  MySql 服务已成功停止。

  这没有关系,MySql确实已经停止了。但是假如不希望看到任何出错消息 的话,可以用以下的命令来停止:

  C:>mysqlbinmysqladmin -u root shutdown

  如果没有任何提示信息,说明MySql已经成功停止了。

  需要说明的是MySql虽然号称安装简单,易于使用,但是这毕竟是基于SQL的数据库管理系统,所以如果不是对SQL十分精通的话恐怕也不能拿它来做什么

  6

  mysql服务无法启动的解决方法

  mysql服务无法启动

  我的操作系统是 win xp

  无论安装何版本的mysql,在管理工具的服务中启动mysql服务时都会在中途报错

  内容为:在 本地计算机 无法启动mysql服务 错误1067:进程意外中止

  经过多方求教,得解决方法如下

  查找系统(后来验证应该为windows目录)目录下的my.ini文件,编辑内容(如果没有该文件,则新建一个),至少包含basedir,datadir这两个基本的配置。

  [mysqld]

  # set basedir to installation path, e.g., c:/mysql

  # 设置为MYSQL的安装目录

  basedir=D:/www/WebServer/MySQL

  # set datadir to location of data directory,

  # e.g., c:/mysql/data or d:/mydata/data

  # 设置为MYSQL的数据目录

  datadir=D:/www/WebServer/MySQL/data

  另外,要主意

  [WinMySQLadmin]

  Server=D:/www/WebServer/MySQL/bin/mysqld-nt.exe

  user=root

  password=xxxxxxxx

  #以上是设置WinMySQLadmin的配置

  [Client]

  user=root

  password=xxxxxxxx

  hehe~ 解决了

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

  7

  刚刚弄好Mysql 『关键字 1067错误』

  比较郁闷,竟然没有想到安装个Mysql也会出错,错误代码是1067 安装卸载了好几次,就是不行,而且把一些禁用了的服务都打开了,但是还是不行。最后我是这样解决的:

  在C:\windows里找一找my.ini 然后删除 然后再启动winmysqladmin.exe界面配置mysql,保存my.ini就可以了 启动mysql试试 呵呵

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

  8

  mysql 错误 1067: 进程意外终止

  这个问题困扰了一个早晨,非常郁闷!以前我在装mysql的时候从来没有遇到过,可是现在庄这个高版本的就有问题了,我换我装过的低版本的还是一样的问题(最关键的是操作系统都是一样的)。在windows2000的服务里面启动mysql服务可是总是弹出“错误 1067: 进程意外终止”!

  我感觉问题在配置文件,于是就重新写了my.ini,启动还是一样的效果,我在google上查找无果,崩溃状态!就在此时眼前一亮,一位高人的指点是我豁然开朗,你的ini文件有否放到windows目录下,我从个人目录的windows目录下,将其拷贝到系统windows目录下,启动服务,ok!!!





公司信息化管理方案[点击这里]
客户关系管理方案[点击这里]
OA、产品项目解决方案[点击这里]
教育机构远程培训管理方案[点击这里]
企业项目管理方案演示[点击这里]

移动飞信群号——4121165
新论坛:http://e-office.5d6d.com
顶部
蓝色虫
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 17077
精华 8
积分 1729
帖子 3270
活跃指数 938
LU金币 3923 个
LU金条 82 个
阅读权限 210
注册 2004-4-4
来自 战国-赵都
 
发表于 2007-1-2 15:10  资料  个人空间  短消息  加为好友 
MySQL自动备份脚本

  之前,有用户向我们提出过疑问:如何才能实现MySQL的自动备份,当时,我们的回复是编一个自动脚本。

      现在我们把这段代码贴出来,希望对各位有所帮助。可以将这个脚本放进crontab,每天凌晨执行一次,自动备份。

  这个脚本每天最多只执行一次,而且只保留最近五天的备份在服务器上。

  代码:

#!/bin/bash
#This is a ShellScript For Auto DB Backup
#Powered by aspbiz
#2004-09

#Setting
#设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式
#默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy
#默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz
DBName=mysql
DBUser=root
DBPasswd=
BackupPath=/root/
LogFile=/root/db.log
DBPath=/var/lib/mysql/
#BackupMethod=mysqldump
#BackupMethod=mysqlhotcopy
#BackupMethod=tar
#Setting End


NewFile="$BackupPath"db$(date +%y%m%d).tgz
DumpFile="$BackupPath"db$(date +%y%m%d)
OldFile="$BackupPath"db$(date +%y%m%d --date='5 days ago').tgz

echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
#Delete Old File
if [ -f $OldFile ]
then
   rm -f $OldFile >> $LogFile 2>&1
   echo "[$OldFile]Delete Old File Success!" >> $LogFile
else
   echo "[$OldFile]No Old Backup File!" >> $LogFile
fi

if [ -f $NewFile ]
then
   echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile
else
   case $BackupMethod in
   mysqldump)
      if [ -z $DBPasswd ]
      then
         mysqldump -u $DBUser --opt $DBName > $DumpFile
      else
         mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile
      fi
      tar czvf $NewFile $DumpFile >> $LogFile 2>&1
      echo "[$NewFile]Backup Success!" >> $LogFile
      rm -rf $DumpFile
      ;;
   mysqlhotcopy)
      rm -rf $DumpFile
      mkdir $DumpFile
      if [ -z $DBPasswd ]
      then
         mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1
      else
         mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >>$LogFile 2>&1
      fi
      tar czvf $NewFile $DumpFile >> $LogFile 2>&1
      echo "[$NewFile]Backup Success!" >> $LogFile
      rm -rf $DumpFile
      ;;
   *)
      /etc/init.d/mysqld stop >/dev/null 2>&1
      tar czvf $NewFile $DBPath$DBName >> $LogFile 2>&1
      /etc/init.d/mysqld start >/dev/null 2>&1
      echo "[$NewFile]Backup Success!" >> $LogFile
      ;;
   esac
fi

echo "-------------------------------------------" >> $LogFile





公司信息化管理方案[点击这里]
客户关系管理方案[点击这里]
OA、产品项目解决方案[点击这里]
教育机构远程培训管理方案[点击这里]
企业项目管理方案演示[点击这里]

移动飞信群号——4121165
新论坛:http://e-office.5d6d.com
顶部
蓝色虫
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 17077
精华 8
积分 1729
帖子 3270
活跃指数 938
LU金币 3923 个
LU金条 82 个
阅读权限 210
注册 2004-4-4
来自 战国-赵都
 
发表于 2007-1-2 15:12  资料  个人空间  短消息  加为好友 
MYSQL的操作类(已封装)

  该类完全按照ADO的习惯书写的,用过ASP的人都觉得ASP连接数据库比PHP好用(这是我的感觉),但PHP得一个一个API地写,挺累,该类做了完全的封装。

   class MySQLDB
  {
    //MYSQL数据库操作类
    //作者:熊毅
    //版本:2.0(发行版)
   
    //可以自由转载,修改请通知我scxy78@yeah.net
    //转载请保留以上声明
   
    //使用说明:
    //该类完全按照ADO的习惯书写的,用过ASP的人都觉得ASP连接数据库比PHP好用(这是我的感觉),
    //但PHP得一个一个API地写,挺累,该类做了完全的封装
    //创建类的实例时可以指定一个数据库表和选择的数据库,如:new MySQLDB("table","database");
    //查询数据时Query后可以用GetValue得到相应的值,既可以是字段名也可以是已0开始的序号
    //插入新值,先用AddNew后使用SetValue相应的字段名或序号和字段值,在用Update添加
    //编辑时用Edit指定编辑记录的条件在使用SetValue,最后用Update添加
    //在类使用过程中,sTName记录上次使用的数据库表名,当指定后可以直接使用,以后的操作默认在该表
    //上进行操作,当然也可以每次指定特殊的表进行操作
    //nErr指示是否操作出错,sErr记录最后一次出错的错误代码,记录了明确的有哪个函数引起的错误
    //错误之处请指正
    //欢迎来信与我交流编程经验:scxy78@yeah.net
    //我的CSDN:用户号:scxy;呢称:小熊,请多关照
   
    //可以自由转载,修改请通知我scxy78@yeah.net
    //转载请保留以上声明

    var $host="localhost";        //主机名
    var $user="boot";           //用户名
    var $password="oaserver";   //用户密码
    var $linkid;                 //连接值
    var $dbid;                   //数据库选择的结果值
    var $sTName;                  //指定当前操作的数据库表
    var $sErr;                   //错误代码
    var $nErr;                   //指示是否有错误存在,0无错误,1有错误
    var $nResult;                //查询结果值
    var $aFName;                 //保存FieldsName的数组
    var $nRows;                  //查询结果中的行数
    var $nCols;                  //查询结果中的列数
    var $aNew;                   //添加在AddNew函数后的数据,以数组形式保存
    var $NewEdit;                  //判断当前是否在进行添加操作,0表示没有,1表示在进行添加,2表示编辑
    var $sEditCon;               //指定编辑记录的条件
    var $nOffset;                //记录偏移量
    var $EOF;                     //标记是否到记录集尾
    var $sSQL;                    //最后一条执行的SQL语句

    //执行Update所要用到的全局变量
    var $sName;                   //字段名
    var $sValue;                  //字段值AddNew时用
    var $sEdit;                   //字段值Edit时用

    function Initialize()
    {
      $this->nErr=0;
      $this->NewEdit=0;
      $this->nResult=-1;
      $this->nCols=0;
      $this->nRows=0;
      $this->nOffset=0;
      $this->EOF=true;
      $this->sName="";
      $this->sValue="#@!";
      $this->sEdit="#@!";
      unset($this->aFName);
      unset($this->aNew);
    }
    function MySqlDB($TableName="",$database="slt")  //构造函数
    {
      $this->Initialize();
      $this->sTName=$TableName;
      $this->linkid=mysql_connect($host,$user,$password);
      if(!$this->linkid)
      {
        $this->nErr=1;
        $this->sErr="MySqlDB:数据库连接出错,请启动服务!";
        return;
      }
      $this->dbid=mysql_select_db($database);
      if(!$this->dbid)
      {
        $this->nErr=1;
        $this->sErr="MySqlDB:选择的数据库".$database."不存在!";
        return;
      }
    }

    function IsEmpty($Value)
    {
            if(is_string($Value)&&empty($Value))
               return true;
            return false;
    }

    function Destroy()          //数据清除处理
    {
      mysql_query("commit");
      mysql_close();
    }

    function PrintErr()
    {
      if($this->nErr==1)
      {
        echo($this->sErr."<br><br>");
      }
      else
      {
        echo("没有错误<br><br>");
      }
    }

        function Execute($SQL)  //直接执行SQL语句
          {
                if(empty($SQL))
                  {
                        $this->nErr=1;
                        $this->sErr="Execute:执行语句不能为空!";
                        return false;
                  }
                 $this->sSQL=$SQL;
                  if(!mysql_query($SQL))
                  {
                          $this->nErr=1;
                          $this->sErr="Execute:SQL语句:".$SQL."<br>MySql错误:".mysql_error();
                          return false;
                  }
                  return true;
          }

    function Query($TableName="",$SQL="*",$Condition="",$Order="",$Sequenc="") //在数据库里执行查询
    {
      $this->Initialize();
      if(!empty($TableName))
        $this->sTName=$TableName;
      $strSQL="select ".$SQL." from ".$this->sTName;
      if(!empty($Condition))
        $strSQL=$strSQL." where ".$Condition;
      if(!empty($Order))
        $strSQL=$strSQL." order by ".$Order;
      if(!empty($Sequenc))
        $strSQL=$strSQL." ".$Sequenc;
          $this->sSQL=$strSQL;
      if(!$this->nResult=mysql_query($strSQL))
      {
        $this->nErr=1;
        $this->sErr="Query:SQL语句:".$strSQL."<br>MySql错误:".mysql_error()."<br>";
        return;
      }
      $this->nOffset=0;
      $this->nRows=mysql_num_rows($this->nResult);
      $this->nCols=mysql_num_fields($this->nResult);
          if($this->nRows>0)
                  $this->EOF=false;
          else
                  $this->EOF=true;
      unset($this->aFName);
      $this->aFName=array();
      for($i=0;$i<$this->nCols;$i++)
         $this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));
    }

        function MoveNext()
          {
                if($this->EOF)
                  {
                        $this->nErr=1;
                        $this->sErr="MoveNext:已经移到记录集末尾!";
                        return;
                  }
                $this->nOffset++;
                if($this->nOffset>=$this->nRows)
                        $this->EOF=true;
          }

     function MoveTo($Offset)
     {
        if(empty($Offset))
        {
          $this->nErr=1;
          $this->sErr="MoveTo:必须指定偏移量! ";
          return;
        }

        if(!$this->nResult)
        {
          $this->nErr=1;
          $this->sErr="MoveTo:请先执行查询:Query";
          return;
        }
        $this->nOffset=$Offset;
     }

    //得到指定行的指定列的值,返回字符串
    //如果不指定Offset将取得下一行的值
    //如果不指定nFields将取得该行的值,并已数组形式返回
    function GetValue($nFields=-1,$Offset=-1)
    {
      if($this->nResult==-1)
      {
        $this->nErr=1;
        $this->sErr="GetValue:请先执行Query()函数!";
        return;
      }
      if($Offset>-1)
      {
                $this->nOffset=$Offset;
        if($this->nOffset>=$this->nRows)
        {
          $this->nErr=1;
          $this->sErr="GetValue:所要求的偏移量太大,无法达到!";
          return;
        }
      }
           if(!@mysql_data_seek($this->nResult,$this->nOffset))
                {
                  $this->nErr=1;
                  $this->sErr="GetValue:请求不存在的记录!";
                  return;
                }
      $aResult=mysql_fetch_row($this->nResult);
      if(is_int($nFields)&&$nFields>-1)
      {
        if($nFileds>$this->nCols)
        {
          $this->nErr=1;
          $this->sErr="GetValue:所请求的列值大于实际的列值!";
          return;
        }
        return $aResult[$nFields];
      }
          if(is_string($nFields))
          {
                $nFields=strtolower($nFields);
            for($i=0;$i<$this->nCols;$i++)
                {
                  if($this->aFName[$i]==$nFields)
                          break;
                }
                if($i==$this->nCols)
                  {
                        $this->nErr=1;
                        $this->sErr="GetValue:所请求的列不存在,请仔细检查!";
                        return;
                  }
                  return $aResult[$i];
          }
      return $aResult;
    }

    function AddNew($TableName="")  //标志开始添加数据
    {
      $this->Initialize();
      if(!empty($TableName))
        $this->sTName=$TableName;
      if($this->NewEdit>0)
      {
        $this->nErr=1;
        $this->sErr="AddNew:你正在对数据库进行添加或更新操作!";
        return;
      }
      if(empty($this->sTName))
      {
        $this->nErr=1;
        $this->sErr="AddNew:想要添加的数据库表为空,可以在构造时指定,也可在AddNew()时指定!";
        return;
      }
      unset($this->aNew);
      $this->aNew=array();
      $this->NewEdit=1;
      $strSQL="select * from ".$this->sTName;
          $this->sSQL=$strSQL;
      if(!$this->nResult=mysql_query($strSQL))
      {
        $this->nErr=1;
        $this->sErr="AddNew:SQL语句:".strSQL."<br><br>MySql错误:".mysql_error();
        return;
      }
      $this->nCols=mysql_num_fields($this->nResult);
      unset($this->aFName);
      $this->aFName=array();
      for($i=0;$i<$this->nCols;$i++)
         $this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));
    }

    function Edit($Condition="",$TableName="")  //对指定数据库表进行编辑
    {
                  $this->Initialize();
                  if(!empty($TableName))
                          $this->sTName=$TableName;
                  $this->sEditCon=$Condition;
                  if(empty($this->sTName))
                  {
                          $this->nErr=1;
                          $this->sErr="Edit:在编辑前请先指定数据库表!";
                          return;
                  }
                  unset($this->aNew);
                  $this->aNew=array();
                  $this->NewEdit=2;
                  $strSQL="select * from ".$this->sTName;
                  $this->sSQL=$strSQL;
                  if(!$this->nResult=mysql_query($strSQL))
          {
             $this->nErr=1;
             $this->sErr="Edit:SQL语句:".strSQL."<br><br>MySql错误:".mysql_error();
             return;
          }
          $this->nCols=mysql_num_fields($this->nResult);
          unset($this->aFName);
          $this->aFName=array();
          for($i=0;$i<$this->nCols;$i++)
             $this->aFName[$i]=strtolower(mysql_field_name($this->nResult,$i));
    }

    function SetValue($Index,$Value) //指定数据,跟在AddNew后执行;
    {
             if($this->NewEdit==0)
             {
                $this->nErr=1;
                $this->sErr="SetValue:请先执行AddNew()或者Edit()!";
                return;
             }
             if(is_int($Index))
             {
                 if($Index<0||$Index>$this->nCols)
                 {
                    $this->nErr=1;
                    $this->sErr="SetValue:插入不存在的列值!";
                    return;
                 }
                 $this->aNew[$Index]=$Value;
                 $tmpIn=$Index;
             }
             elseif(is_string($Index))
             {
                $Index=strtolower($Index);
                for($i=0;$i<$this->nCols;$i++)
                {
                    if($this->aFName[$i]==$Index)
                       break;
                }
                if($i==$this->nCols)
                {
                    $this->nErr=1;
                    $this->sErr="SetValue:插入不存在的列值!";
                    return;
                 }
                 $this->aNew[$i]=$Value;
                 $tmpIn=$i;
             }
                 if(!empty($this->sName))
                    $this->sName.=",";
                 $this->sName.=$this->aFName[$tmpIn];
                 //根据当前字段的类型生成相应的新值
                 if($this->sValue!="#@!")
                    $this->sValue.=",";
                 else
                    $this->sValue="";
                 $ftype=@mysql_field_type($this->nResult,$i);
                 //echo($ftype.",".$this->aNew[$i].",".$i.":".$sValue."<br>");
                 
                 switch($ftype)
                 {
                  case "string":
                  case "date":
                  case "datetime":
                        $this->sValue.="\"".$this->aNew[$tmpIn]."\"";
                        $this->sEdit="\"".$this->aNew[$tmpIn]."\"";
                        break;
                  case "int":
                  case "unknown":
                       $this->sValue.=$this->aNew[$tmpIn];
                       $this->sEdit=$this->aNew[$tmpIn];
                       break;
                  default:
                       $this->nErr=1;
                       $this->sErr="Update:字段名为".$this->aFName[$tmpIn]."的".$ftype."类型目前版本不支持,请用别的方法添加数据!";
                       return;
                 }

                 if($this->NewEdit==2)
                    $this->sName.="=".$this->sEdit;
      }

    function Update()    //存储新值到数据库
    {
      $strSQL="";

      if($this->NewEdit==0)
      {
        $this->nErr=1;
        $this->sErr="Update:请先执行AddNew()或者Edit(),再用SetValue()添加值!";
        return;
      }

      if(empty($this->sValue))
      {
        $this->nErr=1;
        $this->sErr="Update:在数据为空的情况下,不能添加或修改数据!";
        return;
      }

      switch($this->NewEdit)
      {
       case 1:       //添加
            $strSQL="insert into ";
            $strSQL.=$this->sTName;
            $strSQL.=" (".$this->sName.") ";
            $strSQL.="values (".$this->sValue.")";
            break;
      case 2:          //修改
            $strSQL="update ";
            $strSQL.=$this->sTName;
            $strSQL.=" set ";
            $strSQL.=$this->sName;
            if(!empty($this->sEditCon))
                $strSQL.=" where ".$this->sEditCon;
            break;
      default:
           $this->nErr=1;
           $this->sErr="Update:Update()生成SQL语句出错,请检查!";
           return;
      }

      $this->sSQL=$strSQL;
      if(!$this->nResult=mysql_query($strSQL))
      {
        $this->nErr=1;
        $this->sErr="Update:SQL语句:".$strSQL."<br><br>MySql错误:".mysql_error();
        return;
      }
       //echo($this->sSQL."<br>");
      //作清理工作
      $this->NewEdit=0;
      unset($this->aNew);
      mysql_query("commit");
    }
  }





公司信息化管理方案[点击这里]
客户关系管理方案[点击这里]
OA、产品项目解决方案[点击这里]
教育机构远程培训管理方案[点击这里]
企业项目管理方案演示[点击这里]

移动飞信群号——4121165
新论坛:http://e-office.5d6d.com
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
聪小子
LU新生
Rank: 1



UID 68005
精华 0
积分 11
帖子 21
活跃指数 2
LU金币 23 个
LU金条 0 个
阅读权限 10
注册 2007-1-12
 
发表于 2007-1-13 12:21  资料  个人空间  短消息  加为好友  QQ
请问一下,MYSQL和SQLServer还有ORACLE还有DB2
  这些目前那些数据库比较流行啊???

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
聪小子
LU新生
Rank: 1



UID 68005
精华 0
积分 11
帖子 21
活跃指数 2
LU金币 23 个
LU金条 0 个
阅读权限 10
注册 2007-1-12
 
发表于 2007-1-13 12:22  资料  个人空间  短消息  加为好友  QQ
老实说,我看了上面的那些,头有点大...

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
 



当前时区 GMT+8, 现在时间是 2008-12-5 20:13
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.148267 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver