第1章 mysql入门与初步.doc

上传人:飞****2 文档编号:60324640 上传时间:2022-11-15 格式:DOC 页数:26 大小:125KB
返回 下载 相关 举报
第1章 mysql入门与初步.doc_第1页
第1页 / 共26页
第1章 mysql入门与初步.doc_第2页
第2页 / 共26页
点击查看更多>>
资源描述

《第1章 mysql入门与初步.doc》由会员分享,可在线阅读,更多相关《第1章 mysql入门与初步.doc(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第一章 MySQL入门与初步1.1 MySQL简介1.1.1 MySQL是什么?MySQL是一个真正的多用户、多线程SQL数据库服务器。MySQL是一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储、更新和存取信息更容易。MySQL 主要目标是快速、健壮和易用。MySQL 并不是一个开放源代码的产品,因为在某些条件下使用它需要许可证。除非通过出售 MySQL 或出售需要它的服务来挣钱,否则,大体上说 MySQL 一般是免费的。1.1.2 我需要MySQL吗?如果您正在寻找一种免费

2、的或不昂贵的数据库管理系统,可以有几个选择,如,MySQL、mSQL、Postgres(免费但不支持来自商业供应商引擎的系统)等。与其他数据库系统进行比较之下,MySQL 具有许多吸引人之处:1、速度。MySQL 运行速度很快。2、容易使用。MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设置和管理相比,其复杂程度较低。3、价格。MySQL 对多数个人用户来说是免费的。4、支持查询语言。MySQL 可以利用 SQL,也可以利用支持 ODBC(开放式数据库连接)的应用程序。5、性能。多个客户机可同时使用多个数据库。可利用界面来交互式地访问 MySQL。这些界面为:命令行客户机程序

3、、Web 浏览器或 X Window System 客户机程序。此外,还有由各种语言编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。6、连接性和安全性。MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以控制哪些人不能看到您的数据。7、可移植性。MySQL 可运行在各种版本的 UNIX 以及非 UNIX 的系统上。MySQL 可运行在从家用 PC 到高级的服务器上。1.1.3 我需要付钱吗?对于一般的内部使用,MySQL通常是免费的。除非通过出售 MySQL 或出售需要它的服

4、务来挣钱,否则,大体上说 MySQL 一般是免费的。商业程序中包含客户代码不需要许可证,MySQL的客户端存取部分不属公共领域,mysql命令行客户程序包含在 GNU 通用许可证下的 readline 库的代码。 1.1.4 如何得到MySQL?用于ODBC驱动程序MyODBC、JDBC驱动程序mm.mysql、用PHP写成的客户程序phpMyAdmin、以及其它各种第三方客户机。Active PerlPerl DBIhttp:/www.symbolstone.org/technology/perl/DBIPHPApachehttp:/www.apache.org1.1.5总结l MySQL是

5、一个关系数据库系统,支持SQL查询语言。l MySQL可以是免费的。l MySQL系统的速度非常快,同样它的性能也是十分优良的。l MySQL是一个管理简捷的数据库,它没有庞大而臃肿的可视化管理工具。1.2 关系数据库管理系统数据库是一个服务于一个核心目标的数据的有组织的集合。数据库中的数据是有组织的,从某种意义上说,数据库中存储的数据采用一种不变的方式被存储、格式化、存取以及显示。因为数据库不含有无关的或冗余的数据,它可以适用于一个核心目标。一本电话簿就是一个很好的数据库例子,它包含有关的数据(名字),让人们能够查找电话号码;它不包含无关的数据,如某人的电话机的颜色;它只贮存那些与它的目标相

6、关的信息。1.2.1 关系数据库系统RDBMS,即关系数据库管理系统,为了进一步了解一个RDBMS 是由什么构成的,你必须先了解关系模型。下列情况出现在一个关系模型中:l 数据的基础项是关系。l 在这些表上的操作只产生关系(关系型闭合)。什么是关系?这是一个描述两个集合的元素如何相互联系或如何一一对应的数学概念。因此,关系模型是建立在数学基础上的。然而,对你来说,关系只是一个带有一些特殊属性的表,一个关系模型把数据组织到表中,而且仅在表中。客户、数据库设计者、数据库系统管理员和用户都以同样的方式即从表中查看数据。那么,表就是关系模型的近义词。一个关系型表有一组命名的属性(attribute)或

7、列,以及一组元组(tuple)或行。有时列被称为域,行被称为记录,列和行的交集通常被叫做单元。列标示位置,有作用域或数据类型,例如字符或整数。行自己就是数据。一个关系表必须符合某些特定条件,才能成为关系模型的一部分:1、贮存在单元中的数据必须是原子的。每个单元只能存贮一条数据,这也叫信息原则(Information Principle )。尽管在过去的数年中按某些违反这一条的方式已经建立了许多系统,但违反这一条将不能运用良好的设计原则。当一个单元包含多于一条的信息时,这叫做信息编码(information coding )。在这样的情况下,是否采用违背理论的方案是一个设计的选择问题,尽管在多数

8、情况下,结果证明这对数据的完整性是一不利的。2、贮存在列下的数据必须具有相同数据类型。3、每行是唯一的(没有完全相同的行)。4、列没有顺序。5、行没有顺序。6、列有一个唯一性的名称。除了表和它们的属性,关系模型有它自己特殊的操作。不需要深入研究关系型数学,只需说明这些操作可能包括列的子集、行的子集、表的连接以及其他数学集合操作(如联合)等就足够了。真正要知道的事情是这些操作把表当作输入,而将产生的表作为输出。S Q L 是当前R D B M S 的A N S I 标准语言,它包含这些关系型操作。允许数据操作或数据处理的主要语句是S E L E C T 、I N S E RT 、U P D AT

9、 E 和D E L E T E 。因此,这些数据处理操作中任何一个都是一个事务。允许数据定义或结构化处理的基本语句是C R E AT E 、A LT E R 和D R O P 。关系模型要求的最后一件事是两个基础的完整性原则。它们是实体完整性原则(e n t i t y integrity rule )和引用完整性原则(referential integrity rule )。首先,让我们看看两个定义:1、主键(primary key )是能唯一标识行的一列或一组列的集合。有时,多个列或多组列可以被当作主键。2、由多个列构成的主键被称为连接键(concatenated key )、组合键(co

10、mpound key ),或者更常称为复合键(composite key )。数据库设计者决定哪些列的组合能够最准确和有效地反映业务情形,这并不意味着其他数据未被存贮,只是那一组列被选作主键而已。剩余有可能被选为主键的列被叫做候选键(candidate key )或替代键(alternate key )。一个外键(foreign key )是一个表中的一列或一组列,它们在其他表中作为主键而存在。一个表中的外键被认为是对另外一个表中主键的引用。实体完整性原则简洁地表明主键不能全部或部分地空缺或为空,引用完整性原则简洁地表明一个外键必须为空或者与它所引用的主键当前存在的值相一致。一个R D B M

11、 S 就是一个建立在前面这些关系模型基础上的,一般能满足所提到的全部要求的D B M S 。但是,在7 0 年代末到8 0 年代初,R D B M S 开始销售的时候,S Q L 超越了本质为非关系型的系统,受到普遍欢迎,并被称作关系型。1.2.2 数据库系统的发展1969年美国的IBM公司开发了第一个数据库系统IMS。这是一个层次数据库系统,在数据库系统发展史上有着重要的地位。同年,美国的数据系统语言委员会(CODASYL)下属的数据库任务组提出了著名的DBTG报告,并在1970年提出了该报告的修订版。这份报告定义了数据库操纵语言、模式定义语言和子模式定义语言的概念。数据库操纵语言用于编写操

12、纵概念视图的应用程序,模式定义语言用来编写概念视图和内部视图相结合的模式程序。在七十年代,开发了许多遵循DBTG报告的网状数据库系统,如:IDMS, IDS, DMSIIOO等。七十年代初,E.F.Codd提出了关系数据模型的概念,提出了关系代数和关系演算。在整个七十年代,关系数据库从理论到实践都取得了辉煌成果。在理论上,确立了完整的关系理论、数据依赖理论以及关系数据库的设计理论等等;在实践上,开发了许多著名的关系数据库系统,如:system R, INGRES, ORACLE等。1986年美国国家标准协会(ANSI)通过了关系数据库查询语言SQL的文本标准。进入八十年代以后,随着计算机硬件技

13、术的提,使得计算机应用不断深入,产生了许多新的应用领域,如:计算机辅助设计、计算机辅助教学、计算机辅助制造、计算机辅助工程、计算机集成制造、办公自动化、地理信息处理、智能信息处理等等。这些新的应用领域对数据库系统提出了新要求。由于没能设计出一个统一的数据模型来表示这些新型数据及其相互联系,所以出现了百家争鸣的局面,产生了演绎数据库(逻辑数据库,知识库)、面向对象数据库、工程数据库、时态数据库、地理数据库、模糊数据库、积极数据库、等新型数据库的研究。到八十年代后期和九十年代初期,出现了面向对象数据库系统,如:GemStone, VBASE, ORION, Iris等。到目前为止,真正的新一代数据

14、库系统还没有出现。1.2.3 与数据库系统通讯结构化查询语言(Structured Query Language ,SQL)是当今主要的查询语言,它主要用于管理主流类型的D B M S 关系型D B M S (R D B M S )。所有与数据库相关的通信往来都将通过D B M S 完成,为了做这件事,你可以使用S Q L 或其他类似的东西。数据库系统管理员(D B A )使用查询语言来建立并维护数据库,用户使用查询语言来访问数据库并查看或更改数据。1.2.4 MySQL的体系结构因为 MySQL 采用的是客户机/服务器体系结构,所以你在使用 MySQL 时存取数据时,必须至少使用两个或者说两

15、类程序:1、一个位于存放您的数据的主机上的程序数据库服务器。数据库服务器监听从网络上传过来的客户机的请求并根据这些请求访问数据库的内容,以便向客户机提供它们所要求的信息。2、连接到数据库服务器的程序客户机,这些程序是用户和服务器交互的工具,告诉服务器需要什么信息的查询。MySQL 分发包包括服务器和几个客户机程序。可根据要你要达到的目的来选择使用客户机。最常用的客户机程序为 mysql,这是一个交互式的客户机程序,它能发布查询并看到结果。其他的客户机程序有: mysqldump 和 mysqlimport,分别导出表的内容到某个文件或将文件的内容导入某个表;mysqladmin 用来查看服务器

16、的状态并完成管理任务,如告诉服务器关闭、重起服务器、刷新缓存等。如果具有现有的客户程序不满足你的需要,那么MySQL还提供了一个客户机编程库,可以编写自己的程序。客户机编程库可直接从 C 程序中调用,如果希望使用 C 语言以外的其他语言,还有几种其他的接口可用。MySQL 的客户机/服务器体系结构具有如下优点:1、服务器提供并发控制,使两个用户不能同时修改相同的记录。所有客户机的请求都通过服务器处理,服务器分类辨别谁准备做什么,何时做。如果多个客户机希望同时访问相同的表,它们不必互相裁决和协商,只要发送自己的请求给服务器并让它仔细确定完成这些请求的顺序即可。2、不必在数据库所在的机器上注册。M

17、ySQL 可以非常出色的在因特网上工作,因此您可以在任何位置运行一个客户机程序,只要此客户机程序可以连接到网络上的服务器。当然不是任何人都可以通过网络访问你的MySQL服务器。MySQL 含有一个灵活而又有成效的安全系统,只允许那些有权限访问数据的人访问。而且可以保证用户只能够做允许他们做的事。1.2.5总结本节简单介绍了一下关系数据库系统的基础知识,真正要详尽描述数据库系统的理论,完全可以写成几本书。读完本节之后,笔者希望读者能够了解什么是关系模型、SQL语言以及MySQL的系统结构,这不仅对继续阅读本书有利,也可以在读者获取相关知识时,起到一个启发的作用。1.3 MySQL使用的SQL语言

18、MySQL使用结构化查询语言(Structured Query Language,SQL)与服务器通讯。MySQL系统使用的SQL语言基本上符合SQL92的标准,但是其对SQL92标准既有扩展,又有未实现的地方。1.3.1 表、列和数据类型表是数据在一个MySQL数据库中的存储机制,如表1-1所示,它包含一组固定的列。表中的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。列由两部分组成:数据类型(datatype)和长度(length)。对于使用NUMERIC 数据类型的列,可以指定列的小数位及精度特性,精度决定数值的有效位数,小数位表示数值的小数点位置。说明为NUMERIC(9

19、,2)的列表示该列总共有9位数,其中2位数在小数点右边。缺省的数值精度为10位数。表1-1 一个数据表techersIdNameTelSex1TomM2MarryF3MikeM4JerryM注意,在上表中你可能会有每行记录是按顺序记录的印象,假设你想取出表中的前十个记录。使用传统的编程语言,你可以做一个循环,取出前十个记录后结束循环。但使用标准的SQL查询,这是不可能实现的。因为在关系数据模型中,记录就是行是没有顺序的,也就是说,在一个表中不存在前十个记录这种概念。1.3.2函数函数(function)是存储在数据库中的代码块。其差别在于函数可以把值返回调用程序。你可以建立自己的函数,并在SQ

20、L语句中调用它们,就像执行Oracle提供的函数一样。例如,MySQL提供一个SUBSTRING函数来执行字符串上的“取子串”操作,如果创建一个叫做MYSUB的函数来执行一个自定义的取子串操作,就可以在一个SQL命令中调用它:SELECT MYSUB(This is a test,6,2)1.3.3 SQL的语句SQL是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定。非过程化程序设计语言的优点在于它的简单易学,因此已经成为关系数据库访问和操纵数据的标准语言。 与之相对应的是过程化程序设计语言,我们平常熟

21、悉的各种高级程序设计语言都属于这一范畴。这种语言的特点是:一条语句的执行是与其前后的语句和控制结构(如条件语句、循环语句等)相关的。与SQL相比,这些语言显得比较复杂,但优点是使用灵活,数据操纵能力非常强大。这种语言被设计为不允许你按照某种特定的顺序来取出记录,因为这样做会降低SQL Sever取记录的效率。使用SQL,你只能按查询条件来读取记录。 当考虑如何从表中取出记录时,自然会想到按记录的位置读取它们。例如,也许你会尝试通过一个循环,逐个记录地扫描,来选出特定的记录。在使用SQL时,你必须训练自己,不要有这种思路。 假如你想选出所有的名字是“Tom”的记录,如果使用传统的编程语言,你也许

22、会构造一个循环,逐个查看表中的记录,看名字域是否是“Tom”。 这种选择记录的方法是可行的,但是效率不高。使用SQL,你只要说,“选择所有名字域等于Tom的记录”,SQL就会为你选出所有符合条件的记录。SQL会确定实现查询的最佳方法。例如,我们从表1-1中取出id为1的数据:SELECT * FROM teachers WHERE id=1相同的功能用普通的高级语言,也许需要一个复杂的循环。1.3.4总结在这一节中,简单介绍了SQL查询语言的基本知识,对于列数据类型、SQL的各种语句,将在以后的章节中介绍,这是一个很长的过程。1.4 MySQL数据处理MySQL支持大量的列类型,它可以被分为3

23、类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意简化,更详细的说明应该考虑到有关特定列类型的附加信息,例如你能为其指定值的允许格式。1.4.1 MySQL的数据MySQL有几种数据类型,你应该了解它们是怎么使用的:1.4.1.1、字符串值字符串是类似”I like mysql.”和MySQL is powerful.等这样的值,它们既可以用双引号括起来,也可以是用单引号。在字符串中不仅可以使用普通的字符,也可使用几个转义序列,它们用来表示特殊的字符,见表 1-2。每个转义序列以一

24、个反斜杠(“”)开始,指出后面的字符使用转义字符来解释,而不是普通字符。注意 NUL 字节与 NULL 值不同;NUL 为一个零值字节,而 NULL 代表没有值。表1-2 字符串转移序列表序列涵义0一个ASCII 0 (NUL)字符n一个新行符r一个回车符(Windows中使用rn作为新行标志)t一个定位符b一个退格符一个单引号(“”)符”一个双引号(“”)符一个反斜线(“”)符%一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符_一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符现在需要注意的是,如何在串中使用引号,你可以有多种

25、办法:l 如果串是用相同的引号括起来的,那么在串中需要引号的地方重复写该引号即可。l 如果串是用另外的引号括起来的,则不需要双写相应引号,直接在串中使用,该引号不被特殊对待。l 使用反斜杠,用转移序列的方式表示;这种方法不去管用来将串括起的是单引号还是双引号。例如,下面语句的结果是:mysql SELECT hello, hello, hello, hello, hello;+-+-+-+-+-+| hello | hello | hello | hello | hello |+-+-+-+-+-+1.4.1.2数字值MySQL中的数字是类似于100或3.这样的值。MySQL 支持说明为整数(

26、无小数部分)或浮点数(有小数部分)的值:l 整数由数字序列组成。浮点数由一个阿拉伯数字序列、一个小数点和另一个阿拉伯数字序列组成。两个阿拉伯数字序列可以分别为空,但不能同时为空。l MySQL 支持科学表示法。科学表示法由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”,必须具有)和一个整数指数来表示。l 数值前可放一个负号“-”以表示负值。例如,下面都是合法的数值:整数值:1221 0 -32浮点数:294.42 -32032.6809e+10 148.下面的值是错误的:1.34E121.4.1.3十六进制值MySQL支持十六进制值。以十六进制形式表示的整数由“0x”后跟一个或多个十

