MySQL数据库
本文最后更新于43 天前,其中的信息可能已经过时,如有其他问题请留言
AI智能摘要
文章介绍了如何下载、安装和配置MySQL数据库,包括下载链接、安装步骤、命令行操作、常见问题解决方案以及Navicat的安装方法。同时,还提供了Mysql的基本使用指南,包括SQL操作语句的类型和功能,以及DDL(数据定义语言)、DML(数据操作语言)和DQL(数据查询语言)的具体应用。

一,下载MySQL

这是下载地址:https://dev.mysql.com/downloads/mysql

二,安装步骤

下载好的文件,解压到你想安装的地方

解压好后,默认是没有my.ini文件的,需要我们自己创建一个:

[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
 
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\Program_Files_self\\MySQL
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\\Program_Files_self\\MySQL\\MySQLData
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

命令行操作

  • 以管理员身份打开 cmd 命令行工具,按下Shift+Ctrl+Enter键即可
  • 用cd命令切换到自己的安装目录下的 bin 文件夹
  • 如果在D盘,再键入D:即可进入目录
#安装
mysqld install
#初始化数据库
mysqld --initialize --console

执行完成后会输出 root 用户的初此密码

#启动服务
net start mysql
#登录
mysql -u root -p

遇到的问题

出现 “ERROR 1045 (28000): Access denied for user ‘root’@’localhost‘ (using password: YES)”

解决方案:

#停止MySQL服务
net stop mysql
#跳过权限验证启动 MySQL
mysqld --console --skip-grant-tables --shared-memory

无密码登录并重置密码

重新打开一个新的 CMD 窗口,进入bin目录

#登录
mysql -u root -p
#提示输入密码时,直接按回车(无密码登录)
#登录后,执行以下命令重置密码(替换新密码为你的密码)
-- 切换到mysql系统数据库
use mysql;
-- 重置root密码(MySQL 8.0+ 必须用此语法)
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
exit;

重启 MySQL 服务:

关闭之前 “跳过权限验证” 的 CMD 窗口(停止临时服务)

在新 CMD 窗口中启动服务:

net start mysql

其他

mysql> ALTER USER ‘root’@’localhost‘ IDENTIFIED BY ‘root’; ERROR 1290 (HY000): The MySQL server is running with the –skip-grant-tables option so it cannot execute this statement

如果出现以上问题:

先刷新权限,再修改密码,具体步骤如下:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;
exit;

之后按之前的步骤关闭临时启动的 MySQL 窗口,重新启动正常的 MySQL 服务,即可用新密码登录。

Navicat安装

Navicat Premium 16 保姆级手把手 安装教程包含下载、安装、授权(附安装包)-CSDN博客

Mysql使用

Mysql数据库通过SQL(结构化查询语言)语句对数据进行操作。

SQL操作语句可以分为三种:

  • DDL(数据定义语言)
  • DML(数据操作语言)
  • DQL(数据查询语言)

DDL(数据定义语言)

作用:定义和管理数据库、表的结构。
关键字:CREATE,ALTER,DROP

DML(数据操作语言)

作用:对表中的数据进行增、删、改。
关键字:INSERT,UPDATE,DELETE

DQL(数据查询语言)

作用:查询表中的数据。
关键字:SELECT

查询

条件查询,如一条完整的sql查询语句结构为

SELECT [DISTINCT] 列名1, 列名2, ...  -- 要查询的列(* 表示所有列)
FROM 表名                            -- 数据来源的表
[JOIN 关联表名 ON 关联条件]          -- 多表关联(可选)
[WHERE 筛选条件]                     -- 行级过滤(核心:条件查询)
[GROUP BY 分组列]                    -- 分组(可选)
[HAVING 分组后筛选条件]              -- 分组后过滤(可选)
[ORDER BY 排序列 [ASC/DESC]]         -- 排序(可选)
[LIMIT 行数 [OFFSET 偏移量]]         -- 限制结果行数(可选,不同数据库语法略有差异)

基础结构

-- 基础结构:SELECT + FROM + WHERE
SELECT name, age 
FROM student 
WHERE gender = '女' AND age > 18;

SELECT:指定需要查询的字段,使用*表示查询所有字段

FROM:指定数据来源的表名

WHERE:定义筛选条件,只有满足该条件的记录才会被返回

二、常用运算符

1. 比较运算符

比较运算符是最基础的条件判断工具,用于判断字段值与目标值的关系:

  • =:等于
  • !=/<>:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于

2. 范围运算符

当需要判断字段值是否在某个连续区间时,使用BETWEEN ... AND ...会让语句更简洁:

-- 查询年龄在18到25岁之间的学生
SELECT * FROM student WHERE age BETWEEN 18 AND 25;

3. 模糊匹配

使用LIKE关键字可以实现模糊查询,通常配合通配符使用:

  • %:匹配任意长度的任意字符(包括 0 个字符)
  • _:匹配单个任意字符
-- 查询姓张的学生
SELECT * FROM student WHERE name LIKE '张%';
-- 查询名字为两个字且姓张的学生
SELECT * FROM student WHERE name LIKE '张_';

4. 集合运算符

IN关键字用于判断字段值是否属于指定的集合,适合处理离散的多个取值:

-- 查询学号为1001、1003、1005的学生
SELECT * FROM student WHERE id IN (1001, 1003, 1005);

SQL 连接查询:LEFT JOIN 与 RIGHT JOIN 详解

在多表关联查询的场景中,LEFT JOIN(左连接)和RIGHT JOIN(右连接)是实现数据关联的核心方式,二者的核心区别在于保留的表数据不同。

一、LEFT JOIN(左连接)

核心特点

  • 数据保留规则:保留左表(FROM后的第一个表)的所有记录,即使右表中没有匹配的记录。
  • 无匹配处理:当右表无匹配记录时,右表对应的字段会显示为NULL

基础语法

SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 关联条件;

应用场景

适用于需要以左表数据为基础,关联右表补充信息的场景,例如:

  • 查询所有学生的选课信息,包括没有选课的学生
SELECT student.name, course.course_name
FROM student LEFT JOIN course
ON student.id = course.student_id;

二、RIGHT JOIN(右连接)

核心特点

  • 数据保留规则:保留右表(JOIN后的表)的所有记录,即使左表中没有匹配的记录。
  • 无匹配处理:当左表无匹配记录时,左表对应的字段会显示为NULL

基础语法

SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 关联条件;

应用场景

适用于需要以右表数据为基础,关联左表补充信息的场景,例如:

  • 查询所有课程的选课学生,包括没有学生选择的课程
SELECT student.name, course.course_name
FROM student RIGHT JOIN course
ON student.id = course.student_id;

三、核心区别对比

维度LEFT JOINRIGHT JOIN
保留的表左表右表
无匹配时的字段值右表字段为 NULL左表字段为 NULL
典型使用场景以左表为主,补充右表信息以右表为主,补充左表信息

ER 图与物理表的关系解析

ER 图是数据库设计的蓝图,而物理表是其在数据库中的最终实现,二者共同构成了从数据建模到数据存储的完整链路。

一、ER 图:数据库的设计蓝图

定义

ER 图(实体 – 关系图)是用图形化方式描述数据及其关系的工具,是数据库设计阶段的核心产出物。

核心三要素

  • 实体(Entity):用矩形表示,对应业务中的核心对象,例如 “学生”“课程”。
  • 属性(Attribute):用椭圆形表示,是实体的特征,例如学生的 “姓名”“年龄”。
  • 关系(Relationship):用菱形表示,描述实体之间的关联,例如学生 “选课”。

核心作用

清晰规划数据结构与业务关系,提前梳理数据之间的依赖,为后续物理表的创建提供明确依据。


二、物理表:ER 图的具体实现

定义

物理表是 ER 图在数据库中的具体实现,是真实存储数据的二维表结构,也是所有 SQL 操作(增删改查)的最终对象。

与 ER 图的对应关系

ER 图元素物理表对应项
实体(Entity)表(Table)
属性(Attribute)字段(列 / Column)
关系(Relationship)主键 / 外键(Primary Key/Foreign Key)

核心作用

作为数据的最终载体,通过定义字段类型、约束和关联,将 ER 图的设计转化为可操作的数据库对象。


三、从 ER 图到物理表的设计流程

  1. 需求梳理:分析业务场景,识别核心实体、属性与关系。
  2. 绘制 ER 图:用图形化方式呈现数据模型,验证业务逻辑的合理性。
  3. 表结构设计:将 ER 图的实体转化为表,属性转化为字段,关系转化为键约束。
  4. 数据库落地:通过CREATE TABLE等 SQL 语句创建物理表,完成从设计到存储的转化。

数据库操作(Database)

1. 创建数据库

-- 基础语法
CREATE DATABASE [IF NOT EXISTS] 数据库名 
[DEFAULT CHARACTER SET 字符集] 
[DEFAULT COLLATE 排序规则];

-- 示例:创建名为school的数据库,指定UTF8字符集
CREATE DATABASE IF NOT EXISTS school 
DEFAULT CHARACTER SET utf8 
DEFAULT COLLATE utf8_general_ci;

IF NOT EXISTS:避免重复创建报错(推荐必加)

常用字符集:utf8utf8mb4(支持 emoji)

删除数据库

-- 基础语法
DROP DATABASE [IF EXISTS] 数据库名;

-- 示例:删除school数据库
DROP DATABASE IF EXISTS school;

选择数据库

USE school; -- 切换到school数据库

二、数据表操作(Table)

1. 创建数据表

-- 基础语法
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段1 数据类型 [约束条件],
    字段2 数据类型 [约束条件],
    ...
    [表级约束]
) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集];

