第1章 mysql入门与初步

更新时间:2023-11-02 08:38:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 MySQL入门与初步

1.1 MySQL简介

1.1.1 MySQL是什么? MySQL是一个真正的多用户、多线程SQL数据库服务器。MySQL是一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。

SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储、更新和存取信息更容易。

MySQL 主要目标是快速、健壮和易用。

MySQL 并不是一个开放源代码的产品,因为在某些条件下使用它需要许可证。除非通过出售 MySQL 或出售需要它的服务来挣钱,否则,大体上说 MySQL 一般是免费的。 1.1.2 我需要MySQL吗? 如果您正在寻找一种免费的或不昂贵的数据库管理系统,可以有几个选择,如,MySQL、mSQL、Postgres(免费但不支持来自商业供应商引擎的系统)等。

与其他数据库系统进行比较之下,MySQL 具有许多吸引人之处: 1、速度。MySQL 运行速度很快。

2、容易使用。MySQL 是一个高性能且相对简单的数据库系统,与一些更大系统的设臵和管理相比,其复杂程度较低。

3、价格。MySQL 对多数个人用户来说是免费的。

4、支持查询语言。MySQL 可以利用 SQL,也可以利用支持 ODBC(开放式数据库连接)的应用程序。

5、性能。多个客户机可同时使用多个数据库。可利用界面来交互式地访问 MySQL。这些界面为:命令行客户机程序、Web 浏览器或 X Window System 客户机程序。此外,还有由各种语言编写的界面。因此,可以选择使用已编好的客户机程序或编写自己的客户机应用程序。

6、连接性和安全性。MySQL 是完全网络化的,其数据库可在因特网上的任何地方访问,因此,可以和任何地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以控制哪些人不能看到您的数据。

7、可移植性。MySQL 可运行在各种版本的 UNIX 以及非 UNIX 的系统上。MySQL 可运行在从家用 PC 到高级的服务器上。 1.1.3 我需要付钱吗? 对于一般的内部使用,MySQL通常是免费的。除非通过出售 MySQL 或出售需要它的服务来挣钱,否则,大体上说 MySQL 一般是免费的。

商业程序中包含客户代码不需要许可证,MySQL的客户端存取部分不属公共领域,mysql命令行客户程序包含在 GNU 通用许可证下的 readline

库的代码。

1.1.4 如何得到MySQL? http://www.mysql.com/doc.html上可得到大部分需要的软件包:

用于ODBC驱动程序MyODBC、JDBC驱动程序mm.mysql、用PHP写成的客户程序phpMyAdmin、以及其它各种第三方客户机。

Active Perl http://www.activestate.com/ Perl DBI PHP Apache

http://www.symbolstone.org/technology/perl/DBI www.php.net

http://www.apache.org

1.1.5总结 ? ? ? ?

MySQL是一个关系数据库系统,支持SQL查询语言。 MySQL可以是免费的。

MySQL系统的速度非常快,同样它的性能也是十分优良的。

MySQL是一个管理简捷的数据库,它没有庞大而臃肿的可视化管理工具。

1.2 关系数据库管理系统

数据库是一个服务于一个核心目标的数据的有组织的集合。数据库中的数据是有组织的,从某种意义上说,数据库中存储的数据采用一种不变的方式被存储、格式化、存取以及显示。因为数据库不含有无关的或冗余的数据,它可以适用于一个核心目标。一本电话簿就是一个很好的数据库例子,它包含有关的数据(名

字),让人们能够查找电话号码;它不包含无关的数据,如某人的电话机的颜色;它只贮存那些与它的目标相关的信息。

1.2.1 关系数据库系统 RDBMS,即关系数据库管理系统,

为了进一步了解一个RDBMS 是由什么构成的,你必须先了解关系模型。下列情况出现在一个关系模型中:

? ?

数据的基础项是关系。

在这些表上的操作只产生关系(关系型闭合)。

什么是关系?这是一个描述两个集合的元素如何相互联系或如何一一对应的数学概念。因此,关系模型是建立在数学基础上的。然而,对你来说,关系只是一个带有一些特殊属性的表,一个关系模型把数据组织到表中,而且仅在表中。客户、数据库设计者、数据库系统管理员和用户都以同样的方式—即从表中—查看数据。那么,表就是关系模型的近义词。

一个关系型表有一组命名的属性(attribute)或列,以及一组元组(tuple)或行。有时列被称为域,行被称为记录,列和行的交集通常被叫做单元。列标示位臵,有作用域或数据类型,例如字符或整数。行自己就是数据。

一个关系表必须符合某些特定条件,才能成为关系模型的一部分: 1、贮存在单元中的数据必须是原子的。