27、六进制数字(”0”到“9”及“a”到“f”)组成。例如,0x0a 为十进制的 10,而 0xffff 为十进制的 65535。十六进制数字不区分大小写,但其前缀“0x”不能为“0X”。即 0x0a 和 0x0A 都是合法的,但 0X0a 和 0X0A 不是合法的。在数字上下文,它们表现类似于一个整数(64位精度)。在字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一个字符。 例如:mysql select 0xc+0, 0xc;其结果为:+-+-+| 0xc+0 | 0xc |+-+-+| | Paul |+-+-+1.4.1.4日期和时间值日期和时间值是一些类似于

28、“1999-06-17”或“12:30:43”这样的值。MySQL 还支持日期/时间的组合,如“1999-06-17 12:30:43”。需要要特别注意的是,MySQL 是按年-月-日的顺序表示日期的。这可能与你学过的高级语言不同。1.4.1.4 NULL值NULL值可适用于各种列类型,它通常用来表示“没有值”、 “无数据”等意义,并且不同于例如数字类型的0为或字符串类型的空字符串。1.4.2列类型概述数据库中的每个表都是由一个或多个列构成的。可以用 CREATE TABLE 语句创建一个表,创建表时要为每列指定一个类型。列的类型与数据类型相对应,但是比数据类型更为具体,用列类型描述表列可能包

