logo资料库

MySQL数据库从入门到精通.doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
第2章数据库和表的基本操作
本章学习目标
2.1MySQL支持的数据类型
2.1.1数值类型
2.1.2字符串类型
2.1.3日期时间类型
2.2数据库的基本操作
2.2.1创建和查看数据库
2.2.2使用数据库
2.2.3修改数据库
2.2.4删除数据库
2.3数据表的基本操作
2.3.1创建数据表
2.3.2查看数据表
2.3.3修改数据表
2.3.4删除数据表
2.4本章小结
2.5习题
第 2 章 数据库和表的基本操作 本章学习目标  熟练掌握 MySQL 支持的数据类型  熟练掌握数据库的基本操作  熟练掌握数据表的基本操作 上一章讲解了数据库的基本概念和 MySQL 的安装等内容,本章将继续讲解 MySQL 支 持的数据类型、数据库和数据表的基本操作。 2.1 MySQL 支持的数据类型 学习怎样使用 MySQL 操作数据库,首先要了解其支持的数据类型,MySQL 支持所有 标准的 SQL 数据类型,主要包括数值类型、日期时间类型和字符串类型,接下来详细讲解 这三种数据类型。 2.1.1 数值类型 MySQL 支持所有标准 SQL 中的数值类型,其中包括严格数据类型,例如 INTEGER、 SMALLINT、DECIMAL 和 NUMBERIC,以及近似数值数据类型,例如 FLOAT、REAL 和 DOUBLE PRESISION,并在此基础上进行扩展,扩展后增加了 TINYINT、MEDIUMINT 和 BIGINT 这三种长度不同的整型,另外还增加了 BIT 类型,用来存放位数据。 MySQL 中不同数值类型所对应的字节大小和取值范围是不同的,具体如表 2.1 所示。 表 2.1 MySQL 数值类型 数据类型 字节数 无符号数的取值范围 有符号数的取值范围 TINYINT SMALLINT MEDIUMINT INT / INTEGER BIGINT FLOAT DOUBLE 1 2 3 4 8 4 8 DECIMAL(M,D) M+2 0~255 0~65535 0~16777215 0~4294967295 0~18446744073709551615 -128~127 -32768~32767 -8388608~8388607 -2147483648~2147483647 -9223372036854775808~ 9223372036854775807 0 和 1.175494351E-38~ 3.402823466E+38 -3.402823644E+38~ -1.175494351E-38 0 和 2.2250738585072014E-308~ 1.7976931348623157E+308 -1.7976931348623157E+308~ 2.2250738585072014E-308 0 和 2.2250738585072014E-308~ 1.7976931348623157E+308 -1.7976931348623157E+308~ 2.2250738585072014E-308 表 2.1 中可以看出,占用字节最小的是 TINYINT,占用字节数最大的是 BIGINT, DECIMAL 类型的取值范围与 DOUBLE 类型相同。 MySQL 中支持的五个主要整数类型是 TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT。这些类型在很大程度上是相同的,只是它们存储值的大小是不相同的。 MySQL 支持的三个浮点类型是 FLOAT、DOUBLE 和 DECIMAL 类型。FLOAT 数值类
型用于表示单精度浮点数值,而 DOUBLE 数值类型用于表示双精度浮点数值。 2.1.2 字符串类型 MySQL 提 供 了 八 个 基 本 的 字 符 串 类 型 , 分 别 为 CHAR 、VARCHAR 、BINARY、 VARBINARY、BLOB、TEXT、ENUM 和 SET 类型,可以存储的范围从简单的一个字符到 巨大的文本块或二进制字符串数据,常见的字符串类型所对应的字节大小和取值范围如表 2.2 所示。 表 2.2 MySQL 字符串类型 数据类型 字节数 类型描述 CHAR VARCHAR TINYBLOB TINYTEXT BLOB TEXT MEDIUMBLOB MEDIUMTEXT LOGNGBLOB LONGTEXT VARBINARY(M) BINARY(M) 0~255 0~255 0~255 0~255 0~65535 0~65535 0~16777215 0~16777215 0~4294967295 0~4294967295 0~M 0~M 定长字符串 可变长字符串 不超过 255 个字符的二进制字符串 短文本字符串 二进制形式的长文本数据 长文本数据 二进制形式的中等长度文本数据 中等长度文本数据 二进制形式的极大文本数据 极大文本数据 允许长度 0~M 个字节的定长字节符串,值 的长度+1 个字节 允许长度 0~M 个字节的定长字节符串 表 2.2 列出了常见的字符串类型,其中有些类型比较相似,接下来详细讲解一些容易混 淆的类型。 1.CHAR 和 VARCHAR 类型 CHAR 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大 小修饰符的范围是 0~255,比指定长度大的值将被截短,而比指定长度小的值将会用空格作 填补。 CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二 进制方式参与运算,而不是以传统的区分大小写的方式。 CHAR 类型的一个变体是 VARCHAR 类型。它是一种可变长度的字符串类型,并且也 必须带有一个范围在 0~255 之间的指示器。CHAR 和 VARCHGAR 不同之处在于 MYSQL 数据库处理这个指示器的方式,CHAR 把这个大小视为值的大小,在长度不足的情况下就用 空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度(增 加一个额外字节来存储字符串本身的长度)来存储值,所以短于指示器长度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。 VARCHAR 类型可以根据实际内容动态改变存储值的长度,因此在不能确定字段需要多 少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率,VARCHAR 类型 在使用 BINARY 修饰符时与 CHAR 类型完全相同。 2.TEXT 和 BLOB 类型
对于字段长度超过 255 的情况下,MySQL 提供了 TEXT 和 BLOB 两种类型。根据存储 数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等 二进制数据类型。 TEXT 类型和 BLOB 类型的相同点具体如下。  在 TEXT 或 BLOB 列的存储或检索过程中,不存在大小写转换,当未运行在严格 模式时,如果为 BLOB 或 TEXT 列分配一个超过该列类型的最大长度值时,值会 被截取。如果截掉的字符不是空格,将会产生一条警告。  BLOB 和 TEXT 列都不能有默认值。  当保存或检索 BLOB 和 TEXT 列的值时不删除尾部空格。  对于 BLOB 和 TEXT 列的索引,必须指定索引前缀的长度。 TEXT 类型和 BLOB 类型的不同点具体如下。  TEXT 值是大小写不敏感的,而 BLOB 是大小写敏感的。  TEXT 被视为非二进制字符串,而 BLOB 被视为二进制字符串。  TEXT 列有一个字符集,并且根据字符集的校对规则对值进行排序和比较,BLOB 列没有字符集。  可以将 TEXT 列视为 VARCHAR 列,在大多数情况下,可以将 BLOB 列视为足够 大的 VARBINARY 列。  BLOB 可以储存图片,而 TEXT 不可以,TEXT 只能储存纯文本文件。 2.1.3 日期时间类型 在处理日期和时间类型的值时,MySQL 带有不同的数据类型可供选择。它们可以被分 成简单的日期、时间类型和混合的日期、时间类型。根据要求的精度,子类型在每个分类型 中都可以使用,并且 MySQL 带有内置功能,可以将多样化的输入格式变为一个标准格式。 日期和时间类型同样有对应的字节数和取值范围等,如表 2.3 所示。 表 2.3 MySQL 日期和时间类型 数据类型 字节数 取值范围 日期格式 零值 YEAR DATE TIME DATETIME TIMESTAMP 1 4 3 8 4 1901~2155 YYYY 0000 1000-01-01~9999-12-3 YYYY-MM-DD 0000-00-00 -838:59:59~838:59:59 HH:MM:SS 00:00:00 1000-01-01 00:00:00~ 9999-12-31 23:59:59 1970-01-01 00:00:01~ 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS 0000-00-00 00:00:00 0000-00-00 00:00:00 表 2.3 中,每种日期和时间类型都有一个有效范围。如果插入的值超过这个范围,系统 会报错,并将 0 值插入到数据库中,不同的日期与时间类型有不同的 0 值,上表中已经详细 列出。接下来详细讲解上表中的几种数据类型。 1.YEAR YEAR 类型使用 1 个字节来表示年份,MySQL 中以 YYYY 的形式来显示 YEAR 类型 的值,为 YEAR 类型的字段赋值表示方法如下。  使用 4 位字符串和数字表示。其范围是 1901~2155。输入格式为'YYYY'或 YYYY。 例如,输入‘2008’或者 2008,可直接保存 2008。如果超过了范围,就会插入 0000。
 使用两位字符串表示。‘00’~‘69’转换为 2000~2069,‘70’~‘99’转换为 1970~1999。 例如,输入‘35’,YEAR 值会转换成 2035,输入‘90’,YEAR 值会转换成 1990。  使用两位数字表示。1~69 转换为 2001~2069,70~99 转换为 1970~1999。这里就不 再举例。 另外,一般用 YEAR 类型来表示年份,所以在对该字段进行相关操作的时候,最好使 用四位字符串或者数字表示,不要使用两位的字符串和数字。 有时可能会插入 0 或者‘0’。这里要严格区分 0 和‘0’,如果向 YEAR 类型的字段插 入 0,存入该字段的年份是 0000;如果向 YEAR 类型的字段插入‘0’,存入的年份是 2000。 2.TIME 类型 TIME 类型使用 3 个字节来表示时间。MySQL 中以 HH:MM:SS 的形式显示 TIME 类型 的值。其中,HH 表示时,取值范围为 0~23,MM 表示分,取值范围为 0~59,SS 表示秒, 取值范围是 0~59。 TIME 类型的范围可以从‘-838:59:59’~‘838:59:59’。虽然小时的范围是 0~23, 但是为了表示某种特殊需要的时间间隔,将 TIME 类型的范围扩大了。而且还支持了负值。 TIME 类型的字段赋值表示方法如下。  表示‘D HH:MM:SS’格式的字符串。其中,D 表示天数,取值范围是 0~34。保 存时,小时的值等于(D*24+HH)。例如,输入‘2 11:30:50’,TIME 类型会转 换为 59:30:50。当然,输入时可以不严格按照这个格式,可以是‘HH:MM:SS’、 'HH:MM'、'D HH:MM'、'D HH'、'SS'等形式。例如,输入‘30’,TIME 类型会自 动转换为 00:00:30。  表示‘HHMMSS’格式的字符串或 HHMMSS 格式的数值,例如,输入‘123456’, TIME 类型会转换成 12:34:56。如果输入 0 或者‘0’,那么 TIME 类型会转换为 0000:00:00。  使 用 current_time 或 者 current_time() 或 者 now() 输 入 当 前 系 统 时 间 , 这 些 属 于 MySQL 的函数,会在以后的章节讲解。 还需注意的是,一个合法的 TIME 值,如果超出了 TIME 的范围,将被截取为范围最接 近的端点。举个例子,‘880:00:00’将会被转换为 838:59:59。另外,无效的 TIME 值, 在命令行下无法被插入到表中。 3.DATE 类型 DATE 类型使用 4 个字节来表示日期。MySQL 中是以 YYYY-MM-DD 的形式显示 DATE 类型的值。其中,YYYY 表示年,MM 表示月,DD 表示日。DATE 类型的范围是‘1000-01-01’ ~‘9999-12-31’。DATE 类型的字段赋值表示方法如下。  表示‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串,DATE 类型可以表达 的范围是‘1000-01-01’~‘9999-12-31’。例如,输入‘4008-2-8’,DATE 类型将 转换为 4008-02-08;输入‘40080308’,DATE 类型将转换为 4008-03-08。  MySQL 中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。如 ‘YYYY/MM/DD’、‘YYYY@MM@DD’和‘YYYY.MM.DD’等分隔形式。例 如,输入‘2011.3.8’,DATE 类型将转换为 2011-03-08。  表示‘YY-MM-DD’或者‘YYMMDD’格式的字符串,其中‘YY’的取值,‘00’ ~‘69’转换为 2000~2069,‘70’~‘99’转换为 1970~1999,与 YEAR 类型类似。 例如,输入‘35-01-02’,DATE 类型将转换为 2035-01-02,输入‘800102’,DATE 类型将转换为 1980-01-02。  同 样 的 , MySQL 中 也 支 持 一 些 不 严 格 的 语 法 格 式 , 如 ‘ YY/MM/DD ’,
