第一类:基础增删改查
- 从
user表里查出所有字段。 - 从
user表里查出年龄大于25岁的用户的姓名和年龄。 - 从
user表里查出年龄在20到30岁之间的用户。 - 往
user表里插入一条数据:name=李四, age=28, city=成都。 - 把
user表里张三的年龄改成26岁。 - 把
user表里所有成都用户的年龄加1岁。 - 删除
user表里名字叫王五的人。 - 删除
user表里年龄小于18岁的用户。
第二类:查询进阶
- 从
user表里查出年龄最大的前3个人。 - 从
user表里查出年龄最小的那个人。 - 统计
user表里总共有多少人。 - 统计
user表里每个城市各有多少人。 - 统计
user表里年龄大于20岁的各城市人数。 - 从
user表里查出名字里带“张”的人。 - 从
user表里查出手机号以“139”开头的人。
第三类:多表查询
- 查出所有用户的姓名和他们的订单金额。
- 查出所有下单了的用户姓名(有订单记录的用户)。
- 查出从未下过单的用户姓名。
- 查出每个用户的订单总金额。
- 查出订单金额大于1000的用户姓名和订单金额。
- 查出订单数量最多的前3个用户。
第四类:索引与优化
- 给
user表的name字段加一个索引。 - 给
order表的user_id和amount加一个联合索引。 - 怎么查看一条查询有没有走索引?
- 怎么查看当前数据库里有哪些索引?
第五类:MySQL日常管理
- 怎么登录MySQL数据库?
- 怎么查看MySQL里有哪些数据库?
- 怎么切换到某个数据库(比如叫
test_db)? - 怎么查看当前数据库里有哪些表?
- 怎么查看
user表的结构? - 怎么查看
user表的建表语句? - 怎么查看MySQL当前的所有连接?
- 怎么杀掉一个卡住的连接(ID是123)?
第六类:备份与恢复
- 怎么备份一个叫
test_db的数据库? - 怎么恢复刚才备份的数据库?
第七类:故障排查(情景题)
- 客户说“应用连不上数据库了”,你会按什么顺序排查?
- MySQL的默认端口是多少?
- 客户报错“Too many connections”,是什么意思?怎么处理?
- 客户报错“Duplicate entry”,是什么意思?怎么处理?
- 客户报错“Table doesn’t exist”,但客户坚持说表存在,可能是什么原因?
- 一条SQL查询跑得很慢,你会怎么排查?
- 怎么看MySQL的错误日志?
第八类:简单函数与运算
- 查出所有用户的姓名和年龄,并且按年龄从大到小排序。
- 查出所有用户的姓名和年龄,年龄显示为“成年”或“未成年”(18岁以上为成年)。
- 查出每个用户下单的日期(只显示年月日,不要时分秒)。
一键生成库表(可直接执行)
-- 1. 创建数据库
CREATE DATABASE IF NOT EXISTS interview_db;
USE interview_db;
-- 2. 创建用户表
CREATE TABLE IF NOT EXISTS user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
city VARCHAR(50),
phone VARCHAR(20),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 3. 创建订单表
CREATE TABLE IF NOT EXISTS orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
amount DECIMAL(10,2),
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id)
);
-- 4. 插入用户数据
INSERT INTO user (name, age, city, phone) VALUES
('张三', 25, '成都', '13912345678'),
('李四', 30, '北京', '13812345678'),
('王五', 22, '上海', '13712345678'),
('赵六', 35, '成都', '13612345678'),
('孙七', 28, '广州', '13512345678'),
('周八', 32, '深圳', '13412345678'),
('吴九', 27, '成都', '13312345678'),
('郑十', 29, '北京', '13212345678'),
('钱多多', 45, '上海', '13112345678'),
('孙小美', 19, '成都', '13012345678'),
('李大嘴', 33, '重庆', '13987654321'),
('王小二', 24, '成都', '13887654321'),
('张小三', 26, '西安', '13787654321'),
('刘大拿', 38, '成都', '13687654321'),
('陈小春', 41, '香港', '13587654321');
-- 5. 插入订单数据
INSERT INTO orders (user_id, amount, order_date) VALUES
(1, 299.00, '2024-03-01 10:30:00'),
(1, 1599.00, '2024-03-05 14:20:00'),
(2, 899.00, '2024-03-02 09:15:00'),
(3, 199.00, '2024-03-03 16:45:00'),
(4, 2599.00, '2024-03-01 11:30:00'),
(4, 399.00, '2024-03-04 13:20:00'),
(4, 1299.00, '2024-03-06 15:10:00'),
(5, 699.00, '2024-03-02 17:30:00'),
(6, 499.00, '2024-03-03 12:00:00'),
(7, 1799.00, '2024-03-04 10:30:00'),
(8, 899.00, '2024-03-05 11:20:00'),
(9, 3299.00, '2024-03-01 15:40:00'),
(10, 199.00, '2024-03-06 09:30:00'),
(11, 799.00, '2024-03-02 14:50:00'),
(12, 459.00, '2024-03-03 16:20:00'),
(13, 1299.00, '2024-03-04 11:10:00'),
(14, 899.00, '2024-03-05 13:40:00'),
(15, 599.00, '2024-03-06 10:00:00');
-- 6. 验证数据
SELECT 'user表数量' AS info, COUNT(*) FROM user
UNION ALL
SELECT 'orders表数量', COUNT(*) FROM orders;
执行完后会得到:
- user表:15条数据(分布在成都、北京、上海等地)
- orders表:18条订单(部分用户多笔,部分用户无订单——第15号用户没有订单,可以用来练LEFT JOIN)
发表回复