29、含的值的种类以及范围,列的值必须符合规定,不能包含对应的数据类型所允许的所有值。例如,CHAR(16)就规定了存储的字符串值必须是16位。当然不是你必须存储16个字符,而是指列在表中要占16个字符的宽度的。MySQL的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了 MySQL 怎样处理这些值。例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些值的类型,MySQL 对它们的处理将会有些不同。每种列类型都有几个特性如下:l 其中可以存放什么类型的值。l 值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。

30、l 该类型的值怎样比较和存储。l 此类型是否允许 NULL 值。l 此类型是否可以索引。下面是创建一个表的例子:CREATE TABLE teacher(id TINYINT UNSIGNED NOT NULL,name CHAR(16) NOT NULL,tele NUMERIC(8),sex ENUM(F,M) DEFAULT M)由上面这个例子可以知道,创建列类型的语法是:col_name col_type col_attributesgeneral_attributesl col_name 列的名字l col_type 列类型,控制存储在列中的数据类型l col_attributes

31、专用属性,只能应用于制定列,例如,我们还不知道的BINARY。如果你使用专用属性,必须在列的类型之后,列的通用属性之前。l general_attributes通用属性,可以应用在出少数列的任意列,例如上面提到了NULL、NOT NULL、和DEFAULT。我们将简要地考察一下 MySQL列类型以获得一个总的概念,然后更详细地讨论描述每种列类型的属性。MySQL的数字类型如表1-3所示,可以包括浮点类型和整数类型:表1-3 MySQL的数字列类型类型名涵义TINYINT一个很小的整数SMALLINT一个小整数 MEDIUMINT一个中等大小整数 INT、INTEGER一个正常大小整数 BIGI

