第2章 MySQL数据库基本操作
顾名思义,数据库(Database)就是存放数据的地方,只不过这个地方是计算机的存储设备,而且数据是按照一定的格式存放的。在科技发展日新月异的今天,人们的视野越来越广,工作与生活中所涉及的数据量也急剧增加。在30年以前的20世纪80年代,人们还把数据存放在文件柜里,但是现在则借助计算机和数据库技术科学地保存和管理大量复杂的数据,以便能方便而充分地利用这些宝贵的信息资源。
数据库技术的发展,已经成为先进信息技术的重要组成部分,是现代计算机信息系统和计算机应用系统的基础和核心。数据库技术最初产生于20世纪60年代中期,根据数据模型的发展,可以划分为三个阶段:第一代的网状、层次数据库系统;第二代的关系数据库系统;第三代的以面向对象模型为主要特征的数据库系统。
目前应用最广泛的一类是关系数据库系统。关系数据库系统使用关系数据模型定义和存储数据。关系数据模型的主要操作包括查询、插入、删除和修改数据。关系模型中的数据操作是集合操作,操作对象和结果都是关系,即若干元组的集合。在关系数据模型中,实体与实体间的联系用表来表示,在数据库的物理组织中,表以文件形式存储。
关系数据库系统的一般逻辑结构如图2-1所示。
图2-1 数据库系统的一般结构
作为关系数据库DBMS的一个开源实现,MySQL常常用在基于B/S架构的Web开发项目中,往往与之配合的程序开发语言就是PHP。
2.1 MySQL数据库基础
MySQL是瑞典MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它底层使用C和C++编写,可以工作在许多平台(UNIX、Linux、Windows)上,提供了针对不同编程语言(C、C++、Java等)的API函数;能够很好地支持多CPU;提供事务和非事务的存储机制;使用快速的基于线程的内存分配系统;采用双重许可,用户可以在GNU许可条款下以免费软件或开放源码软件的方式使用MySQL软件,也可以从MySQL AB公司获得正式的商业许可。由于MySQL具有以上特性,并且具有功能强、使用简单、管理方便、运行速度快、可靠性高、安全保密性强等优点,所以它完全适用于网络,用其建立的数据库可在因特网上的任何地方访问。
MySQL系统整体架构如图2-2所示。
图2-2 MySQL系统整体架构图
在简单了解了MySQL的基本情况后,接下来就是把它安装好,让它能运行起来。
01 首先从官方站点上下载最新版本(GA,Generally Available)的安装程序文件,选择下载图2-3中标明的mysql-5.1.49-win32.msi即可。msi-essential-开头的文件与其相比,少了实例配置工具、文档和开发者组件,不便于新手配置和使用(当然,好处就是文件体积大幅度减小),不建议下载。
图2-3 从官方站点下载MySQL安装程序文件
02 运行下载的安装程序,单击Install按钮,直到安装完毕,如图2-4所示。
图2-4 安装MySQL
03 安装完毕后会自动启动MySQL实例配置向导程序,单击Next按钮,选择Detailed Configuration单选按钮,如图2-5所示。
图2-5 选择Detailed Configuration单选按钮
04 接下来选择服务器类型,因为是用于开发测试,所以选择Developer Machine单选按钮,如图2-6所示。如果是在服务器上安装运行,则选择Server Machine单选按钮;如果安装MySQL的机器只用来运行数据库服务,则可以选择Dedicated MySQL Server Machine单选按钮,可以获得更好的效能。
图2-6 选择“Developer Machine”单选按钮
05 接下来一路单击Next按钮直到选择字符集的阶段,选择Best Support For Multilingualism单选按钮,以开启默认UTF8字符集的支持,如图2-7所示。
图2-7 选择默认使用的字符集
06 在安全选项这一步需要输入root用户的密码,填写好后单击Next按钮,向导会提示所有信息已经收集完毕,单击Execute按钮即可自动完成前边选定的设置,如图2-8所示。
图2-8 执行系统配置,启动MySQL服务
至此所有的安装与设置工作已经准备完毕,下面就来学习如何操作MySQL!
2.2 使用SQL操作数据库、数据表和数据
安装好MySQL后,单击“开始”→“MySQL”→“MySQL Command Line Client”选项,会打开一个运行在命令行窗口中的MySQL操作环境,如图2-9所示。
图2-9 MySQL命令行操作环境
正确输入配置MySQL时设置的root账号的密码后即登录到MySQL命令行状态,这时可以输入SQL语句执行相应的操作,也可以输入“help;”或“\h”查看命令行帮助。
● 建立数据库与数据表
在MySQL命令行状态下,输入以下SQL语句建立名为test的数据库和名为table的数据表:
CREATE DATABASE 'test' ; CREATE TABLE 'test'.'table' ( 'uid' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , 'username' VARCHAR( 16 ) NOT NULL ) ENGINE = MyISAM;
执行结果如图2-10所示。
图2-10 使用命令行方式建立数据库test和数据表table
● 向数据表中插入、删除数据,更新数据表中的数据
接下来执行以下SQL语句向表table中插入两条数据:
INSERT INTO 'test'.'table' ('uid' , 'username' ) VALUES ('1', 'admin'), ('2', 'public_user');
执行结果如图2-11所示。
图2-11 向表table中插入两条数据
执行以下SQL语句修改table表中uid为1的记录的username字段,将其值从原来的admin修改为administrator:
UPDATE 'test'.'table' SET 'username' = 'administrator' WHERE 'table'.'uid' =1;
执行以下SQL语句删除table表中uid为2的记录:
DELETE FROM 'test'.'table' WHERE 'table'.'uid' = 2;
以上两项操作的结果如图2-12所示。
图2-12 更新和删除表table中的数据
● 从数据表中选择所需的数据
通过使用前边插入数据的方法,现在表table中已有6条数据,先来列出所有的数据:
SELECT * FROM 'table';
为了只查看其中uid为6的数据,可以执行以下SQL语句:
SELECT * FROM 'table' WHERE 'uid' =6;
以上两项操作的结果如图2-13所示。
图2-13 选择表table中的数据
● 清空数据表
如果一个数据表中的数据不再需要了,但是要保留表的结构,以备重新添加数据,可以执行以下SQL语句:
TRUNCATE TABLE 'table';
● 删除数据表
删除一个数据表可以执行以下SQL语句:
DROP TABLE IF EXISTS 'table';
以上两项操作的结果如图2-14所示。
图2-14 清空与删除数据表
2.3 使用phpMyAdmin操作MySQL
虽然使用命令行方式操作MySQL看上去很酷,但是此等“高手技巧”因其界面不直观易出错,所以并不适合经常使用。在实际程序开发与MySQL数据库管理中,往往使用名为phpMyAdmin的一套PHP程序来操作MySQL。别急,先登录其官方网站(http://www.phpmyadmin.net)把它下载下来,如图2-15所示。
图2-15 登录phpMyAdmin官网下载程序包
将下载的压缩包解压到本地Web根目录下,进入phpMyAdmin目录,新建名为config的文件夹,然后在浏览器中打开phpMyAdmin下的setup目录,如图2-16所示。
图2-16 新建phpMyAdmin配置文件
单击“新建服务器”按钮,在表单中填写相应的信息(一般只需要填写服务器主机名、端口、认证方式、用户名和密码等),如图2-17所示。
图2-17 填写MySQL服务器的信息
填写好后单击“保存”按钮,会在config目录下生成一个名为config.inc.php的配置文件,将此文件复制到phpMyAdmin根目录下,并删除config目录。然后在浏览器中打开phpMyAdmin即可使用,如图2-18所示。
图2-18 phpMyAdmin配置完毕,可以使用了
使用phpMyAdmin操作MySQL,界面全部为图形化,简单方便。例如对表table的操作可以在如图2-19所示的界面中完成。
图2-19 在phpMyAdmin中操作表table
本书是phpMyAdmin的简明使用方法,读者可在实际使用中作为参考。
2.4 边学边练:编写PHP程序实现与MySQL交互——我的书架
下边使用MySQL的基本操作函数实现简单的书籍管理功能——图书信息的添加、编辑和删除。
因为本功能的使用者只有笔者自己一个人,所以暂不考虑用户管理。图书信息表的结构如表2-1所示。
表2-1 图书信息表books的结构
该程序全部代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>我的书架</title> <style type="text/css"> a { text-decoration: none; } body { text-align: center; } #wrap{ text-align: left; margin: 0 auto; width: 800px; } </style> </head> <body> <div id="wrap"> <center><h2>我的书架</h2></center> <?php require_once 'config.php'; $bookid = $_GET['edit']; if ($_POST['submit']) { $title = $_POST['title']; $author = $_POST['author']; $dateline = $_POST['dateline']; $price = $_POST['price']; $setSQL = "bookid='$bookid',title='$title',author='$author',dateline='$da teline',price='$price'"; $sql = $bookid ? "UPDATE books SET $setSQL WHERE bookid='$bookid'" :"INSERT INTO books SET $setSQL"; mysql_query($sql); header('location:?'); exit; } if ($bookid) { $rs = mysql_query("SELECT * FROM books WHERE bookid='$bookid'"); $book = mysql_fetch_assoc($rs); } if ($delid = $_GET['del']) { mysql_query("DELETE FROM books WHERE bookid='$delid'"); } $rs = mysql_query("SELECT * FROM books"); echo '<h3>图书列表</h3> <table width="100%" cellspacing="0" cellpadding="1" border="1" bordercolor="#999"> <tr><th>ID</th><th>书名</th><th>作者</th><th>出版时间</th><th>定价</th><th>操作</th></tr>'; while ($item = mysql_fetch_assoc($rs)) { e c h o " < t r a l i g n = \ " c e n t e r \ " > < t d > $ i t e m [ b o o k i d ] < / td><td align=\"left\">$item[title]</td><td>$item[author]</ t d > < t d > $ i t e m [ d a t e l i n e ] < / t d > < t d > $ i t e m [ p r i c e ] < / t d > < t d > < a href=\"?edit=$item[bookid]\">修改</a> <a href=\"?del=$item[bookid]\">删除</a></td></tr>"; } echo '</table>'; echo '<h3>' .($bookid ? '修改图书' : '新增图书') .'</h3>'; ?> <form method="POST"> <table cellspacing="0" cellpadding="1" border="0"> <tr> <td>书名</td> <td><input type="text" name="title" value="<?=$book['title']?>"/></td> </tr> <tr> <td>作者</td> <td><input type="text" name="author" value="<?=$book['author']?>"/></td> </tr> <tr> <td>出版时间</td> <td><input type="text" name="dateline" value="<?=$book['dateline']?>"/></ td> </tr> <tr> <td>定价</td> <td><input type="text" name="price" value="<?=$book['price']?>"/></td> </tr> <tr> <td colspan="2"><input type="submit" name="submit" value="提交"/> <input type="reset" value="重置"/> <?php if ($bookid) {?><a href="?edit=0">取消修改</a><? } ?></td> </tr> </table> </form> </div> </body> </html>
此处为简便起见未考虑对表单提交的内容做安全性过滤。
完成后的程序的执行结果如图2-20所示。
图2-20 “我的书架”完成效果图
读者可在此基础上进一步添加分页、AJAX效果等功能,使之更为完善。