每个单元只能存贮一条数据,这也叫信息原则(Information Principle )。尽管在过去的数年中按某些违反这一条的方式已经建立了许多系统,但违反这一条将不能运用良好的设计原则。当一个单元包含多于一条的信息时,这叫做信息编码(information coding )。在这样的情况下,是否采用违背理论的方案是一个设计的选择问题,尽管在多数情况下,结果证明这对数据的完整性是一不利的。

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 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 )是能唯一标识行的一列或一组列的集合。有时,多个列或多组列可以被当作主键。

还是双引号。

例如,下面语句的结果是:

mysql> SELECT 'hello', '\'\'hel''lo', '\\'hello';

+-------+---------+-----------+--------+--------+ | hello | \+-------+---------+-----------+--------+--------+

1.4.1.2数字值 MySQL中的数字是类似于100或3.1215936这样的值。MySQL 支持说明为整数(无小数部分)或浮点数(有小数部分)的值:

?

整数由数字序列组成。浮点数由一个阿拉伯数字序列、一个小数点和另一个阿拉伯数字序列组成。两个阿拉伯数字序列可以分别为空,但不能同时为空。 MySQL 支持科学表示法。科学表示法由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”,必须具有)和一个整数指数来表示。

?

数值前可放一个负号“-”以表示负值。 例如,下面都是合法的数值:

?

整数值:1221 0 -32

浮点数:294.42 -32032.6809e+10 148. 下面的值是错误的: 1.34E12

1.4.1.3十六进制值 MySQL支持十六进制值。以十六进制形式表示的整数由“0x”后跟一个或多个十六进制数字(”0”到“9”及“a”到“f”)组成。例如,0x0a 为十进制的 10,而 0xffff 为十进制的 65535。十六进制数字不区分大小写,但其前缀“0x”不能为“0X”。即 0x0a 和 0x0A 都是合法的,但 0X0a 和 0X0A 不是合法的。

在数字上下文,它们表现类似于一个整数(64位精度)。在字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一个字符。

例如:

mysql> select 0x5061756c+0, 0x5061756c; 其结果为:

+--------------+------------+ | 0x5061756c+0 | 0x5061756c | +--------------+------------+ | 1348564332 | Paul | +--------------+------------+

1.4.1.4日期和时间值 日期和时间值是一些类似于“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 语句创建一个表,创建表时要为每列指定一个类型。列的类型与数据类型相对应,但是比数据类型更为具体,用列类型描述表列可能包含的值的种类以及范围,列的值必须符合规定,不能包含对应的数据类型所允许的所有值。例如,CHAR(16)就规定了存储的字符串值必须是16位。当然不是你必须存储16个字符,而是指列在表中要占16个字符的宽度的。

MySQL的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了 MySQL 怎样处理这些值。例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些值的类型,MySQL 对它们的处理将会有些不同。每种列类型都有几个特性如下:

? ?

其中可以存放什么类型的值。

值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。 该类型的值怎样比较和存储。 此类型是否允许 NULL 值。

? ? ?