32、NT一个大整数 FLOAT一个小(单精密)浮点数字 DOUBLEDOUBLE PRECISIONREAL一个正常大小(双精密)浮点数字 DECIMALNUMERIC一个未压缩(unpack)的浮点数字,“未压缩”意味着数字作为一个字符串被存储MySQL的字符串类型如表1-4所示,串类型中不仅可以存储字符串,实际上任何二进制数据,例如,图象、音频、视频等,都可以存储在串类型中。表1-4 MySQL的字符串列类型类型名涵义CHAR一个定长字符串VARCHAR一个变长字符串 TINYBLOB TINYTEXT最大长度为255(28-1)个字符的BLOB或TEXT列 BLOBTEXT最大长度为6553

33、5(216-1)个字符的BLOB或TEXT列 MEDIUMBLOB MEDIUMTEXT最大长度为(224-1)个字符的BLOB或TEXT列 LONGBLOBLONGTEXT最大长度为(232-1)个字符的BLOB或TEXT列ENUM(value1,value2,.)枚举:列只能赋值为某个枚举成员或NULLSET(value1,value2,.)集合:列可以赋值为多个集合成员或NULLMySQL的日期与时间类型如表1-5所示。MySQL允许你存储某个“不严格地”合法的日期值,例如1999-11-31,原因我们认为它是应用程序的责任来处理日期检查,而不是SQL服务器。为了使日期检查更“快”,My