-- 示例:创建student学生表
CREATE TABLE IF NOT EXISTS student (
    id INT PRIMARY KEY AUTO_INCREMENT, -- 主键+自增
    name VARCHAR(50) NOT NULL, -- 姓名,非空
    age TINYINT UNSIGNED DEFAULT 18, -- 年龄,无符号,默认18
    gender ENUM('男','女','未知') DEFAULT '未知', -- 性别,枚举类型
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认当前时间
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  • 常用约束:PRIMARY KEY(主键)、NOT NULL(非空)、UNIQUE(唯一)、DEFAULT(默认值)、AUTO_INCREMENT(自增)
  • 常用存储引擎:InnoDB(支持事务 / 外键,推荐)、MyISAM

删除数据表

-- 基础语法
DROP TABLE [IF EXISTS] 表名;

-- 示例:删除student表
DROP TABLE IF EXISTS student;

三、数据操作(增删改查 CRUD)

1. 新增数据(CREATE – INSERT)

-- 方式1:指定字段插入(推荐,字段顺序可自定义)
INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);

-- 方式2:插入多条数据(高效)
INSERT INTO 表名 (字段1, 字段2) VALUES 
(值1, 值2),
(值3, 值4);

-- 示例:插入单条学生数据
INSERT INTO student (name, age, gender) VALUES ('张三', 20, '男');

