第12章网络数据库MySQL服务的配置与应用本章导读MySQL的概述MySQL的安装MySQL服务的配置和使用MySQL的图形化配置安装phpMyAdmin启动和停止MySQL服务MySQL的概述MySQL是一个高性能、多线程、多用户、建立在客户/服务器结构上的关系型数据库管理系统(RDBMS)。它始于1979年,最初是MichaelWidenius为瑞典的TcX公司创建的名为UNIREG的数据库系统,但当时的UNIREG没有SQL接口。1996年5月,Widenius开发出了今天众所周知的MySQL最初版本,随后就开始在互联网上公开发行。当前的最新版本是MySQL5.0。MySQL的概述MySQL的主要特征如下。性能高效而稳定,MySQL几乎比当前可用的其他所有数据库的性能都不差,因此Yahoo、Google、Cisco、HP和NASA等都采用了它作为自己的数据库引擎。开放源代码,MySQL是自由的开放源代码产品,可以在GPL下畅通使用。多用户支持,MySQL可有效地满足50~1000个并发用户的访问,并且在超过600个用户的限度的情况下,MySQL的性能并没有明显的下降。多线程,MySQL使用核心线程的完全多线程,这意味着可以采用多CPU体系结构。开放性,支持ANSISQL-99标准,适用于多种操作系统(如Linux、Solaris、FreeBSD、OS/2、MacOS以及Windows95/98/Me/2000/XP和WindowsNT等),可在多种体系结构(如Intelx86、Alpha、SPARC、PowerPC和IA64等)上运行。广泛的应用程序支持,有C、C++、Java、Perl、PHP和Python等多种客户工具和API的支持。支持事务处理、行锁定、子查询、外键和全文检索等功能。支持大数据库处理,可对某些包含50000000个记录的数据库使用MySQL。有灵活且安全的权限和口令系统,并且允许对其他主机的认证,等等。MySQL的安装几乎所有的Linux发行版本都内置了MySQL数据库,RedHatEnterpriseLinux5也不例外,它内置了MySQL-5.0.22-2.1,只不过系统安装程序默认并不安装它。读者可使用下面的命令检查系统是否已经安装了MySQL或查看已经安装了何种版本。rpm–qmysqlMySQL的安装如果系统还没有安装MySQL程序,要使用数据库服务,通常需要在RedHatEnterpriseLinux5的安装光盘中找到并安装以下RPM包文件:perl-DBI-1.52-1.fc6.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘);perl-DBD-MySQL-3.0007-1.fc6.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘);openssl-devel-0.9.8b-8.3.el5.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘);e2fsprogs-devel-1.39-8.el5.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘);krb5-devel-1.5-17.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘);zlib-devel-1.2.3-3.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘)。MySQL是客户程序及共享库,其对应的PRM包文件为:mysql-5.0.22-2.1.i386.rpm(位于RedHatEnterpriseLinux5的第2张安装光盘);mysql-server-5.0.22-2.1.i386.rpm(MySQL数据库服务,位于RedHatEnterpriseLinux5的第2张安装光盘);mysql-bench-5.0.22-2.1.i386.rpm(MySQL数据库基准和性能测试工具,位于RedHatEnterpriseLinux5的第3张安装光盘);mysql-devel-5.0.22-2.1.i386.rpm(开发MySQL程序时使用的库和头文件,位于RedHatEnterpriseLinux5的第3张安装光盘)。要安装上述RPM包文件,可将RedHatEnterpriseLinux5的安装盘放入光驱,加载光驱后在光盘的Server目录下找到相应的RPM安装包文件,然后使用rpm-ivh命令安装12.3MySQL服务的配置和使用•修改MySQL管理员的口令•数据库的创建和删除•表的创建、复制、删除和修改•表中数据的插入、删除和修改•索引的创建与删除•用户的创建和删除•用户权限的设置修改MySQL管理员的口令使用下面格式的mysqladmin命令创建MySQL管理员root的密码。mysqladmin-urootpassword密码字符串要连接MySQL服务器,就必须用以下格式的mysql命令。mysql[-h主机名或IP地址][-u用户名][-p]再想修改其密码,就必须使用以下格式的mysqladmin命令。mysqladmin-uroot-ppassword新密码字符串数据库的创建和删除1.创建数据库在MySQL中创建数据库的SQL语句格式为:CREATEDATABASE数据库名称;2.选择数据库要选择一个数据库,使它成为所有事务的当前数据库,可使用以下格式的SQL语句。USE数据库名称;3.删除数据库要删除一个数据库及其所有表(包括表中的数据),可使用以下格式的SQL语句。DROPDATABASE数据库名称;表的创建、复制、删除和修改1.创建表在MySQL中创建表,可使用以下格式的SQL语句。CREATETABLE表名称(字段1,字段2,…字段n,[表级约束])[TYPE=表类型];其中:(1)字段i(i=1,2,…,n)的格式为:字段名字段类型[字段约束]表的创建、复制、删除和修改部分常用的字段类型类型描述INT允许值在0~232-1(无符号)或-231~231-1(有符号)之间的标准整数DOUBLE双精度浮点数CHAR最大长度不超过255个字符的定长字符串VARCHAR最大长度不超过255个字符的变长字符串TEXT最大长度为65535个字符的字符串BLOB可变数据的二进制类型DATEYYYYMMDD格式表示的日期值表的创建、复制、删除和修改约束描述NULL(或NOTNULL)指定允许(或不允许)某字段为空,默认为NULL(允许)DEFAULT为某字段指定一个默认值AUTO_INCREMENT自动为某个INT字段生成一个递增加1的整数常用的字段约束表级约束约束描述PRIMARYKEY为表指定主键FOREIGNKEY…REFERENCES为表指定外键INDEX创建索引UNIQUE为某个字段建立索引,该字段的值必须惟一FULLTEXT为某个字段建立全文索引表的创建、复制、删除和修改表类型表类型描述MYISAM具有很多优化和增强的特性,是MySQL默认的表类型ISAM类似MYISAM,但是功能较少HEAP保存在内存中,存取速度快,但存储量小,一旦失败就无法恢复BDB支持事务和页锁定INNODB支持事务、外键和行锁定,它是MySQL中最完善的表格式MERGE可把多个MyISAM表构建为一个虚拟表,使得对这些表的查询仿佛在一个表上进行,提高了查询速度和修复效率,并节省了磁盘空间表的创建、复制、删除和修改【例】要在学生选课数据库中创建一个名为student的表(存放学生的有关信息),可输入下面的命令。mysqlcreatetablestudent(-snovarchar(7)notnull,-snamevarchar(20)notnull,-ssexchar(1)default't',-sbirthdaydate,-sdepachar(20),-primarykey(sno)-);表的创建、复制、删除和修改2.复制表在MySQL5中,可以使用下面的SQL语句来复制表结构。CREATETABLE新表名称LIKE源表名称;3.删除表MySQL中删除一个或多个表的SQL语句格式为:DROPTBALE表名称1[,表名称2,…];4.修改表在创建表之后,如果修改表结构,例如添加、删除或者修改表字段,创建或撤销索引,更改表的名称和类型等,则需要使用ALTER语句来进行。ALTER语句的基本格式为:ALTERTABLE表名称更改动作1[,更改动作2,…]表中数据的插入、删除和修改1.插入记录在MySQL中,可以使用下面基本格式的SQL语句在表中插入记录。INSERTINTO表名称(字段名1,字段名2,…)VALUES(字段1的值,字段2的值,…);2.删除记录在MySQL中,可使用下面基本格式的SQL语句从表中删除记录。DELETEFROM表名称WHERE条件表达式;3.修改记录除了数据的插入和删除,表中的数据也经常要进行更新。为此,MySQL提供了用于修改记录中数据的SQL语句——UPDATE,该语句的基本格式为:UPDATE表名称SET字段名1=字段值1[,字段名2=字段值2…]WHERE条件表达式;索引的创建与删除1.在创建表的同时创建索引使用PRIMARYKEY子句为该表指定了一个主键sno,MySQL就会自动为该表的sno字段创建索引。此外,在创建表时,还可以用INDEX子句或UNIQUE子句来创建索引。2.向已存在的表添加索引使用CREATEINDEX语句可向已存在的表添加索引,该语句的基本格式如下:CREATE[UNIQUE]INDEX索引名ON表名称(字段名1[(长度)],…);3.删除索引当不再需要索引时,可使用DROPINDEX语句删除它,该语句的格式为:DROPINDEX索引名ON表名称;用户的创建和删除原来当首次安装MySQL时,MySQL安装程序在数据库mysql中设置5个MySQL授权表(如表12-5所示),由这5个授权表共同决定哪个用户可以连接服务器、从哪里连接以及连接后可以执行哪些操作。初始化时,表host、tables_priv和columnts_priv是空的,表user和db就决定了MySQL默认的访问规则。下面以MySQL管理员的身份查看一下表user和db的内容。授权表描述user定义哪些用户从哪些主机可以连接到数据库服务器,这些用户的密码以及它们对系统中所有数据库的访问权限(全局权限)db定义连接到数据库服务器的那些用户可以使用哪些数据库,在这些数据库中可执行哪些操作(数据库级权限),db通常与host配合使用host当表db中的Host字段值为空时,由表host定义用户可以从哪些主机连接到数据库服务器,且不同的主机对指定的数据库可有不同的权限tables_priv定义连接到数据库服务器的那些用户可以访问哪些表,以及在这些表中可以执行哪些操作(表级权限)columnts_priv定义连接到数据库服务器的那些用户可以访问哪些字段,以及在这些字段中可以执行哪些操作(字段级权限)授权表用户的创建和删除•查看数据库mysql中表user前4个字段的内容,可使用下面的命令。mysqlselecthost,user,password,select_privfrommysql.user;•要查看数据库mysql中表db的前4个字段内容,可使用下面的命令。mysqlselecthost,db,user,select_privfrommysql.db;用户的创建和删除1.创建新用户要创建一个新用户guest,并为他设置密码,同时允许它从任何主机连接到数据库服务器,可按以下步骤进行设置。①以MySQL管理员身份从本地连接到数据库服务器,可使用下面的命令实现。mysql-uroot-p②创建新用户guest,并为他设置密码,同时允许它从任何主机连接到数据库服务器,可使用下面的命令实现。mysqlinsertintomysql.us