34、SQL仅检查月份在0-12的范围,天在0-31的范围。表1-5 MySQL的时间和日期列类型类型名涵义DATE一个日期,以YYYY-MM-DD格式来显示TIME一个日期和时间组合,以YYYY-MM-DD HH:MM:SS格式来显示DATETIME最大长度为255(28-1)个字符的BLOB或TEXT列TIMESTAMP一个时间戳,以YYYMMDDHHMMSS格式来显示1.4.3 数字列类型 MySQL支持所有的ANSI/ISO SQL92的数字类型。这些类型包括准确数字的数据类型(NUMERIC, DECIMAL, INTEGER,和SMALLINT),也包括近似数字的数据类型(FLOAT,

35、REAL,和DOUBLE PRECISION)。关键词INT是INTEGER的一个同义词,而关键词DEC是DECIMAL一个同义词。MySQL的数字列类型有两种:l 整型 MySQL提供了五种整型TINYINT、SAMLLINT、MEDIUMINT、INT和BIGINT。整数列可以用UNSIGNED禁用负数值。l 浮点型 MySQL提供了三种浮点型,FLOAT、DOUBLE和DECIMAL。下面,我们将详细描述数字类型的定义,取值范围和存储要求。1.4.3.1整数类型MySQL支持所有的ANSI/ISO SQL92的数字类型,其中的整数类型为INTEGER,和SMALLINT,关键词INT是I

