MySQL 是目前最流行的开源关系型数据库管理系统之一,广泛应用于Web开发、数据分析等场景。掌握基础的增删改查操作是入门的关键。本文将从环境准备开始,带你深入,mysql


一、前置准备:安装与连接 MySQL

1. 安装 MySQL

  • Windows:前往 https://dev.mysql.com/ 下载安装包(选择 Community Server),按向导完成安装(注意记录 root 用户密码)。
  • macOS:推荐通过 Homebrew 安装:
    brew install mysql
    
  • Linux(Ubuntu/Debian):
    sudo apt-get update && sudo apt-get install mysql-server
    

2. 连接 MySQL

安装完成后,通过命令行工具连接 MySQL(需先启动服务):

mysql -u root -p  # 输入安装时设置的 root 密码

成功连接后,会看到 MySQL 的命令行提示符 mysql>


二、数据库操作:创建与管理数据库

数据库(Database)是存储数据的容器,用于组织多个相关表。以下是数据库的核心操作:

1. 查看所有数据库

SHOW DATABASES;   #列出服务器中所有数据库

2. 创建数据库

CREATE DATABASE IF NOT EXISTS school;   #创建名为 "school" 的数据库(若不存在)
  • IF NOT EXISTS 是可选参数,避免因数据库已存在而报错。
  • 建议指定字符集(如 utf8mb4,支持 emoji)和存储引擎(如 InnoDB,默认引擎):
    CREATE DATABASE school 
    DEFAULT CHARSET utf8mb4 
    

3. 切换数据库

USE school;  #切换到 "school" 数据库(后续操作将基于此数据库)

执行后提示 Database changed 表示切换成功。

4. 删除数据库(谨慎!)

DROP DATABASE IF EXISTS school;  #删除名为 "school" 的数据库(数据将永久丢失)

三、表操作:创建与管理数据表

表(Table)是数据库的核心结构,由行和列组成。创建表时需定义字段的名称、数据类型、约束(如主键、非空等)。

1. 查看当前数据库的表

SHOW TABLES;  #列出当前数据库中的所有表(若未创建表则无结果)

2. 创建表

以创建学生表 students 为例:

CREATE TABLE students (id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学生ID(主键)',name VARCHAR(50) NOT NULL COMMENT '姓名',gender ENUM('男','女','其他') DEFAULT '其他' COMMENT '性别',age TINYINT UNSIGNED COMMENT '年龄(0-255)',birth DATE COMMENT '出生日期',class VARCHAR(20) NOT NULL COMMENT '班级',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',PRIMARY KEY (id)  -- 指定主键(唯一标识一条记录)
)DEFAULT CHARSET utf8mb4;
关键参数说明:
  • 数据类型

    • INT UNSIGNED:无符号整数(取值范围 0~4294967295)。
    • VARCHAR(50):可变长度字符串(最多50字符)。
    • ENUM('男','女','其他'):枚举类型(仅允许指定值)。
    • DATE:日期(格式 YYYY-MM-DD)。
    • DATETIME:日期时间(格式 YYYY-MM-DD HH:MM:SS)。
    • CURRENT_TIMESTAMP:自动填充当前时间(插入或更新时)。
  • 约束

    • NOT NULL:字段不可为空。
    • AUTO_INCREMENT:自增(主键常用,插入新记录时自动生成唯一ID)。
    • DEFAULT:字段默认值(未显式赋值时使用)。
    • PRIMARY KEY:主键(唯一且非空,用于快速查找记录)。

3. 查看表结构

DESCRIBE students;  -- 或简写 DESC students

输出结果会显示字段名、类型、是否为空、默认值、键等信息。

4. 修改表结构

(1)添加字段
ALTER TABLE students 
ADD COLUMN email VARCHAR(100) UNIQUE COMMENT '邮箱(唯一)' AFTER class;
  • AFTER class 表示将新字段 email 添加到 class 字段之后(可选,默认添加到末尾)。
(2)修改字段类型
ALTER TABLE students 
MODIFY COLUMN age SMALLINT UNSIGNED COMMENT '年龄(调整类型)';
(3)删除字段
ALTER TABLE students 
DROP COLUMN birth;  -- 删除 `birth` 字段(数据将丢失!)

5. 删除表(谨慎!)

DROP TABLE IF EXISTS students;  -- 删除 "students" 表(数据永久丢失)

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

1. 插入数据(Create)

(1)插入单条记录
INSERT INTO students (name, gender, age, class) 
VALUES ('张三', '男', 18, '高三1班');
  • 若未指定字段(如 idcreate_time),则使用默认值(id 自增,create_time 自动填充当前时间)。
(2)插入多条记录
INSERT INTO students (name, gender, age, class) 
VALUES ('李四', '女', 17, '高三1班'),('王五', '男', 19, '高三2班'),('赵六', '其他', 18, '高三1班');

