MySQL
数据库介绍
- 数据库定义:存储和管理数据的系统
- 数据库基本操作:增加(Create),删除(Delete),修改(Update),查找(Read)
- 数据库分类:
- 关系型数据库
- 非关系型数据库
| 关系型数据库(RDBMS) | 非关系型数据库 | |
|---|---|---|
| 存储形式 | 行列表格结构存储数据 | 键值对存储,文档存储,列式存储,图式存储 |
| 查询语言 | 使用SQL语言进行操作 | 不使用SQL语言(NoSQL) |
| 典型产品 | MySQL、Oracle、DB2、SQL Server | MongoDB、Redis、HBase、Neo4j |
SQL语句介绍
- 定义:结构化查询语言(Structured Query Language)是关系型数据库管理系统的通用操作规范
- SQL方言:
- 所有关系型数据库(MySQL/Oracle等)都遵循SQL标准
- 不同数据库有特有语法
SQL语言分类
- 根据功能分类:
- DDL(数据定义语言):定义数据库对象,例如:CREATE DATABASE, CREATE TABLE
- DML(数据操作语言):对表记录进行增删改,例如:INSERT,DELETE,UPDATE
- DQL(数据查询语言):查询表记录(SELECT语句)
- DCL(数据库控制语言):管理数据库访问权限和用户
SQL通用规范
- 书写规范:一条SQL语句可以单行书写也可以多行书写,以分号
;做结尾 - 大小写不敏感:建议关键词使用大写
- 注释规范:单行注释
# 这是注释或者-- 这是注释,多行注释/* 这是多行注释 */
MySQL环境安装
软件安装
本次安装版本:MySQL 8.0.32,下载地址:MySQL :: Download MySQL Installer (Archived Versions)
配置环境变量
- 将
<MySQL目录>\bin添加到系统环境变量Path中[!note] MySQL默认密码
MySQL默认用户名:root,默认密码:root
MySQL连接
指令行连接
- 连接方式: 需要通过CS架构(客户端-服务器架构)进行连接。
- 关键要素:
- IP地址: 两台计算机之间要想通过网络连接,首先需要知道对方的IP地址。
- 端口号: 每个应用软件都有一个唯一的属于自己的端口号,通过IP地址加端口号可以精准地连接到对应的服务。
- 连接过程(CLI):
- 本地连接:
mysql -u<用户名> -p[密码],密码不写时,可以隐藏输入 - 远程连接:
mysql -h<数据库服务端IP> -P<数据库服务端端口> -u<用户名> -p[密码]
- 本地连接:
DataGrip连接

注意:此过程软件会安装驱动(mysql-connector-java-8.0.32.jar),MySQL :: Download MySQL Connector/J (Archived Versions)
自动下载

手动安装驱动
- 跳转到驱动程序界面

- 手动添加驱动,添加Jar包路径

