本文主要讨论MySQL的内容。
什么是MySQL?
MySQL 是一款开源、跨平台、基于关系模型的关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL) 进行数据管理。它具有高性能、高可靠性、易用性、可扩展性等特点,广泛应用于 Web 应用、企业系统、云计算等领域,是目前全球主流的开源关系型数据库。
主流的数据库可以分为两大类:关系型数据库和非关系型数据库。
1、关系型数据库
- MySQL:是一款开源的关系型数据库,是目前主流的选择。
- Oracle Database:商用关系型数据库,面向高并发、高安全、高可用的企业级核心业务。需要付费,一般在大公司中才使用。
- SQL server:微软推出的商用关系型数据库,适用于 Windows 生态企业应用。
2、非关系型数据库
- Redis:开源内存数据结构存储,用作数据库、缓存、消息中间件。
- MongoDB:开源文档型 NoSQL 数据库,面向高可扩展性、灵活结构的应用场景。
SQL语言
SQL本身是针对数据库操作的语言,和数据库其实是两个概念。SQL语言分为三种类型:DDL、DML和DCL。
1、DDL
DDL(data definition language):数据定义语言,用来维护存储数据的结构。
代表指令有:create 、drop、alter等
2、DML
DML(data manipulation language):数据操作语言,用来对数据进行操作。
代表指令有:insert、delete、update等
3、DCL
DCL(data control language):数据控制语言,主要负责权限管理和事务。
代表指令有:grant、revoke、commit等
数据库的基本操作
1、查询数据库
在实际工作中,在创建数据库之前,由于不能重复命名,在团队协作中可能会出现已经创建该名字的数据库,所以在创建之前需要检查一下已有的数据库。
sql
show databases;
使用上面的命令可以查看当前已经创建好的数据库。运行后可以看到如下:

如图,目前已经有了6个数据库并显示出了它们的名字。其中,information_schema、mysql、performance_schema和sys四个数据库是MySQL自带的数据库,记录的是一些关于它本身的配置、性能、系统变量信息等。
2、创建数据库
创建数据库的语句具体如下:
sql
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] DB_NAME [create_option]
create_option:[DEFAULT]{
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
}
先来看第一行代码:
sql
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] DB_NAME [create_option]
CRAETE关键字表示创建,而 { } 中的DATABASE和SCHEMA都表示数据库,两个选一个来进行书写;
\] 中表示的为可选项。此处的 IF NOT EXISTS表示如果不存在则创建数据库。 ```sql create_option:[DEFAULT]{ --字符集 CHARACTER SET [=] charset_name --排序规则 | COLLATE [=] collation_name --是否加密 | ENCRYPTION [=] {'Y' | 'N'} } ``` 下面我们创建一个test_one的数据库: ```sql CREATE DATABASE test_one; ``` 如果配置文件中设置了大小写不敏感,则关键字使用小写也能实现同样的功能。 ```sql create databese test_one; ``` 创建好之后可以看到打印出了 Query OK;说明创建成功。我们也可以查询一下是否创建成功:  此外,我们也可以使用上面\[ \]中的指令,例如: ```sql create databasxe if not exists test_db; ```  此外,在创建时还可以手动指定字符集和排序规则: ```sql create database if not exists test_two character set utf8mb4 collate utf8mb4_0900_ai_ci; ``` 如果不清楚默认的字符集,我们可以使用如下的指令进行查询: ```sql show variables like '%character%'; ```  ### 3、删除数据库 有创建也会有删除。删除数据库的语法如下: ```sql DROP DATABASE [IF EXISTS] db_name; ``` 下面我们试着把上面创建的test_one数据库删除: ```sql drop database if exists test_one; ```  > **【注意】删除数据库是一个非常危险的操作,一定要慎用!** *** ** * ** *** ## 常用数据类型 |--------------|------------|-----------------------------------|--------------------------------| | 数据类型 | 大小 | 说明 | 对应 | | BIT(M) | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2......M-1 | 常用Boolean对应BIT,此时默认是1位,即只能存0和1 | | TINYINT | 1字节 | - | Byte | | SMALLINT | 2字节 | - | short(短整形) | | INT | 4字节 | - | Integer | | BIGINT | 8字节 | - | Long | | FLOAT(M,D) | 4字节 | 单精度,M指定长度,D指定小数位数,会发生精度丢失 | Float | | DOUBLE(M,D) | 8字节 | - | Double | | DECIMAL(M,D) | M/D最大值\*2 | 双精度,M指定长度,D表示小数点位数,精确数值;一般用于表示金额 | BigDecimal | | NUMERIC(M,D) | M/D最大值\*2 | 和DECIMAL相同 | BigDecimal | *** ** * ** *** ## 字符串类型 |---------------|--------------|-----------------------------------|----------| | 数据类型 | 大小 | 说明 | 对应 | | VARCHAR(SIZE) | 0-65535字节 | 可变长度字符串;可以说是最常用的一种字符串类型,可以指定长度是多少 | String | | TEXT | 0-65535字节 | 长文本数据 | String | | MEDIUMTEXT | 0-16777215字节 | 中等长度文本数据 | String | | BLOB | 0-65535字节 | 二进制形式的长文本数据 | byte\[\] | *** ** * ** *** ## 日期类型 |-----------|-----|-----------------------------| | 数据类型 | 大小 | 说明 | | DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的检索以及转换 | | TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 | *** ** * ** *** ## 表的操作 #### 什么是表? 在数据库里,表(Table)就是用来存放数据的 "结构化表格",类似于 Excel 里的一张工作表。一个表的数据结构包含三个部分: * 表名 * 列(字段):每一列是一种属性 * 行(记录):每一行是一条完整数 ### 1、选择数据库 在创建表之前,我们需要选择在哪个数据库中创建表;在test_db中创建该表,要先选择该数据库: ```sql --切换当前操作的数据库为 test_db use test_db; --查询当前正在使用的数据库名称 select database(); ```  ### 2、创建表 创建一个表的语法规则如下: ```sql CREATE TABLE table_name ( field1 datatype, field2 datatype, --... fieldn datatype ); --注意使用的是()! ``` 根据这个规则,下面我们试着创建一个名为student的学生表,表中包含两个字段,其中id表示编号,name表示姓名,长度为50: ```sql create table studengt ( id bigint, name varchar(50), ); ```  之后使用如下命令查看所有的表: ```sql show tables; ```  ### 3、查看表结构 查看表结构使用下面的命令: ```sql desc 表名; ```  * Field:表中的字段 * Type:字段的数据类型 * Null:当前字段是否允许null * key:键值的类型 * Default:当前列的默认值 * Extra::其他扩展内容 ### 4、删除表 删除表的语法如下: ```sql DROP [TEMPORARY] TABLE [IF EXISTS] tb_name [,tb_name]; ``` 我们可以试着使用一下: ```sql drop table if exists test; ```  由于我们没有这个表,有if exists就会报出一条警告。查看警告使用如下的命令: ```sql SHOW WARNINGS; ```  > **【注意】删除表的操作同样要慎用!**