‘YY@MM@DD’,‘YY.MM.DD’等分隔形式。例如,输入‘89@3@8’,DATE 类型将转换为 1989-03-08。  YYYYMMDD 或 YYMMDD 格式的数字表示。其中,‘YY’的取值,‘00’~‘69’ 转换为 2000~2069,‘70’~‘99’转换为 1970~1999。与 year 类型类似。例如,输 入 20080808,DATE 类型将转换为 2008-08-08;输入 790808,DATE 类型将转换为 1979-08-08;输入 0,那么 DATE 类型会转化为 0000-00-00。  使用 current_date 或 now()输入当前系统时间,这些属于 MySQL 的函数,会在以后 的章节讲解。 在实际开发中,如果只需要记录日期,选择 DATE 类型是最合适的,因为 DATE 类型 只占用 4 个字节,需要注意的是,虽然 MySQL 支持 DATE 类型的一些不严格的语法格式, 但是,在实际应用中,最好还是选择标准形式。日期中使用“-”做分隔符,时间用“:”做 分隔符,中间用空格隔开,格式如 2016-03-17 16:27:55。当然如果有特殊需要,可以使用“@”, “*”等特殊字符做分隔符。 4.DATETIME 类型 DATETIME 类 型 使 用 8 个 字 节 来 表示 日 期 和 时 间 。MySQL 中 以 ‘YYYY-MM-DD HH:MM:SS’的形式来显示 DATETIME 类型的值。从其形式上可以看出,DATETIME 类型 可以直接用 DATE 类型和 TIME 类型组合而成。DATETIME 类型的字段赋值表示方法如下。  表示‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字符串。 这种方式可以表达的范围是‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’。例如, 输入‘2008-08-08 08:08:08’,DATETIME 类型会自动转换为 2008-08-08 08:08:08, 输入‘20080808080808’,同样转换为 2008-08-08 08:08:08。  MySQL 中还支持一些不严格的语法格式,任何的标点都可以用来做间隔符。情况 与 DATE 类型相同,而且时间部分也可以使用任意的分隔符隔开,这与 TIME 类型 不同,TIME 类型只能用‘:’隔开。例如,输入‘2008@08@08 08*08*08’,数据 库中 DATETIME 类型统一转换为 2008-08-08 08:08:08。  表示‘YY-MM-DD HH:MM:SS’或‘YYMMDDHHMMSS’格式的字符串。其中 ‘YY’的取值,‘00’~‘69’转换为 2000~2069,‘70’~‘99’转换为 1970~1999。 与 YEAR 类型和 DATE 类型相同。例如,输入‘69-01-01 11:11:11’,数据库中插 入 2069-01-01 11:11:11 , 输 入 ‘ 70-01-01 11:11:11 ’, 数 据 库 中 插 入 1970-01-01 11:11:11。  使用 now()来输入当前系统日期和时间,这属于 MySQL 的函数,会在后面的章节 讲解。 DATETIME 类型用来记录日期和时间,其作用等价于 DATE 类型和 TIME 类型的组合。 一个 DATETIME 类型的字段可以用一个 DATE 类型的字段和一个 TIME 类型的字段代替。 但是如果需要同时记录日期和时间,选择 DATETIME 类型是个不错的选择。 5.TIMESTAMP 类型 TIMESTAMP 类 型 使 用 4 个 字 节 来 表 示 日 期 和 时 间 。TIMESTAMP 类 型 的 范 围 是 1970-01-01 08:00:01~2038-01-19 11:14:07。MySQL 中也是以‘YYYY-MM-DD HH:MM:SS’ 的形式显示 TIMESTAMP 类型的值。从其形式可以看出,TIMESTAMP 类型与 DATETIME 类型显示的格式是一样的。给 TIMESTAMP 类型的字段赋值的表示方法基本与 DATETIME 类型相同。值得注意的是,TIMESTAMP 类型范围比较小,没有 DATETIME 类型的范围那 么大。因此输入值时要保证在 TIMESTAMP 类型的有效范围内。
2.2 数据库的基本操作 前面讲解了 MySQL 支持的数据类型,接下来详细讲解数据库的相关操作。 2.2.1 创建和查看数据库 创建数据库就是在数据库系统中划分一块存储数据的空间,在 MySQL 中,创建数据库 的语法格式如下所示。 CREATE DATEBASE 数据库名称; 以上示例中是创建数据库的语法,这里要注意的是,数据库名称是唯一的,不能重复。 例 2-1 创建一个名为 qianfeng 的数据库,SQL 语句如下所示。 CREATE DATABASE qianfeng; 执行结果如下所示。 mysql> CREATE DATABASE qianfeng; Query OK, 1 row affected (0.01 sec) 以上执行结果证明 SQL 语句运行成功,为了验证数据库系统中是否创建了名为 qianfeng 的数据库,需要查看数据库,查看数据库的 SQL 语句如下所示。 SHOW DATABASES; 例 2-2 查看所有已存在的数据库,SQL 语句如下所示。 mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qianfeng | | test | +--------------------+ 5 rows in set (0.00 sec) 从以上执行结果中可看出,数据库中一共存在五个数据库,其中有四个 MySQL 自动创 建的库,还有一个名为 qianfeng 的库是例 2-1 创建的数据库。 另外,还可以查看已经创建的数据库信息,语法格式如下所示。 SHOW CREATE DATABASE 数据库名称; 例 2-3 查看创建的数据库 qianfeng 的信息,SQL 语句如下所示。 mysql> SHOW CREATE DATABASE qianfeng; +----------+--------------------------------- ----------------------------------+ | Database | Create Database +----------+--------------------------------- ----------------------------------+ | qianfeng | CREATE DATABASE `qianfeng` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+---------------------------------- |
---------------------------------+ 1 row in set (0.00 sec) 以上执行结果显示了数据库 qianfeng 的创建信息,例如编码方式为 utf8。 除了以默认编码方式创建数据库,还可以指定编码方式创建数据库,例如创建一个名为 qianfeng2 的数据库,编码指定为 gbk,SQL 语句如下所示。 mysql> CREATE database qianfeng2 character set gbk; Query OK, 1 row affected (0.00 sec) 执行成功后,可以查看数据库 qianfeng2 的信息,SQL 语句如下所示。 mysql> SHOW CREATE DATABASE qianfeng2; +----------+--------------------------------- ----------------------------------+ | Database | Create Database +----------+--------------------------------- ----------------------------------+ | qianfeng | CREATE DATABASE `qianfeng2` /*!40100 DEFAULT CHARACTER SET gbk */ | +----------+---------------------------------- ---------------------------------+ 1 row in set (0.00 sec) 从执行结果可看出,新创建的数据库 qianfeng2,编码方式为 gbk。 | 2.2.2 使用数据库 创建数据库后,如果在创建的数据库中进行操作,还需要切换到该数据库,具体语法格 式如下。 USE 数据库名; 例 2-4 切换到数据库 qianfeng,SQL 语句如下所示。 mysql> USE qianfeng; Database changed 看到 Database changed 提示,证明已经切换到了数据库 qianfeng,另外,在使用数据库 时,还可以查看当前使用的是哪个数据库,SQL 语句如下所示。 mysql> SELECT database(); +------------+ | database() | +------------+ | qianfeng | +------------+ 1 row in set (0.00 sec) 从执行结果可看出,此时使用的是数据库 qianfeng。 2.2.3 修改数据库 前面讲解了如何创建和查看数据库,数据库创建完成后,编码也就确定了,若想修改数 据库的编码,可以使用 ALTER DATABASE 语句实现,具体语法格式如下。 ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET 编码方式 COLLATE 编码方式_bin;
例 2-5 将数据库 qianfeng 的编码修改为 gbk,SQL 语句如下所示。 mysql> ALTER DATABASE qianfeng DEFAULT CHARACTER SET gbk COLLATE gbk_bin; Query OK, 1 row affected (0.01 sec) 修改完成后,可以查看是否修改成功,SQL 语句如下所示。 mysql> SHOW CREATE DATABASE qianfeng; +----------+--------------------------------- ----------------------------------+ | Database | Create Database +----------+--------------------------------- ----------------------------------+ | qianfeng | CREATE DATABASE `qianfeng` /*!40100 DEFAULT CHARACTER SET gbk */ | +----------+---------------------------------- ---------------------------------+ 1 row in set (0.00 sec) 从以上执行结果可看出,数据库 qianfeng 的编码为 gbk,说明数据库的编码修改成功。 | 2.2.4 删除数据库 删除数据库就是将数据库系统中已经存在的数据库删除,删除后,数据库中所有数据会 被清除,为数据库分配的空间也将被回收,删除数据库的语法格式如下。 DROP DATABASE 数据库名称; 例 2-6 将数据库 qianfeng 删除,SQL 语句如下所示。 mysql> DROP DATABASE qianfeng; Query OK, 0 rows affected (0.01 sec) 删除完成后,为了验证删除数据库的操作是否成功,可以查看数据库系统中的所有库, SQL 语句如下所示。 mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) 从以上执行结果可看出,数据库系统中已经不存在名称为 qianfeng 的数据库,证明数据 库的删除操作成功。 2.3 数据表的基本操作 前面讲解了对数据库的操作,接下来还需要学习对数据表的操作。
分享到:
收藏