NodeJs 第二十章(MySql)

219 阅读5分钟

前言

从今天开始正式学习mysql以及node 使用express 操作mysql 数据库,后面会搭建一个小的管理台项目来辅助前端了解整个项目运作流程,也会带上一些文件上传,切片上传,断点续存,单点登录,异地登录,单人登录,邮箱验证码,图形验证码等相关功能,本来项基于nestjs 的实在是没时间去学了,这里先express吧后面再补一篇

一、MySQL 概述

MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,后被 Sun 公司收购,最终归 Oracle 公司所有。它具有以下特点:

  • 开源免费:遵循 GPL 协议,降低了使用成本。
  • 高性能:采用了多线程、优化的查询算法等技术,能够快速处理大量数据。
  • 可靠性和稳定性:经过长期的发展和广泛的应用,具备较高的可靠性和稳定性。
  • 支持多种存储引擎:如 InnoDB、MyISAM 等,用户可以根据不同的需求选择合适的存储引擎。
  • 跨平台:可以在多种操作系统上运行,如 Windows、Linux、macOS 等。

二、安装与配置

1. 安装
  • Windows

    • 访问 MySQL 官方下载页面,下载 MySQL Installer。
    • 运行安装程序,选择自定义安装,可以选择安装 MySQL Server、MySQL Workbench 等组件。
    • 在安装过程中,设置 root 用户的密码,并选择合适的配置选项。
    • 完成安装后,配置环境变量,将 MySQL 的 bin 目录路径添加到系统的 Path 环境变量中。
  • macOS

    • 使用 Homebrew 安装,打开终端,执行以下命令:

这里昨天安装的时候忘记截图了这里根据这个CSDN来安装是一样的。 MySQL安装教程(详细版)_mysql安装教程8.0.36-CSDN博客

卸载教程,有的同学之前安装过mysql没卸载干净可能导致安装失败这里是卸载流程。 教你彻底卸载MySQL 并重装(保姆级教程 )_mysql怎么卸载干净重装-CSDN博客

brew install mysql
  • 安装完成后,启动 MySQL 服务:
brew services start mysql
  • Linux(以 Ubuntu 为例)

    • 打开终端,执行以下命令更新软件包列表:
sudo apt update
  • 安装 MySQL Server:
sudo apt install mysql-server
  • 安装完成后,启动 MySQL 服务:
sudo systemctl start mysql
  • 可以设置 MySQL 服务开机自启:
sudo systemctl enable mysql
2. 配置
  • 修改配置文件:MySQL 的配置文件通常位于 /etc/mysql/mysql.conf.d/mysqld.cnf(Linux)或 C:\ProgramData\MySQL\MySQL Server X.Y\my.ini(Windows)。可以修改一些参数,如端口号、字符集等。
  • 安全设置:安装完成后,建议运行 mysql_secure_installation 脚本来进行一些安全设置,如设置 root 密码、删除匿名用户、禁止远程 root 登录等。

三、基本操作

1. 连接到 MySQL
  • 使用命令行工具连接:
mysql -u root -p

输入 root 用户的密码后,即可登录到 MySQL 服务器。

2. 数据库操作
  • 创建数据库
CREATE DATABASE my_database;
  • 查看所有数据库
SHOW DATABASES;
  • 选择数据库
USE my_database;
  • 删除数据库
DROP DATABASE my_database;
3. 表操作
  • 创建表
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT,
    email VARCHAR(255) UNIQUE
);
  • 查看表结构
DESCRIBE users;
  • 修改表结构

    • 添加列:
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
  • 修改列类型:
ALTER TABLE users MODIFY COLUMN age SMALLINT;
  • 删除列:
ALTER TABLE users DROP COLUMN phone;
  • 删除表
DROP TABLE users;

四、数据操作

1. 插入数据
INSERT INTO users (name, age, email) VALUES ('Alice', 25, 'alice@example.com');

可以一次插入多条记录:

INSERT INTO users (name, age, email) VALUES 
('Bob', 30, 'bob@example.com'),
('Charlie', 35, 'charlie@example.com');
2. 查询数据
  • 基本查询
SELECT * FROM users;
  • 选择特定列
SELECT name, age FROM users;
  • 条件查询
SELECT * FROM users WHERE age > 25;
  • 排序查询
SELECT * FROM users ORDER BY age DESC;
  • 分页查询
SELECT * FROM users LIMIT 10 OFFSET 0; -- 从第 0 条记录开始,取 10 条记录
  • 聚合函数
SELECT COUNT(*) FROM users; -- 统计记录数量
SELECT AVG(age) FROM users; -- 计算年龄的平均值
  • 分组查询
SELECT age, COUNT(*) FROM users GROUP BY age;
3. 更新数据
UPDATE users SET age = 26 WHERE name = 'Alice';
4. 删除数据
DELETE FROM users WHERE name = 'Alice';

五、高级查询

1. 连接查询
  • 内连接(INNER JOIN) :返回两个表中匹配的记录。
SELECT users.name, orders.order_date
FROM users
INNER JOIN orders ON users.id = orders.user_id;
  • 左连接(LEFT JOIN) :返回左表中的所有记录,以及右表中匹配的记录。
SELECT users.name, orders.order_date
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
  • 右连接(RIGHT JOIN) :返回右表中的所有记录,以及左表中匹配的记录。
SELECT users.name, orders.order_date
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;
2. 子查询

子查询是指在一个查询中嵌套另一个查询。

SELECT * FROM users WHERE age > (SELECT AVG(age) FROM users);

六、数据库管理

1. 用户管理
  • 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
  • 赋予权限
GRANT ALL PRIVILEGES ON my_database.* TO 'newuser'@'localhost';
  • 撤销权限
REVOKE ALL PRIVILEGES ON my_database.* FROM 'newuser'@'localhost';
  • 删除用户
DROP USER 'newuser'@'localhost';
2. 数据备份与恢复
  • 备份:使用 mysqldump 工具备份数据库。
mysqldump -u root -p my_database > backup.sql
  • 恢复:使用 mysql 命令恢复数据库。
mysql -u root -p my_database < backup.sql

七、索引与优化

1. 索引
  • 创建索引
CREATE INDEX idx_name ON users (name);
  • 查看索引
SHOW INDEX FROM users;
  • 删除索引
DROP INDEX idx_name ON users;
2. 查询优化
  • 分析查询性能:使用 EXPLAIN 关键字分析查询语句的执行计划。
EXPLAIN SELECT * FROM users WHERE age > 25;
  • 优化表结构:合理设计表结构,避免数据冗余,选择合适的数据类型。

八、存储过程与触发器

1. 存储过程
  • 创建存储过程
DELIMITER //

CREATE PROCEDURE get_user_count()
BEGIN
    SELECT COUNT(*) FROM users;
END //

DELIMITER ;
  • 调用存储过程
CALL get_user_count();
2. 触发器
  • 创建触发器
DELIMITER //

CREATE TRIGGER update_user_age
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
    -- 这里可以编写触发后的操作逻辑
END //

DELIMITER ;

九、事务处理

  • 开始事务
START TRANSACTION;
  • 提交事务
COMMIT;
  • 回滚事务
ROLLBACK;

十、日志管理

MySQL 有多种日志,如错误日志、查询日志、二进制日志等。可以通过修改配置文件来启用和配置这些日志。

  • 错误日志:记录 MySQL 服务器启动、运行过程中发生的错误信息。
  • 查询日志:记录所有客户端的查询语句。
  • 二进制日志:记录对数据库进行更改的所有操作,用于数据恢复和主从复制。