一文整理完MySQL关系型数据库相关知识

本文全面梳理了MySQL关系型数据库的相关知识,包括安装、SQL语句分类(DDL、DML、DQL、DCL)、约束、多表查询、事务、函数、表设计流程、规范化理论和优化策略。内容涵盖了从数据库安装、基本查询到高级的并发控制和性能调优,适合数据库初学者和进阶者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 介绍

在这里插入图片描述

在开发中,数据库是专门用来存取数据的软件。数据库的职责就是管理数据的。

根据存取数据的类型分为关系型数据库和非关系型数据库
在这里插入图片描述

数据存储后呈现出来的效果类似上图的,是关系型数据库

在这里插入图片描述

数据存储后呈现出来的效果类似上图的,是非关系型数据库

1.1 MySQL

在这里插入图片描述

官网:http://www.mysql.com

2. 安装

docker方式安装MySQL数据库

前提:安装好了docker软件

1、拉取MySQL镜像

docker pull mysql:5.7   # 拉取 mysql 5.7
docker pull mysql       # 拉取最新版mysql镜像

2、docker run镜像创建容器

docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
  • –name:容器名,此处命名为mysql
  • -e:配置信息,此处配置mysql的root用户的登陆密码
  • -p:端口映射,此处映射容器的3306端口主机3306端口
  • -d:后台运行容器,保证在退出终端后容器继续运行

设置MySQL挂载目录,启动MySQL容器操作步骤

# MySQL挂在目录创建
mkdir -p /home/mysql/{
   conf,data,log,mysql-files}

# 新建配置文件
vim /home/mysql/conf/my.cnf

# 配置文件如下:
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]

character-set-server=utf8
collation-server=utf8_general_ci
lower_case_table_names=1
init_connect='SET NAMES utf8'
max_connections=5000
wait_timeout=20000
max_user_connections=5000
max_allowed_packet=128M
thread_stack=262144

# 容器启动命令
docker run --restart=always --privileged=true --name mysql-container \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-v /home/mysql/log:/var/log \
-v /home/mysql/mysql-files:/var/lib/mysql-files \
-p 3306:3306 -e MYSQL_ROOT_PASSWORD='123456' -id mysql:latest

在这里插入图片描述

3. SQL语句

SQL的英文是Structured Query Language,简称SQL,是一种操作关系型数据库的结构化查询语言。操作数据库,最经常使用就是查询操作。

1、MySQL数据库的SQL语句不区分大小写,关键字建议使用大写;

2、SQL语句可以使用单行或多行书写,以分号结尾

3、注释

单行注释

- 单行注释

# 单行注释

多行注释

/*
多行注释
多行注释
*/

4. SQL分类

分类 说明 作用 备注
DDL 数据定义语言 用来对数据库、表、列的定义 data definition language
DML 数据操作语言 用来对数据库中表的数据进行增、删、改操作 data manipulation language
DQL 数据查询语言 用来对数据库中表的数据进行查询 data query language
DCL 数据控制语言 用来对数据库的控制(用户创建、权限控制) data control language

5. DDL

5.1 库的DDL

展示所有的数据库

show databases;

创建数据库

create database 数据库名称 charset=utf8;
create database if not exists 数据库名称 charset=utf8;

示例:

create database db1 charset=utf8;
create database if not exists db1 charset=utf8;

删除数据库

drop database 数据库名称;
drop database if exists 数据库名称;

示例:

drop database test;
drop database if exists test;

使用数据库

use 数据库名称;

查询正在使用的数据库

select database();

小结:

命令 作用 示例
show databases; 查看所有数据库 show databases;
create database if not exists 数据库名 charset=utf8; 创建数据库 create database if not exists db1 charset=utf8;
use 数据库名; 使用数据库 use db1;
select database(); 查看当前使用的数据库 select database();
drop database if exists 数据库名; 删除数据库 drop database if exists db1;

5.2 表、列的DDL

列的内容可以是数字、字符串、时间等,由数据类型约束

数值数据类型

数据类型 字节数 有符号 无符号
tinyint 1个字节 -128~127 0~255
smallint 2个字节 -32768~32767 0~65535
mediumint 3个字节 -8388608~8388607 0~16777215
int 4个字节 -2147483648~2147483647 0~4294967295
bigint 8个字节 -263~263-1 0~2^64-1
float 单精度,4个字节 -231~231-1 0~2^32-1
double 双精度,8个字节
decimal[M, D] 双精度,8个字节

decimal(5,2),表示共5位数字,其中2位是小数,比如:888.88

字符串数据类型

数据类型 长度 用途
char(size) 最大255个字符 数据是定长,如md5的密码,邮编,手机号,身份证号等
varchar(size) 最大65535个字节 存放一般内容长度
tinytext 最大255个字节
text 最大65535个字节
mediumtext 最大16777215个字节 大段文本时,如新闻、文章、论文等
longtext 最大4294967295个字节 大段文本时,如新闻、文章、论文等

1、VARCHAR(size):0~65535字节 可变长度字符串,最大65532字节,1-3个字节用于记录大小【utf8编码size最大21844字符,gbk编码最大32766字符 】

2、查询速度:char > varchar

3、text与char、varchar不同的是,text不可以有默认值,能用varchar的地方不用text

日期+时间数据类型

数据类型 格式
date 年-月-日,如:2024-4-8
datetime 年-月-日 时:分:秒,如:2024-4-8 16:17:40
timestamp 年-月-日 时:分:秒,如:2024-4-8 16:17:40
time 时:分:秒,如:16:17:40
year 年,如:2024

datetime保存时间的范围: 1000-01-01 00:00:009999-12-31 23:59:59

timestamp保存时间的范围: 1970-01-01 00:00:012038-01-19 03:14:07

展示当前数据库所有表

show tables;

描述表结构

desc 表名;

查看表的创建语句

show create table 表名;

创建表

create table 表名(
		字段名1 数据类型,
		字段名2 数据类型,
		...
		字段名n 数据类型  # 最后一个不需要逗号(,)
);

删除表

drop table 表名称;
drop table if exists 表名称;

修改表、列

# 修改表名
alter table 表名 rename to 新的表名;

# 增加一列
alter table 表名 add 列名 数据类型;

# 修改列数据类型
alter table 表名 modify 列名 新数据类型;

# 修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;

# 删除列
alter table 表名 drop 列名;

小结:

命令 作用
show tables; 查看当前数据库中所有表
desc 表名; 查看表结构
show create table 表名; 查看表的创建语句
alter table 表名 rename to 新的表名; 修改表名
alter table 表名 add 列名 类型; 添加字段
alter table 表名 modify 列名 类型及约束; 修改字段数据类型
alter table 表名 change 原名 新名 类型及约束; 修改字段名和数据类型
alter table 表名 drop 列名; 删除字段
drop table 表名; 删除表

6. DML

6.1 添加数据

添加指定列数据

insert into 表名(列名1,列名2...) values(1,2...);

添加全部列数据

insert into 表名 values(1,2...);

批量添加指定列数据</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员buddha2080

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值