驱动包作用:该JAR文件允许Java程序(DataGrip)与MySQL数据库建立连接
MySQL语法
操作数据库(架构)
创建数据库
- 语法格式:
CREATE DATABASE [IF NOT EXISTS] <database_name> [CHARSET='UTF8'] - 注意:
- 当数据库存在时,会报错,可使用
CREATE DATABASE IF NOT EXISTS 数据库名称 - 使用
CHARSET参数指定数据库的编码格式
- 当数据库存在时,会报错,可使用
- 实例:
1
2
3
4
5
6
7
8
9# 创建数据库
CREATE DATABASE 数据库名称;
# 当数据库不存在时,创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名称;
# 创建数据库并指定编码格式
CREATE DATABASE 数据库名称 CHARSET = 'UTF8';
CREATE DATABASE 数据库名称 DEFAULT CHARSET = 'UTF8';
查看数据库
- 语法格式:
- 查看全部数据库:
SHOW DATABASES - 查看单个数据库:
SHOW CREATE DATABASE 数据库名称语句的主要作用是查看数据库的完整创建定义,不会真正创建数据库,若没有对应数据库则会报错
- 查看全部数据库:
- 实例:
1
2
3
4
5# 查看数据库
SHOW DATABASES;
# 查看单个数据库
SHOW CREATE DATABASE 数据库名称;
选择数据库
- 语法格式:
- 选择数据库:
USE 数据库名称; - 查看当前数据库:
SELECT database();
- 选择数据库:
- 实例:
1
2
3
4
5# 选择数据库
USE 数据库名称;
# 查看当前数据库
SELECT database();
删除数据库
- 语法格式:
DROP DATABASE 数据库名称; - 注意:此操作不可逆,数据无法恢复
- 实例:
1
DROP DATABASE 数据库名称;
修改数据库
- 语法格式:
ALTER DATABASE 数据库名称 编码格式; - 注意:此方法只能改变数据库编码格式,不能改变数据库名称,要更改数据库名称只可通过删库重建修改
- 实例:
1
ALTER DATABASE 数据库名称 编码格式;
操作数据表
创建数据表
- 语法格式:其中,表名,唯一标识数据表;字段名,即列名,表示数据属性;数据类型,限定字段存储格式;约束,对字段的额外限制条件
1
2
3
4
5CREATE TABLE 表名(
字段名 数据类型 [约束],
字段名 数据类型 [约束],
字段名 数据类型 [约束]
) - 常见数据类型:
- **整形(int)**:例如编号,年龄
- 浮点类型:float(单精度),double(双精度),decimal(数学类型),与钱相关的用decimal避免精度丢失,有前到后精度依次提高,decimal(M, N),其中M表示数字总长度,N表示小数位长度
- 字符串类型:固定字符串(char(字符串长度)),可变字符串(varchar(最大字符串长度)),已知固定长度用char,不确定长度用varchar
- **枚举类型(enum)**:选项,用法
enum('male', 'female')
- 实例:
1
2
3
4
5
6CREATE TABLE employee(
id int,
name varchar(2),
gender enum('male', 'female'),
height float
) default charset ='utf8';
查看数据表
- 语法格式:
show tables,查看数据库下所有表 - 语法格式:
desc 表名或者describe 表名,展示表字段定义 - 实例:
1
2
3SHOW TABLES
DESC <table_name>
修改数据表
- 语法格式:
rename table <旧表名> to <新表名>,重命名数据表 - 实例:
1
rename table <旧表名> to <新表名>
删除数据表
- 语法格式:
drop table <table name> - 实例:
1
drop table <table name>
数据类型
整数类型
- 分为无符号整型和有符号整形,详细参考:MySQL :: MySQL 8.0 Reference Manual :: 13.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
| 整数类型 | 占用空间 | 表示范围 | 数据类型 | 表示范围 |
|---|---|---|---|---|
| tinyint | 1 Byte | -128~127 | tinyint unsigned | 0-255 |
| smallint | 2 Byte | -32768~32767 | smallint unsigned | 0-2^16-1 |
| mediumint | 3 Byte | -800w~+800w | mediumint unsigned | |
| int | 4 Byte | -21,000w~+21,000w | int unsigned | |
| bigint | 8 Byte | – | bigint unsigned |
浮点类型
- 单精度:FLOAT
- 双精度:DOUBLE
- 数字类型:DECIMAL,用法
decimal(M, N),其中M表示数字总长度,N表示小数位长度,存储小数要求没有误差时使用
字符串类型
- 固定字符串:CHAR(n),长度固定,其中n表示字符串长度
- 可变字符串:VARCHAR(n),长度不固定,但是有最大长度,n表示最大长度
[!note] char 和 varchar 笔记
char(3),如果填入’ab’时则会补一个空格为’ab ‘,占用3个字节
varchar,最大长度为65535字节,在UTF8编码下,一个汉字约占3个字节,最多存放 65535/3 个汉字,故n最大取2w左右,若超过varchar最大大小,请使用TEXT类型
时间类型
- DATE类型:保存格式为
YYYY-MM-DD - TIME类型:保存格式为
HH:MM:SS - DATETIME类型:保存格式为:
YYYY-MM-DD HH:MM:SS
约束
- 主键约束:primary key,唯一标识表中的一行记录,一个表中只能有一个主键,且主键必须是非空的
- 非空约束:not null,该字段不可以为空
- 唯一约束:unique,该字段的值不可重复,一个表中可以有多个,可以为空值
- 默认约束:default,该字段为空时,填入默认值
- 外键约束:foreign key,填入数据时,会到关联表中查询该数据是否存在,若存在则成功填入,若不存在则填入失败
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LinHao's Pages!


