MySQL 基础操作教程

MySQL 是目前最流行的开源关系型数据库管理系统之一,广泛应用于Web开发、数据分析等场景。掌握基础的增删改查操作是入门的关键。本文将带你深入了解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)分组与聚合

1.GROUP BY + 聚合函数
统计每个班级的学生人数:

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

在这里插入图片描述
2.having 分组条件筛选

-- 查询平均年龄 > 18岁的高三班级(假设学生表有 class 和 age 字段)
SELECT class, AVG(age) AS avg_age 
FROM students 
WHERE class LIKE '高三%'  -- 分组前先过滤非高三班级(可选)
GROUP BY class 
HAVING AVG(age) > 18;  -- 分组后筛选平均年龄达标的班级
(6)分页(LIMIT)

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

SELECT * FROM students 
LIMIT 10 OFFSET 10;  --LIMITB OFFSET 表示跳过的记录数
-- 简写:LIMIT 10, 10(前10条跳过,取接下来的10条)

LIMIT 10表示最多返回10行 ,OFFSET 表示跳过的记录数
– 简写:LIMIT 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,节省空间。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值