数据库(Database)简称DB,是按照数据结构来组织、存储和管理数据的仓库,其本身可看作电子化的文件柜。用户可以对文件中的数据进行增加、删除、修改、查找等操作。随着数据库技术的不断发展,数据库产品越来越多,常见的有Oracle、SQL Server、MySQL等。
Oracle:Oracle公司推出的数据库管理系统,在数据库领域一直处于领先地位,同时也是目前世界上流行的关系型数据库管理系统之一。它的优势在于移植性好、使用方便、功能性强,适用于各类大、中、小、微机环境。对于要求高效率、吞吐量大的项目而言是一个不错的选择。
SQL Server:Microsoft公司推出的关系型数据库管理系统,广泛应用于电子商务、银行、保险、电力等行业。因其易操作、界面良好等特点深受广大用户喜爱,但由于其只能在Windows平台上运行,并对操作系统的稳定性要求较高,因此很难处理日益增长的用户数量。
MySQL:开放源码的关系型数据库管理系统,采用GPL协议(General Public License,通用公共许可证)发布,这表示用户可以根据自己的需求进行修改。MySQL还具有跨平台性,不仅可以在Linux系统上使用,还可以在Windows、Mac OS等系统上使用。相对其他数据库而言,MySQL具有方便、快捷、免费等特点。
1.DB存储结构。
数据库是存储和管理数据的仓库,如果要管理一个仓库,就要在规划仓库的内部结构,将物品井然有序地放入仓库中。同样,如果想要合理、高效地存储数据,就要理解数据库的存储结构。在一个数据库服务器中,可以管理多个数据库。一个数据库中又可以有多个数据表,数据是保存在数据表中的。
数据表的横向被称为“行”,纵向被称为“列”,行列交叉处的数据被称为“值”。数据表中的的每一行内容被称为“记录”,每一列的列名称被称为“字段”。
2.Why do we study MySQL DB?
是开放源码的关系型数据库管理系统。 由瑞典MySQL AB公司开发,先后被Sun和Oracle公司收购。 是最受欢迎的关系型数据库之一,尤其是在Web开发领域,MySQL依然占据着举足轻重的地位。
低成本: MySQL是开源免费的,开发人员可根据需求自由进行修改,降低了开发成本。
跨平台: 不仅可在Windows平台上使用,还可在Linux、Mac OS等多达14种平台上使用。
高性能: 多线程以及SQL算法的设计,使其可以充分利用CPU资源和提高查询速度。
上手快: MySQL 使用标准的 SQL数据语言形式,方便用户操作。
API接口: 提供多种编程语言的API,方便操作数据库。例如Java、C、C++、PHP等。
3.数据库管理。
数据库的管理主要包括查看数据库、创建数据库、选择数据库和删除数据库。
功能 | 示例 | 描述 |
---|---|---|
查看数据库 | SHOW DATABASES; | 显示MySQL数据库服务器中已有的数据库 |
创建数据库 | CREATE DATABASE `itheima`; | 创建一个名称为itheima的数据库 |
选择数据库 | USE `itheima`; | 选择数据库itheima进行操作 |
删除数据库 | DROP DATABASE `itheima`; | 删除数据库itheima |
4.创建数据库。
创建数据库就是在数据库系统中划分一块存储数据的空间。 基本语法格式如下:CREATE DATABASE 数据库名称;
创建一个名称为 itcast 的数据库,SQL语句如下:CREATE DATABASE `itcast`;需要注意的是,为了避免用户自定义的名称与系统命令冲突,最好使用反引号(` `)包裹数据库名称、字段名称和数据表名称。
如果创建的数据库已存在,则程序会报错。因此,为了防止此情况的发生,在创建数据库时可以使用“IF NOT EXISTS”,具体如下:CREATE DATABASE IF NOT EXISTS `itcast`;
上述SQL语句表示,若MySQL数据库服务器中不存在名称为itcast的数据库时,创建该数据库,否则不执行创建数据库itcast的操作。
5.查看数据库
在完成创建数据库后,若要查看该数据库的信息,可以使用如下命令:SHOW CREATE DATABASE 数据库名称;
示例:使用此命令查看前面创建的数据库 itcast,SQL语句如下:SHOW CREATE DATABASE `itcast`;
查看 MySQL 数据库服务器中已经存在的数据库:SHOW DATABASES;
6.选择数据库
数据库服务器中可能存在多个数据库,选择数据库的命令如下:USE 数据库名称;
示例:选择数据库 itcast 进行操作,SQL语句如下:USE `itcast`;
7. 删除数据库。
删除MySQL数据库服务器中的某个数据库:DROP DATABASE 数据库名称;
数据库的删除操作不仅会删除里面的数据,还会回收原来分配的存储空间。
示例:删除数据库 itcast,SQL语句如下:DROP DATABASE `itcast`;
8.数据类型。
数据表在创建时,需为每个字段选择数据类型,而数据类型的选择则决定着数据的存储格式,有效范围和相应的限制。
如:一个需要10个字符宽度的字段,若将其宽度设为2个,则数据在存储时会发生错误;若将其宽度设为100,则会剩余90个字符的宽度。 因此,选择合适的数据类型对数据库的优化也很重要。
MySQL 提供了多种数据类型,主要分为 3 类:数值类型、字符串类型、日期与时间类型。
MySQL提供了很多数值类型,大体可以分为整数类型和浮点类型。 整数类型根据取值范围分为 INT、SMALLINT等, 浮点类型又分为 FLOAT、DECIMAL等。
数据类型 |
字节数 |
取值范围 |
说明 |
---|---|---|---|
TINYINT |
1 |
有符号:-128~127 无符号:0~255 |
最小的整数 |
SMALLINT |
2 |
有符号:-32 768~32 767 无符号:0~65 535 |
小型整数 |
MEDIUMINT |
3 |
有符号:-8 388 608~8 388 607 无符号:0~16 777 215 |
中型整数 |
INT |
4 |
有符号:-2 147 483 648~2 147 483 647 无符号:0~4 294 967 295 |
常规整数 |
BIGINT |
8 |
有符号:-9 223 372 036 854 775 808~9 223 372 036854 775 807 无符号:0~18 446 744 073 709 551 615 |
较大的整数 |
数据类型 |
字节数 |
取值范围 |
说明 |
float |
4 |
有符号:-3.402 823 466E+38~-1.175 494 351E-38 无符号:0/1.175 494 351E-38~3.402 823 466E+38 |
单精度 |
double |
8 |
有符号: -1.797 693 134 862 315 7E+308~2.225 073 858 507 201 4E-308 无符号: 0/2.225 073 858 507 201 4E-308 ~1.797 693 134 862 315 7E+308 |
双精度 |
decimal(M,D) |
M+2 |
有符号: -1.797 693 134 862 315 7E+308~2.225 073 858 507 201 4E-308 无符号: 0/2.225 073 858 507 201 4E-308 ~1.797 693 134 862 315 7E+308 |
定点数 |
浮点类型:DECIMAL类型的有效取值范围是有 M 和 D 决定。其中,M 表示数据长度,D 表示小数点后的长度。例如,数据类型设为 DECIMAL(4,1),将 3.1415926插入到数据库后,显示的结果为 3.1。
字符串类型:项目开发时,需要存储的数据多数是字符串格式的,因此 MySQL 提供了许多用于存储字符串的数据类型。
数据类型 |
取值范围 |
说明 |
CHAR |
0~2^8-1(字符) |
用于表示固定长度的字符串 |
VARCHAR |
0~2^8-1(字符) |
用于表示可变长度的字符串 |
ENUM |
0~2^16-1(字节数) |
表示枚举类型,只能存储一个枚举字符串值 |
BLOB |
0~2^16-1(字节数) |
用于表示二进制大数据(常规的) |
TEXT |
0~2^16-1(字节数) |
用于表示大文本数据(常规的) |
数据类型 |
取值范围 |
说明 |
TINYBLOB |
0~2^8-1(字节数) |
用于表示二进制大数据(较小的) |
TINYTEXT |
0~2^8-1(字节数) |
用于表示大文本数据(较小的) |
MEDIUMBLOB |
0~2^24-1(字节数) |
用于表示二进制大数据(中等的) |
MEDIUMTEXT |
0~2^24-1(字节数) |
用于表示大文本数据(中等的) |
LONGBLOB |
0~2^32-1(字节数) |
用于表示二进制大数据(较大的) |
LONGTEXT |
0~2^32-1(字节数) |
用于表示大文本数据(较大的) |
BLOB和TEXT都是用于存储大量数据的,但二者的区别在于,对于存储的数据进行排序和比较时,BLOB是区分大小写的,而TEXT是不区分大小写的。
日期和时间类型:为方便在数据库中存储日期和时间,MySQL 提供了几种相关的数据类型,这些数据类型可以根据实际开发灵活选择。
数据类型 |
功能说明 |
DATA |
用于存储日期,存储格式为YYYY-MM-DD 例如:2008-12-24 |
TIME |
用于存储时间,存储格式为HH:MM:SS 例如:14:25:10 |
DATETIME |
用于存储日期和时间,存储格式为YYYY-MM-DD HH:MM:SS |
TIMESTAMP |
用于存储时间戳,存储格式为YYYYMMDDHHMMSS |
YEAR(M) |
用于存储年份,M用于指定年份的长度,其值为2或4中的一种 |
9.存储引擎。
在数据库中,数据表设计的是否合理直接影响着数据库的功效,而在设计数据表时存储引擎的选择,则决定着数据表具有哪些功能。接下来将对 MySQL 常用存储引擎及其作用进行介绍。
InnoDB:InnoDB 存储引擎自 MySQL 5.5 版本起被指定为默认的存储引擎,用于完成事务、回滚、崩溃修复和多版本并发控制的事务安全处理。同时也是 MySQL中第一个提供外键约束的表引擎,尤其对事务处理的能力,是 MySQL 其他存储引擎所无法与之比拟的。 InnoDB 的优势在于提供了良好的事务管理、崩溃修复能力和并发控制。
MyISAM :MyISAM 存储引擎是基于 ISAM 存储引擎发展起来的,它不仅解决了 ISAM的很多不足,还增加了很多有用的扩展。 其中,对于使用 MyISAM 存储引擎的数据表,会被存储成3个文件,文件名与表名相同,文件扩展名分别为 frm、myd 和 myi。
MyISAM存储引擎的相关文件:
扩展名 |
功能说明 |
Frm |
用于存储表的结构 |
Myd |
用于存储数据,是MYData的缩写 |
Myi |
用于存储索引,是MYIndex的缩写 |
相比 InnoDB ,MyISAM 的优点是处理速度快;缺点是不支持事务处理等。
MEMORY:MEMORY存储引擎,是MySQL中的一类特殊的存储引擎。在MEMORY存储引擎的表中,所有数据都保存在内存中,因此数据的处理速度快,但不能持久保存(程序出错或关机时会丢失数据),而且不能存储太大的数据。对于需要很快的读写速度,但数据量小、不需要持久保存的数据来说,MEMORY存储引擎是一个理想的选择。
ARCHIVE:ARCHIVE 存储引擎适合保存数量庞大、长期维护但很少被访问的数据。对于使用 ARCHIVE 存储引擎的数据表,数据存储时会利用 zlib 压缩库进行压缩,在记录被请求时会实时进行解压。需要注意的是,ARCHIVE 存储引擎仅仅支持查询和插入操作,且由于不支持数据索引,查询效率比较低。
查看数据引擎:若要查看 MySQL 当前支持哪些存储引擎,可以使用以下 SQL 命令:SHOW ENGINES;
Engines 参数表示储存引擎的的名称;Suppot 参数表示 MySQL 是否支持该类引擎; Comment 参数是对该引擎的评论与描述。InnoDB 是 MySQL 的默认储存引擎。