2. 查询数据(Read)

查询是最常用操作,通过 SELECT 语句实现。

(1)基础查询(查询所有字段)
SELECT * FROM students;  -- * 表示所有字段
(2)指定字段查询
SELECT name, age, class FROM students;  -- 只查询姓名、年龄、班级
(3)条件过滤(WHERE 子句)
-- 查询高三1班的男生,年龄 >=18
SELECT * FROM students 
WHERE class = '高三1班' AND gender = '男' AND age >= 18;-- 查询年龄在17-19岁之间的学生(BETWEEN ... AND)
SELECT * FROM students 
WHERE age BETWEEN 17 AND 19;-- 查询姓名包含“张”的学生(LIKE 模糊查询,% 匹配任意字符)
SELECT * FROM students 
WHERE name LIKE '%张%';-- 查询性别为“女”或“其他”的学生(IN 枚举值)
SELECT * FROM students 
WHERE gender IN ('女', '其他');
(4)排序(ORDER BY)
-- 按年龄降序排序(年龄大的在前)
SELECT * FROM students 
ORDER BY age DESC;-- 先按班级升序,再按年龄降序(多字段排序)
SELECT * FROM students 
ORDER BY class ASC, age DESC;
(5)分组与聚合(GROUP BY + 聚合函数)

统计每个班级的学生人数:

SELECT class, COUNT(*) AS student_count  -- COUNT(*) 统计记录数
FROM students 
GROUP BY class;  -- 按班级分组

在这里插入图片描述

(6)分页(LIMIT)

查询第2页数据(每页10条):

SELECT * FROM students 
LIMIT 10 OFFSET 10;  -- OFFSET 表示跳过的记录数(第2页从第11条开始)
-- 简写:LIMIT 10, 10(前10条跳过,取接下来的10条)

在这里插入图片描述

3. 修改数据(Update)

-- 将姓名为“张三”的学生年龄改为19岁
UPDATE students 
SET age = 19 
WHERE name = '张三';  -- 必须加 WHERE 条件,否则会修改所有记录!

4. 删除数据(Delete)

-- 删除高三2班的学生记录
DELETE FROM students 
WHERE class = '高三2班';  -- 必须加 WHERE 条件,否则会删除全表数据!

五、注意事项与最佳实践

  1. 编码问题:创建数据库/表时指定 CHARSET=utf8mb4,避免中文或 emoji 乱码。
  2. 主键设计:每张表建议设置主键(如自增 id),提高查询效率。
  3. 避免全表操作UPDATEDELETE 语句必须加 WHERE 条件,否则会修改/删除所有数据(可先 SELECT 验证条件)。
  4. 字段类型优化:根据业务需求选择合适的数据类型,如年龄用 TINYINT 而非 INT,节省空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92720.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92720.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92720.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批量把在线网络JSON文件(URL)转换成Excel工具 JSON to Excel by WTSolutions

产品介绍 JSON to Excel by WTSolutions 是一款功能强大的工具,能够将JSON数据快速转换为Excel格式。该工具提供两种使用方式:作为Microsoft Excel插件或作为在线网页应用,满足不同用户的需求。无论是处理简单的扁平JSON还是复杂的嵌套JSON结…

【排序算法】③直接选择排序

系列文章目录 第一篇:【排序算法】①直接插入排序-CSDN博客 第二篇:【排序算法】②希尔排序-CSDN博客 第三篇:【排序算法】③直接选择排序-CSDN博客 第四篇:【排序算法】④堆排序-CSDN博客 第五篇:【排序算法】⑤冒…

2024年ESWA SCI1区TOP,自适应种群分配和变异选择差分进化算法iDE-APAMS,深度解析+性能实测

目录1.摘要2.自适应种群分配和变异选择差分进化算法iDE-APAMS3.结果展示4.参考文献5.代码获取6.算法辅导应用定制读者交流1.摘要 为了提高差分进化算法(DE)在不同优化问题上的性能,本文提出了一种自适应种群分配和变异选择差分进化算法&…

目标检测数据集 - 无人机检测数据集下载「包含COCO、YOLO两种格式」

数据集介绍:无人机检测数据集,真实采集高质量含无人机图片数据,适用于空中飞行无人机的检测。数据标注标签包括 drone 无人机一个类别;适用实际项目应用:无人机检测项目,以及作为通用检测数据集场景数据的补…

Linux DNS服务解析原理与搭建

一、什么是DNSDNS 是域名服务 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。 域名服务器是指保存有该网络中所有主机的域名和对应IP地址, 并具有将域名转换为IP地址功能的服务器。 域名必须对应一个IP地址,而IP地址不一定有…

typecho博客设置浏览器标签页图标icon