-- 示例:插入多条学生数据
INSERT INTO student (name, age, gender) VALUES 
('李四', 21, '女'),
('王五', 19, '男');

查询数据(READ – SELECT)

-- 基础语法
SELECT [DISTINCT] 字段1, 字段2, ... -- DISTINCT去重
FROM 表名
[WHERE 条件] -- 筛选条件
[ORDER BY 字段 [ASC/DESC]] -- 排序,ASC升序(默认),DESC降序
[LIMIT 起始位置, 条数]; -- 分页

-- 示例1:查询所有学生信息
SELECT * FROM student;

-- 示例2:查询年龄大于19的男生,按年龄降序
SELECT name, age FROM student 
WHERE age > 19 AND gender = '男'
ORDER BY age DESC;

-- 示例3:分页查询,第1页(从0开始),每页10条
SELECT * FROM student LIMIT 0, 10;

更新数据(UPDATE)

-- 基础语法
UPDATE 表名 
SET 字段1=值1, 字段2=值2, ...
[WHERE 条件]; -- 必加!否则更新全表数据

-- 示例:将张三的年龄改为22
UPDATE student 
SET age = 22 
WHERE name = '张三';

⚠️ 重要:UPDATE 语句必须加 WHERE 条件,否则会修改表中所有记录!

删除数据(DELETE)

-- 基础语法
DELETE FROM 表名 [WHERE 条件]; -- 必加!否则删除全表数据

-- 示例:删除姓名为王五的学生
DELETE FROM student WHERE name = '王五';

-- 清空表(自增主键重置,慎用)
TRUNCATE TABLE student;
  • ELETE:删除数据,自增主键不重置,可回滚(事务中)
  • TRUNCATE:清空表并重置结构,不可回滚,效率更高

整理资料不易,觉得有帮助可以投喂下博主哦~感谢!
作者:Hueil
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议
转载请注明 文章地址 及 作者 哦~
暂无评论

发送评论 编辑评论


                
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