MySQL 数据库安装

bitgeek2025-10-25databasemysqldatabase

使用Docker安装MySQL

终端运行命令

# docker pull 第三方仓库地址/仓库名称/镜像名称
docker pull mysql
docker pull hub.c.163.com/library/mysql:latest

image-20250915153549441

D盘创建目录docker/mysql/conf,docker/mysql/data

这是mysql的配置文件和存储数据用的目录

切换到终端,输入命令,第一次启动MySQL容器

docker run --name mysql -p 3306:3306 ^
-e MYSQL_ROOT_PASSWORD=123456 ^
-d mysql

image-20250915153625737

命令解释:

docker run --name mysql

–name 为容器指定名称为mysql

-p 3306:3306 指定端口映射,将主机端口3306映射到容器端口3306

-e MYSQL_ROOT_PASSWORD=123456

-e 设置环境变量 ,设置root用户,密码123456

-d mysql:latest --default-authentication-plugin=mysql_native_password

-d 后台运行,并返回容器ID ,mysql:latest 镜像名

准备复制MySQL镜像中的配置文件到刚刚创建的本地持久化目录

D:/docker/mysql/conf/

打开docker桌面,点击Images镜像-> 选择mysql镜像-> 点击In use进入容器->

点击name:mysql-> 点击Files-> 打开目录etc/my.cnf点击下载到目录 D:/docker/mysql/conf/

关闭容器

终端执行命令

关闭容器
docker stop mysql

删除容器
docker rm mysql

image-20250915155048943

重新启动容器,执行命令

docker run --name mysql -p 3306:3306 ^
  -v //d/HBBTJ/Docker/mysql/data:/var/lib/mysql ^
  -v //d/HBBTJ/Docker/mysql/conf/my.cnf:/etc/mysql/my.cnf ^
  -e MYSQL_ROOT_PASSWORD=123456 ^
  -d mysql

-v //d/HBBTJ/Docker/mysql/data:/var/lib/mysql

映射主机目录d盘的/docker/mysql/data 到容器的/var/lib/mysql/目录

image-20250915161728008

测试是否持久化

进入 MySQL 容器:

docker exec -it mysql mysql -uroot -p

新建数据库:

CREATE DATABASE testdb;

查看 D:\docker\mysql\data,应该能看到 testdb 文件夹。

image-20250915162038836

数据会存到 Docker 管理的 volume 里,用 docker volume ls 可以查看。

MySQL 使用基本操作

登录、退出

# Linux / Docker 容器内
mysql -u root -p

# 指定主机和端口
mysql -h 127.0.0.1 -P 3306 -u root -p

#退出
exit;

1. 基础命令

命令功能示例
show databases;查看所有数据库-
use 库名;切换数据库use school;
show tables;查看表-
desc 表名;查看表结构desc student;
create database 库名;创建数据库create database testdb;

2. 数据库与表

数据库管理

  • 创建:CREATE DATABASE [IF NOT EXISTS] 库名;

  • 删除:DROP DATABASE [IF EXISTS] 库名;

  • 查看:SHOW DATABASES;

表结构设计

  • 列类型:数值(int、bigint)、字符串(varchar、text)、时间(datetime)
  • 字段属性:UnSigned(非负)、Auto_InCrement(自增)、DEFAULT(默认值)
  • 创建示例
CREATE TABLE IF NOT EXISTS `student`(
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` VARCHAR(30) NOT NULL DEFAULT '匿名',
  PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

表修改与删除

  • 重命名:ALTER TABLE 旧名 RENAME AS 新名;
  • 增字段:ALTER TABLE 表名 ADD 字段 类型;
  • 删表:DROP TABLE IF EXISTS 表名;

3. 数据操作(DML)

插入(INSERT

-- 单条
INSERT INTO student(`name`) VALUES('张三');
-- 多条
INSERT INTO student(`name`,`pwd`) VALUES('张三','123'),('李四','456');

修改(UPDATE)

UPDATE student SET `name`='张三2024' WHERE id=1; -- 加条件避免全表修改

删除(DELETE)

DELETE FROM student WHERE id=1; -- 必加WHERE
-- 重置自增用TRUNCATE(不可回滚)
TRUNCATE TABLE student;

4. 数据查询(DQL)

基础查询

SELECT `id`,`name` FROM student; -- 指定字段
SELECT DISTINCT `id` FROM result; -- 去重

条件查询(WHERE)

-- 区间
SELECT * FROM result WHERE score BETWEEN 90 AND 100;
-- 模糊查询
SELECT * FROM student WHERE `name` LIKE '%张%';

分组与聚合

-- 按科目查平均分(>90)
SELECT subject,AVG(score) 
FROM result 
GROUP BY subject 
HAVING AVG(score)>90;

连接查询

-- 学生-年级关联
SELECT s.`name`,g.`gradeName` 
FROM student s
INNER JOIN grade g ON s.gradeId=g.id;

排序与分页

-- 排序
SELECT * FROM student ORDER BY id DESC;
-- 分页(第1页,5条)
SELECT * FROM student LIMIT 0,5;

5. 高级特性

MD5 加密

-- 插入加密
INSERT INTO testMD5 VALUES(1,'张三',MD5('123'));
-- 校验
SELECT * FROM testMD5 WHERE `name`='张三' AND pwd=MD5('123');

事务管理

  • ACID:原子性、一致性、隔离性、持久性
SET autocommit=0; -- 关自动提交
START TRANSACTION; -- 启事务
-- SQL操作
COMMIT; -- 成功提交
-- ROLLBACK; -- 失败回滚
SET autocommit=1; -- 恢复

索引

  • 分类:主键索引、普通索引、唯一索引
  • 创建:CREATE INDEX idx_name ON student(name);
  • 原则:查询字段加索引,小表 / 频繁更新字段不加

用户与权限

CREATE USER 'tom'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON testdb.* TO 'tom'@'%';
FLUSH PRIVILEGES;                       -- 刷新权限

数据库备份与恢复

备份

mysqldump -u root -p testdb > testdb.sql

恢复

mysql -u root -p testdb < testdb.sql

总结

安装方式:Linux apt/yum、Windows Installer、Docker(推荐)。

核心命令:CREATE DATABASECREATE TABLEINSERTSELECTUPDATEDELETE

管理工具:命令行 (mysql),图形化工具(MySQL Workbench、Navicat、DBeaver)。

Last Updated 10/25/2025, 4:42:56 PM