36、NTEGER的一个同义词:SMALLINT(M) UNSIGNED ZEROFILL取值范围:有符号:-32768到32767(-215到215-1)无符号:0到65535(0到216-1)存储要求:2个字节INT(M) UNSIGNED ZEROFILL、INTEGER(M) UNSIGNED ZEROFILL取值范围:有符号:-到(-231到231-1)无符号:0到(0到2321)存储要求:4个字节作为对ANSI/ISO SQL92标准的扩展,MySQL也支持上表所列的整型类型TINYINT、MEDIUMINT和BIGINT:TINYINT(M) UNSIGNED ZEROFILL取值范围

37、:有符号:-128到127(-27和271)无符号:0到255(0到28-1)存储要求:1个字节MEDIUMINT(M)UNSIGNED ZEROFILL取值范围:有符号:-到(-223到223-1)无符号:0到(0到2241)存储要求:3个字节BIGINT(M)UNSIGNED ZEROFILL取值范围:有符号:-到(-263到263-1)无符号:0到(0到2641)存储要求:8个字节在为列选择了使用某种数值类型时,除了要考虑数据的类型外,还应该注意所要表示的值的范围和存储需求,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型

38、那样有效。对于整型值,如果数据取值范围较小,则TINYINT最合适。MEDIUMINT和INT虽然能表示能够表示更大的数值并且可用于更多类型的值,但存储代价更大。BIGINT 在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型 INT 类型的两倍,因此只在确实需要时才用。作为对ANSI/ISO SQL92标准的的另一个扩展, MySQL支持可选地指定一个整型值显示的宽度,用括号跟在基本关键词之后(例如,INT(4)。这个可选的宽度指定被用于其宽度小于列指定宽度的值得左填补显示,但是不限制能在列中被存储的值的范围;如果某个特定值的可打印表示需要不止 M 个字符,则显示完全的值;不会

39、将值截断以适合 M 个字符。当与可选的扩展属性ZEROFILL一起使用时,缺省的空格填补用零代替。例如,对于声明为INT(5) ZEROFILL的列,一个为4的值作为00004被检索。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。我们可以这样知道M和D的缺省值。先创建一个表CREATE TABLE number(tiny TINYINT,u_tiny TINYINT UNSIGNED,small SMALLINT,u_small SMALLINT UNSIGNED,medium MEDIUMINT,u_medium MEDIUMINT

40、UNSIGNED,num INT,u_num INT UNSIGNED,big BIGINT,u_big BIGINT UNSIGNED)然后显示这个表的结构DESCRIBE number在MySQL3.23上的结果如下:+-+-+| Field | Type |+-+-+| tiny | tinyint(4) | u_tiny | tinyint(3) unsigned | small | smallint(6) | u_small | smallint(5) unsigned | medium | mediumint(9) | u_medium | mediumint(8) unsigne

41、d | num | int(11) | u_num | int(10) unsigned | big | bigint(20) | u_big | bigint(20) unsigned |+-+-+1.4.3.2浮点数类型MySQL支持所有的ANSI/ISO SQL92的浮点数字类型。这些类型包括准确数字的数据类型(NUMERIC, DECIMAL),也包括近似数字的数据类型(FLOAT, REAL,和DOUBLE PRECISION)。关键词DEC是DECIMAL一个同义词:FLOAT(M,D) ZEROFILL取值范围:-3.E+38到-1.E-38,0 和1.E-38到3.E+38存储

42、要求:4个字节DOUBLE(M,D) ZEROFILL、DOUBLE PRECISION(M,D)ZEROFILL取值范围:-1.23157E+308到-2.72014E-308、 0和2.72014E-308到1.23157E+308存储要求:8个字节DECIMAL(M,D) ZEROFILL、NUMERIC(M, D) ZEROFILL取值范围:实际的范围可以通过M和D的选择被限制存储要求:M字节(低于3.23版本)M+2字节(3.23或更高版本)NUMERIC和DECIMAL类型表1-6 M和D对DECIMAL类型取值范围的影响 类 型 说 明取值范围(MySQL 3.23)取值范围(M

43、ySQL * 3.23)DECIMAL(4, 1)-9.9 到 99.9-999.9 到 9999.9DECIMAL(5, 1)-99.9 到 999.9-9999.9 到 99999.9DECIMAL(6, 1)-999.9 到 9999.9-99999.9 到 .9DECIMAL(6, 2)-99.99 到 999.99 -9999.99 到 99999.99DECIMAL(6, 3)-9.999 到 99.999-999.999 到 9999.999给定的 DECIMAL 类型的取值范围取决于MySQL 的版本。对于 MySQL 3.23 以前的版本,DECIMAL(M, D) 列的每个

44、值占用 M 字节,而符号(如果需要)和小数点包括在 M 字节中。因此,类型为 DECIMAL(5,2) 的列,其取值范围为 -9.99 到 99.99,因为它们覆盖了所有可能的 5 个字符的值。对于MySQL 3.23,DECIMAL 值是根据 ANSI 规范进行处理的,ANSI 规范规定 DECIMAL(M, D) 必须能够表示 M 位数字及 D 位小数的任何值。例如,DECIMAL(5, 2) 必须能够表示从 -999.99 到 999.99 的所有值。而且必须存储符号和小数点,因此自 MySQL 3.23 以来 DECIMAL 值占 M + 2 个字节。对于 DECIMAL(5, 2),

45、“最长”的值(-999.99)需要 7 个字节。在正取值范围的一端,不需要正号,因此 MySQL 利用它扩充了取值范围,使其超过了 ANSI 所规范所要求的取值范围。如 DECIMAL(5, 2) 的最大值为 9999.99,因为有 7 个字节可用。简而言之,在MySQL 3.23 及以后的版本中,DECIMAL(M, D) 的取值范围等于更早版本中的 DECIMAL(M + 2, D) 的取值范围。1.4.4 日期和时间类型MySQL提供几种时间和日期类型,包括日期和时间类型是DATETIME、DATE、TIMESTAMP、TIME和YEAR。对这几种时间和日期类型概述如下:DATA取值范围:“1000-01-01”到“9999-12-31”存储需求:3字节TIME取值范围:“-838:59:59”到“838:59:59”存储需求:3字节DATATIME 取值范围:“1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