什么是MySQL?
本文介绍MySQL的体系结构和查询语言。
01、MySQL简介
MySQL是目前最流行的关系数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle 旗下产品。在Web应用方面,MySQL是最好的关系数据库管理系统支撑软件之一。MySQL将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,表之间通过外键建立关联,这样就增加了数据存取的速度并提高了数据操作的灵活性。MySQL使用最常用的标准化SQL定义、访问和操作数据库。其社区版的性能卓越,搭配PHP和Apache即可组建良好的开发环境。MySQL软件体积小、运行速度快、总体拥有成本低,特别是开放源码这一特点,一般中小型Web应用程序的开发都选择MySQL作为支撑数据库。
02、MySQL的体系结构
MySQL采用的是客户机/服务器(Client/Server)体系结构,因此,在使用MySQL存取数据时,必须至少使用两个或者两类程序。
(1) 在数据服务器上的数据库服务程序(对应Server端)。数据库服务程序监听从网络上传过来的客户机请求并根据这些请求访问数据库,并将结果返回给客户机以响应它们的请求。
(2) 连接到数据库服务器的客户机程序(对应Client端)。这些程序是用户和服务器交互的工具,负责将用户需求进行加工并传递到服务器以及将服务器返回的信息告知用户。
MySQL的分发包由服务器和几个客户机程序组成。程序员可以根据具体的需求来选择使用客户机。最常用的客户机程序为mysql,这是一个交互式的客户机程序,它能发布查询并看到结果。此外,其他的客户机程序有mysqldump和mysqlimport,分别导出表的内容到某个文件或将文件的内容导入某个表;mysqladmin用来查看服务器的状态并完成管理任务,如告诉服务器关闭、重启、刷新缓存等。如果现有的客户机程序不满足需要,MySQL还提供了一个客户机开发库,可以编写自己的程序。开发人员可以直接调用开发库中的C语言程序,如果希望使用其他语言,还有几种其他的接口可用。
MySQL的客户机/服务器体系结构具有如下优点。
(1) 服务器提供并发控制,使两个用户不能同时修改相同的记录。所有客户机的请求都通过服务器处理,服务器分类辨别谁准备做什么、何时做。如果多个客户机希望同时访问相同的表,它们不必互相裁决和协商,只要发送自己的请求给服务器并让它仔细确定完成这些请求的顺序即可。
(2) 不必在数据库所在的机器上注册。MySQL可以非常出色地在互联网上工作,因此用户可以在任何位置运行一个客户机程序,只要此客户机程序能够连接到网络上的服务器即可。当然,不是任何人都可以通过网络访问你的MySQL服务器。MySQL含有一个灵活而又有高效的安全系统,只允许有权限的人访问数据,而且可以保证用户只能够做允许的事情。
03、MySQL的查询语言
MySQL使用结构化查询语言(Structured Query Language,SQL)与服务器通信。MySQL系统使用的SQL基本上符合SQL 92的标准,但其对SQL 92标准既有扩展又有未实现的地方。
表、列和数据类型
表是数据在一个MySQL数据库中的存储单元。如表8-1所示,它是一张二维表,包含一组固定的列。表中的列描述该表所表示的实体的属性,每列都有一个名字及各自的特性。列由两部分组成:数据类型(Data Type)和长度(Length)。
■ 表1 MySQL中的表结构
MySQL常用的数据类型有数值类型、字符串类型及日期类型等。表2中给出了MySQL的基本数据类型及其描述。
■ 表2 常用的数据类型
函数
函数(Function)是存储在数据库中的代码块。程序员可以根据需要创建不同的函数,并直接在SQL语句中调用。函数可以把计算的结果直接返回给调用的SQL。例如,MySQL提供一个SUBSTRING函数来执行字符串上的“取子串”操作,如果创建一个叫作MYSUB的函数来执行一个自定义的取子串操作,就可以在一个SQL命令中调用它。如:
select mysub("This is a test", 6, 2)
SQL语句
SQL是一种典型的非过程化程序设计语言。这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定。非过程化程序设计语言的优点在于简单易学,因此SQL已经成为关系数据库访问和操纵数据的标准语言。
与SQL对应的是过程化程序设计语言,各种高级程序设计语言都属于这一范畴。该语言的特点是:一条语句的执行是与其前后的语句和控制结构(如条件语句、循环语句等)相关的。与SQL相比,这些语言显得比较复杂,但优点是使用灵活,数据操纵能力非常强大。
这些过程化的程序设计语言在访问数据库时一般不允许按照某种特定的顺序来读取表的记录,因为这样做会降低DBMS读取记录的效率。而使用SQL只能按查询条件来读取记录。当考虑如何从表中取出记录时,自然会想到按记录的位置读取它们。例如,也可以通过循环逐个记录地扫描,来选出特定的记录。但在使用SQL读取记录时,要尽量避免这种操作思路。
假如想选出所有名字是Tom的记录,如果使用传统的编程语言,可能会构造一个循环,逐个查找表中的记录,看名字字段内容是否匹配Tom。这种选择记录的方法是可行的,但是效率非常低。而用SQL时,只要说“选择所有名字域等于Tom的记录”,SQL就会筛选出所有符合条件的记录。SQL会确定实现查询的最佳方法。
例如,从表teachers中取出id为1的数据:
select * from teachers where id=1
实现相同的功能,如果用普通的高级语言,也许需要一个复杂的循环。
- 点赞
- 收藏
- 关注作者
评论(0)