修改浏览器标签页图标(favicon.ico):第1种:上传到服务器本地目录1、制作图标文件:准备一张长宽比为 1:1 的图片,将其上传到第三方 ico 生成网站,生成后缀为.ico 的图片文件,并将其命…

LoadBalancingSpi

本文是 Apache Ignite 中 Load Balancing SPI(负载均衡服务提供接口) 的核心说明,特别是其默认实现 RoundRobinLoadBalancingSpi 的工作原理。 它解释了 Ignite 如何在集群中智能地将任务(Job)分配到不同的节点上执行&…

Day43--动态规划--674. 最长连续递增序列,300. 最长递增子序列,718. 最长重复子数组

Day43–动态规划–674. 最长连续递增序列,300. 最长递增子序列,718. 最长重复子数组 674. 最长连续递增序列 方法:动态规划 思路: dp[i]含义:到i这个位置(包含i)的连续递增子序列的长度递推…

支持 UMD 自定义组件与版本控制:从 Schema 到动态渲染

源码 ⸻ 支持 UMD 自定义组件与版本控制:从 Schema 到动态渲染 在低代码平台或可视化大屏 SDK 中,支持用户上传自定义组件 是一个必备能力。 而在 React 场景下,自定义组件通常以 UMD 格式 打包并暴露为全局变量。 本篇文章,我…

zookeeper3.8.4安装以及客户端C++api编译

服务端直接下载编译好的bin版本 Apache Download Mirrors C客户端需要编译库文件 zookeeper 3.8.4 使用与C API编译 - 丘狸尾 - 博客园 杂七杂八的依赖 sudo apt update sudo apt install -y \autoconf automake libtool libtool-bin m4 pkg-config gettext \cmake build-es…

使用行为树控制机器人(一) —— 节点

文章目录一、背景需求二、创建ActionNodes1. 功能实现1.1 头文件定义1.2 源文件实现1.3 main文件实现1.4 my_tree.xml 实现2. 执行结果三、 执行失败处理1. 添加尝试次数1.1 功能实现1.2 实验结果2. 完善异常处理2.1 多节点组合兜底2.2 实验结果使用行为树控制机器人(一) —— …

JavaScript Window Location

JavaScript Window Location JavaScript中的window.location对象是操作浏览器地址栏URL的一个非常有用的对象。它允许开发者获取当前页面的URL、查询字符串、路径等,并且可以修改它们来导航到不同的页面。以下是关于window.location的详细解析。 1. window.location…

Kubernetes生产环境健康检查自动化指南

核心脚本功能: 一键检查集群核心组件状态自动化扫描节点/Pod异常存储与网络关键指标检测风险分级输出(红/黄/绿标识)一、自动化巡检脚本 (k8s-health-check.sh) #!/bin/bash # Desc: Kubernetes全维度健康检查脚本 # 执行要求:kub…

消息队列系统测试报告

目录 一、项目背景 二、RabbitMQ介绍 1.什么是RabbitMQ? 2.RabbitMQ的工作流程是怎么样的? 3.项目设计 三、测试概述 MQ 测试目标: 测试用例统计: 核心模块测试详情及代码示例: 1. 数据库管理(Da…

基于 Axios 的 HTTP 请求封装文件解析

import axios from "axios"; import { ElMessage } from "element-plus"; import store from "/store"; import router from "/router";// 创建axios实例 const service axios.create({baseURL: "http://localhost:8080/api&quo…

PowerDesigner生成带注释的sql方法

前提是name里面是有文字的: 方法开始: 第一步: Database → Edit Current DBMS → Script → Objects → Column → Add 把输出模板改成: %20:COLUMN% %30:DATATYPE%[.Z:[%Compressed%? compressed][ %NULLNOTNULL%][%IDENTITY…

猎板PCB:专业键盘PCB板解决方案供应商

猎板PCB深耕印刷电路板(PCB)制造领域,凭借前沿技术与深厚积淀,在键盘PCB板细分市场积极布局,致力于为不同客户提供多样化、高性能的键盘PCB板产品,满足多元需求。一、定义:键盘PCB板键盘PCB板&a…

基于 Spring Boot 的登录功能实现详解

在 Web 应用开发中,登录功能是保障系统安全的第一道防线。本文将结合实际代码,详细解析一个基于 Spring Boot 框架的登录功能实现,包括验证码生成、用户验证、Token 机制等关键环节。技术栈概览本登录功能实现涉及以下核心技术和组件&#xf…

vue+django 大模型心理学智能诊断评测系统干预治疗辅助系统、智慧心理医疗、带知识图谱

vuedjango 大模型心理学智能诊断评测系统干预治疗辅助系统、智慧心理医疗、带知识图谱文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处!编号:D003 pro基于大模型心理学问卷、智能诊断&…