MySQL01-MySQL基础概念&数据类型
1. 数据库相关概念
1.1 数据库的四个基本概念
1.1.1 数据(Data)
即 data,数据是数据库中存储的基本对象,是用来描述事物的符号记录,数据有两个特点:
- 数据在不同的语境有不同的含义,也称语义;
- 数据与数据的语义是不可分割的;
1.1.2 数据库(DB)
即 DataBase,数据库就是存储数据的仓库,是长期存储在计算机内的,有组织的,可共享的大量数据的集合。数据库有以下基本特征:
- 数据按一定的数据模型组织、描述和储存;
- 可为各种用户共享、冗余度较小、易扩展;
- 数据独立性较高;
1.1.3 数据库管理系统(DBMS)
即 DataBase Management System,数据库管理系统就是操作和管理数据库的大型软件,是为了科学地组织和存储数据,高效地获取和维护数据而开发的、位于数据库应用系统和操作系统之间的大型而复杂的软件系统,主流的关系型数据库管理系统有Oracle、MySQL、Microdoft SQL Server等。
1.1.4 数据库系统(DBS)
即 DataBase System,数据库系统是指在计算机系统中引入数据库后的系统组成,在不引起混淆的情况下常常把数据库系统简称为数据库,包括数据库、数据库管理系统(及外围的应用开发工具)、数据库应用程序和数据库管理员(DBA)四个基本构成,其中数据库管理系统是整个数据库系统的核心。
1.2 数据库其他概念
1.2.1 关系型数据库(RDBMS)
即建立在关系模型基础上,由多张相互连接的二维表组成的数据库。关系型数据库有两个特点:
- 使用表存储数据,格式统一,便于维护;
- 使用 SQL 语言操作,标准统一,使用方便;
1.7 基本概念间的关系
用户(如数据库管理员)通过 SQL 语言操作数据库管理系统,通过数据库管理系统管理数据库及数据库里的数据,这个过程又是在数据库系统里完成的。
2. 数据库存储结构
在存储数据的过程中会用到数据库服务器,所谓数据库服务器,简单来说就在计算机上安装一个数据库管理系统(如MySQL),这个计算机就是一个简单的数据库服务器,数据库服务器建立在数据库系统基础上,拥有数据库系统的特性。
数据库管理系统可以管理多个数据库,一般开发人员会针对一个应用创建一个数据库,为保存应用中实体的数据,会在数据库中创建多个表(用于存储和描述数据的逻辑结构),每个表都记录着实体的相关信息。
数据库服务器、数据库和表的关系如图所示:
数据库中包括表和索引,表则由表头、表的记录和表的字段组成。数据存储在表中,表的横向称为行,每一行的内容为记录,表的纵向称为列,每一列的内容为字段。数据表组成结构如下:

3. SQL基本概念
3.1 SQL的概述
Structure Query Language(结构化查询语言) 简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。
3.2 SQL的优点
- 简单易学,具有很强的操作性;
- 绝大多数重要的数据库管理系统均支持SQL;
- 高度非过程化,用SQL操作数据库时大部分的工作由DBMS自动完成;
3.3 SQL的分类
SQL语言共分为四大类:数据定义语言DDL,数据操纵语言DML,数据控制语言DCL,数据查询语言DQL
- DDL(Data Definition Language)
数据定义语言,用来操作数据库、表、列等; 常用语句:CREATE、ALTER、DROP - DML(Data Manipulation Language)
数据操纵语言,用来操作数据库中表的数据;常用语句:INSERT、UPDATE、DELETE、SELECT - DCL(Data Control Language)
数据控制语言,用来操作访问权限和安全级别; 常用语句:GRANT、REVOKE、DENY - DQL(Data Query Language)
数据查询语言,用来查询数据 常用语句:SELECT
3.4 SQL的通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用 空格或缩进 来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- MySQL注释:
单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
多行注释:/* 注释内容 */
4. 数据库数据类型
使用MySQL数据库存储数据时,不同的数据类型决定了 MySQL存储数据方式的不同。为此,MySQL数据库提供了多种数据类型,其中包括整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型、二进制等数据类型。
4.1 数值类型
需要注意的是,数值类型分为带符号的(signed)和无符号的(unsigned)两种,这里的符号指的是 - 号,带符号类型可以表示正数、负数或 0,无符号类型则仅能表示大于等于 0 的值。
使用时,数值类型默认都是带符号的,要表示一个数值类型无符号,只需在该类型后加 unsigned 即可,如以下用无符号 TINYINT 类型表示年龄:
age tinyint unsigned
4.1.1 整数类型
根据数值取值范围的不同,MySQL 中的整数类型可分为5种,分别是 TINYINT、SMALUNT、MEDIUMINT、INT 和 BIGINT,其中最常见的即为 INT 类型。
| 数据类型 | 字节数 | 无符号数的取值范围 | 带符号数的取值范围 | 描述 |
|---|---|---|---|---|
| TINYINT | 1 | 0~255 | -128~127 | 小整数值 |
| SMALLINT | 2 | 0~65535 | -32768~32768 | 大整数值 |
| MEDIUMINT | 3 | 0~16777215 | -8388608~8388608 | 大整数值 |
| INT(INTEGER) | 4 | 0~4294967295 | -2147483648~ 2147483648 | 大整数值 |
| BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 | 极大整数值 |
4.1.2 浮点数、定点数类型
在MySQL数据库中使用浮点数和定点数来存储小数,浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE),而定点数类型只有一种 DECIMAL 类型。
| 数据类型 | 字节数 | 无符号数的取值范围 | 带符号的取值范围 |
|---|---|---|---|
| FLOAT | 4 | 0 和 1.175494351E-38~3.402823466E+38 | -3.402823466E+38~-1.175494351E-38 |
| DOUBLE | 8 | 0 和 2.2250738585072014E-308~1.7976931348623157E+308 | -1.7976931348623157E+308~2.2250738585072014E-308 |
| DECIMAL(M,D) | M+2 | 0 和 2.2250738585072014E-308~1.7976931348623157E+308 | -1.7976931348623157E+308~2.2250738585072014E-308 |
其中,DECIMAL 类型的取值范围与 DOUBLE 类型相同,但是,DECIMAL类型的有效取值范围是由M和D决定的,其中,M表示的是数据的长度,D表示的是小数点后的长度,比如,将数据类型为 DECIMAL(6,2) 的数据 6.5243 插人数据库后显示的结果为 6.52。
4.2 字符串类型
MySQL 中的字符串类型有以下几种,其中常用的是 CHAR 和 VARCHAR。
| 数据类型 | 储存范围 | 用途 |
|---|---|---|
| CHAR | 0~255 | 定长字符串 |
| VARCHAR | 0~65535 | 变长字符串 |
| TINYBLOB | 0~255 | 不超过255个字符的二进制字符串 |
| TINYTEXT | 0~255 | 短文本字符串 |
| BLOB | 0~65535 | 二进制形式的长文本数据 |
| TEXT | 0~65535 | 长文本数据 |
| MEDIUMBLOB | 0~16777215 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0~16777215 | 中等长度文本数据 |
| LONGBLOB | 0~4294967295 | 二进制形式的极大文本数据 |
| LONGTEXT | 0~4294967295 | 极大文本数据 |
对于 CHAR 类型和 VARCHAR 类型,CHAR 存储定长的字符串,VARCHAR 存储可变长度的字符串,两者的应用也有区别。
CHAR 类型数据所占空间是固定的,当数据为 CHAR(m) 类型时,不管插入值的长度是实际是多少它所占用的存储空间都是m个字节,因此 CHAR 类型适合用于数据长度固定的场景,比如性别、用户ID等;
VARCHAR 类型数据所占空间是随实际数据长度变化的,当数据为VARCHAR(m) 时,所对应的数据所占用的字节数为实际长度加1,因此 VARCHAR 类型用于表示大文本数据,例如,文章内容、评论、详情等。
4.3 日期与时间类型
MySQL提供的表示日期和时间的数据类型分别是 :YEAR、DATE、TIME、DATETIME 和 TIMESTAMP。在SQL语句中使用日期常量时,必须用英文的单引号或双引号引起来,否则执行结果不正确:
| 数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
|---|---|---|---|---|
| YEAR | 1 | 1901~2155 | YYYY | 0000 |
| DATE | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
| TIME | 3 | -838:59:59~ 838:59:59 | HH:MM:SS | 00:00:00 |
| DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
| TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
其中,YEAR 类型表示年份值;DATE 类型表示日期值;TIME 类型表示时间值或持续时间;DATETIME 类型表示混合日期和时间值;TIMESTAMP 类型表示混合日期和时间值,即时间戳。
4.4 二进制类型
在MySQL中常用 BLOB 类型数据存储二进制类型的数据,例如:图片、PDF文档等。
| 数据类型 | 储存范围 |
|---|---|
| TINYBLOB | 0~255 |
| BLOB | 0~65535 |
| MEDIUMBLOB | 0~16777215 |
| LONGBLOB | 0~4294967295 |

浙公网安备 33010602011771号