[TOC] # 数据库应用 数据库是计算机应用系统中的一种专门管理数据资源的系统。数据库就是一组经过计算机整理后的数据,存储在一个或者多个文件中,而管理这个数据库的软件就称为数据库管理系统。 主流的软件开发中应用数据库有IBM的DB2,Oracle,Informix,Sybase,SQL Server,PostgreSQL,MySQL,Access,FoxPro和Teradata等。 # 数据库在Web开发中的重要地位 动态网站都是对数据进行操作,我们平时浏览网页时,会发现网页的内容会经常变化,而页面的主体结构框架没变,Web系统的开发基本上都离不开数据库,因为任何东西都要存放在数据库中。 所谓的动态网站就是基于数据库开发的系统,最重要的就是数据管理,或者说我们在开发时都是在围绕数据库在写程序。我们再来回顾下Web工作原理: ![](https://box.kancloud.cn/1aef191415b3dd1ba2e00700623f7c31_943x168.png) # 为什么PHP会选择MySQL作为自己的黄金搭档 PHP几乎可以使用现有的所有的数据库系统,MySQL与其他的大型数据库例如Oracle,DB2,SQL Server等相比,自有它的不足之处,如规模小,功能有限,但是丝毫没有影响它受欢迎的程度。 对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。 LAMP和LNMP中的其他三个软件也都是免费的,所以我们可以不花一分钱就可以建立起一个稳定,免费的网站系统。 # PHP和MySQL的合作方式 在同一个MySQL数据库服务器中可以创建多个数据库,如果把每个数据库看成是一个“仓库”,则网站中的内容数据就存储在这个仓库中,而对数据库中数据的存取及维护等,都是通过数据库系统软件管理的。 同一个数据库管理系统可以为不同的网站分别建立数据库,但为了使网站中的数据便于维护,备份及移植,最好为一个网站创建一个数据库。 MySQL数据库管理系统是一种“客户机/服务器”体系结构的管理软件,所以必须同时使用数据库服务器和客户机两个程序才能使用MySQL。 服务器程序用于监听客户机的请求,并根据这些请求访问数据库,以便向客户机提供它们所要求的数据。而客户机程序则必须通过网络连接到数据库服务器,才能向服务器提交数据操作请求。 PHP脚本程序作为MySQL服务器的客户机程序,是通过PHP中的MySQL扩展函数,对MySQL服务器中存储的数据进行获取,插入,更新及删除等操作。 # 结构化查询语言SQL 对数据库服务器中数据的管理,必须使用客户机程序成功连接以后,再通过必要的操作指令对其进行操作,这种数据库操作指令被称为SQL(Structured Query Language)语言,即结构化查询语言。 MySQL支持SQL作为自己的数据库语言,SQL是一种专门用于查询和修改数据库里的数据,以及对数据库进行管理和维护的标准化语言。 SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年退出以来,SQL语言得到了广泛的应用。 无论是Oracle,Sybase,Informix,SQL Server这些大型的数据库管理系统,还是像Visual Foxpro,PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。 ### SQL语言包含四个部分: * 数据定义语言(**DDL**):用于定义和管理数据对象,包括数据库,数据表等。例如:`CREATE`,`DROP`,`ALTER`等。 * 数据操作语言(**DML**):用于操作数据库对象中所包含的数据。例如:`INSERT`,`UPDATE`,`DELETE`语句。 * 数据查询语言(**DQL**):用于查询数据库对象中所包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据返回客户机中显示。例如:`SELETE` * 数据控制语言(**DCL**):是用来管理数据库的语言,包括管理权限及数据更改。例如:`GRANT`,`REVOKE`,`COMMIT`,`ROLLBACK`等。 # MySQL数据库的连接与关闭 ``` mysql –h 服务器主机地址 –u 用户名 –p 用户密码 ``` 只有客户机所在的主机被授予权限才能去连接MySQL服务器。 > 注意: 1.每个SQL命令都需要使用分号来完成 2.可以将一行命令拆成多行 3.可以通过\c来取消本行命令 4.可以通过\q、exit、ctrl+c或者quit来退出当前客户端 ### 我们可以使用help命令来查询快捷键: 将查询后的数据立起来:\G 取消当前未完成的操作:\c 退出当前客户端:\q 显示当前服务器状态:\s 显示帮助信息:\h(同help命令) 更改执行符:\d # 创建新用户并授权 ``` GRANT 权限 ON 数据库.数据表 TO 用户名@登录主机 IDENTIFIED BY “密码” ``` 例如: 添加一个新用户名为lijie,密码为字符串“jiege”。让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先要以root用户登录,然后输入以下命令: ``` GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO lisi@”%” IDENTIFIED BY “123” ``` # 创建数据库 * 建立数据库: ``` CREATE DATABASE [IF NOT EXISTS] 数据库名称; ``` * 删除数据库: ``` DROP DATABASE [IF EXISTS] 数据库名称; ``` * 显示当前数据库服务器下的所有数据库列表: ``` SHOW DATABASES; ``` * 选择数据库: ``` USE 数据库名称; ``` > 注意: 1.MySQL数据库中命令不区分大小写。 2.每创建一个数据库,就会在data目录下创建一个以此数据库名称命名的文件夹。 3.在Windows下,数据库名称也是不区分大小写的,但在Linux下,数据库名称严格区分大小写。 # 创建数据表 * 简单的创建数据表语法: ``` CREATE TABLE [IF NOT EXISTS] 表名称(字段1信息,字段2信息…字段N信息)[ENGINE=MyISAM DEFAULT CHARSET=UTF8]; ``` * 删除数据表: ``` DROP TABLE [IF EXISTS] 数据表名称; ``` * 修改表结构: ``` ALTER TABLE 数据表名称 相关操作; ``` # 数据表内容的简单管理 * 插入数据: ``` INSERT INTO 表名称[(字段名称)] VALUE(前面字段对应的值); ``` * 查询数据: ``` SELECT 字段名称1,字段名称2,… FROM 表名称 ``` * 更改数据: ``` UPDATE 数据表 set 字段名称=新修改的值 [WHERE 条件] ``` * 删除数据: ``` DELETE FROM 表名称 [WHERE 条件] ```