此类型是否可以索引。 下面是创建一个表的例子: CREATE TABLE teacher (

id TINYINT UNSIGNED NOT NULL, name CHAR(16) NOT NULL, tele NUMERIC(8),

sex ENUM(\)

由上面这个例子可以知道,创建列类型的语法是:

col_name col_type [col_attributes][general_attributes]

? ? ?

col_name 列的名字

col_type 列类型,控制存储在列中的数据类型

col_attributes 专用属性,只能应用于制定列,例如,我们还不知道的

?

BINARY。如果你使用专用属性,必须在列的类型之后,列的通用属性之前。 general_attributes通用属性,可以应用在出少数列的任意列,例如上面提

到了NULL、NOT NULL、和DEFAULT。

我们将简要地考察一下 MySQL列类型以获得一个总的概念,然后更详细地讨论描述每种列类型的属性。

MySQL的数字类型如表1-3所示,可以包括浮点类型和整数类型:

表1-3 MySQL的数字列类型

类型名 TINYINT SMALLINT MEDIUMINT INT、INTEGER BIGINT FLOAT DOUBLE DOUBLE PRECISION REAL DECIMAL NUMERIC 一个小整数 一个中等大小整数 一个正常大小整数 一个大整数 一个小(单精密)浮点数字 一个正常大小(双精密)浮点数字 涵义 一个很小的整数 一个未压缩(unpack)的浮点数字,“未压缩”意味着数字作为一个字符串被存储

MySQL的字符串类型如表1-4所示,串类型中不仅可以存储字符串,实际上任何二进制数据,例如,图象、音频、视频等,都可以存储在串类型中。

表1-4 MySQL的字符串列类型

类型名 CHAR VARCHAR TINYBLOB TINYTEXT BLOB TEXT MEDIUMBLOB MEDIUMTEXT LONGBLOB LONGTEXT ENUM('value1','value2',...) SET('value1','value2',...) 涵义 一个定长字符串 一个变长字符串 最大长度为255(2^8-1)个字符的BLOB或TEXT列 最大长度为65535(2^16-1)个字符的BLOB或TEXT列 最大长度为16777215(2^24-1)个字符的BLOB或TEXT列 最大长度为4294967295(2^32-1)个字符的BLOB或TEXT列 枚举:列只能赋值为某个枚举成员或NULL 集合:列可以赋值为多个集合成员或NULL

MySQL的日期与时间类型如表1-5所示。MySQL允许你存储某个“不严格地”合法的日期值,例如1999-11-31,原因我们认为它是应用程序的责任来处理日期检查,而不是SQL服务器。为了使日期检查更“快”,MySQL仅检查月份在0-12的范围,天在0-31的范围。

表1-5 MySQL的时间和日期列类型

类型名 DATE TIME DATETIME TIMESTAMP 涵义 一个日期,以'YYYY-MM-DD'格式来显示 一个日期和时间组合,以'YYYY-MM-DD HH:MM:SS'格式来显示 最大长度为255(2^8-1)个字符的BLOB或TEXT列 一个时间戳, 以YYYMMDDHHMMSS格式来显示 1.4.3 数字列类型 MySQL支持所有的ANSI/ISO SQL92的数字类型。这些类型包括准确数字的数据类型(NUMERIC, DECIMAL, INTEGER,和SMALLINT),也包括近似数字的数据类型(FLOAT, REAL,和DOUBLE PRECISION)。关键词INT是INTEGER的一个同义词,而关键词DEC是DECIMAL一个同义词。

MySQL的数字列类型有两种:

?

整型 MySQL提供了五种整型TINYINT、SAMLLINT、MEDIUMINT、INT和BIGINT。整数列可以用UNSIGNED禁用负数值。

浮点型 MySQL提供了三种浮点型,FLOAT、DOUBLE和DECIMAL。 下面,我们将详细描述数字类型的定义,取值范围和存储要求。

?

1.4.3.1整数类型 MySQL支持所有的ANSI/ISO SQL92的数字类型,其中的整数类型为INTEGER,和SMALLINT,关键词INT是INTEGER的一个同义词: SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

取值范围:有符号:-32768到32767(-215到215-1)无符号:0到65535(0到216-1)

存储要求:2个字节

INT[(M)] [UNSIGNED] [ZEROFILL]、INTEGER[(M)] [UNSIGNED] [ZEROFILL] 取值范围:有符号:-2147483648到2147483647(-231到231-1)无符号:0到4294967295(0到232-1)

存储要求:4个字节

作为对ANSI/ISO SQL92标准的扩展,MySQL也支持上表所列的整型类型TINYINT、MEDIUMINT和BIGINT:

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

取值范围:有符号:-128到127(-27和27-1)无符号:0到255(0到28-1) 存储要求:1个字节 MEDIUMINT[(M)]

[UNSIGNED] [ZEROFILL]

取值范围:有符号:-8388608到8388607(-223到223-1)无符号:0到16777215(0到224-1) 存储要求:3个字节

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

取值范围:有符号:-9223372036854775808到9223372036854775807(-263到263-1)无符号:0到18446744073709551615(0到264-1) 存储要求: 8个字节

在为列选择了使用某种数值类型时,除了要考虑数据的类型外,还应该注意所要表示的值的范围和存储需求,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,则TINYINT最合适。MEDIUMINT和INT虽然能表示能够表示更大的数值并且可用于更多类型的值,但存储代价更大。BIGINT 在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型 INT 类型的两倍,因此只在确实需要时才用。

作为对ANSI/ISO SQL92标准的的另一个扩展, MySQL支持可选地指定一个整型值显示的宽度,用括号跟在基本关键词之后(例如,INT(4))。这个可选的宽度指定被用于其宽度小于列指定宽度的值得左填补显示,但是不限制能在列中被存储的值的范围;如果某个特定值的可打印表示需要不止 M 个字符,则显示完全的值;不会将值截断以适合 M 个字符。当与可选的扩展属性ZEROFILL一起使用时,缺省的空格填补用零代替。例如,对于声明为INT(5) ZEROFILL的列,一个为4的值作为00004被检索。如果定义了一个没有明确宽度的整数列,将会自动分配给它一个缺省的宽度。缺省值为每种类型的“最长”值的长度。

我们可以这样知道M和D的缺省值。先创建一个表 CREATE TABLE number (

tiny TINYINT,u_tiny TINYINT UNSIGNED, small SMALLINT,u_small SMALLINT UNSIGNED,

本文来源:https://www.bwwdw.com/article/ajt2.html

Top