当前位置: 首页 > news >正文

MySQL 面试真题(带答案)

MySQL 场景面试题

目录

  1. 场景1:用户注册和登录系统
    • 1.1 数据库设计
    • 1.2 用户注册
    • 1.3 用户登录
  2. 场景2:订单管理系统
    • 2.1 数据库设计
    • 2.2 创建订单
    • 2.3 查询订单
  3. 场景3:博客系统
    • 3.1 数据库设计
    • 3.2 发布文章
    • 3.3 评论功能

场景1:用户注册和登录系统

1.1 数据库设计

设计一个简单的用户注册和登录系统,包含用户表 users,表结构如下:

CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL,email VARCHAR(100) NOT NULL UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

1.2 用户注册

用户注册时,需要将用户名、密码和邮箱存入数据库。使用如下 SQL 语句进行用户注册:

INSERT INTO users (username, password, email) 
VALUES ('test_user', 'password123', 'test_user@example.com');

假设在代码中,使用准备好的语句进行注册操作:

import mysql.connectordef register_user(username, password, email):conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='test_db')cursor = conn.cursor()try:cursor.execute("INSERT INTO users (username, password, email) VALUES (%s, %s, %s)", (username, password, email))conn.commit()print("User registered successfully")except mysql.connector.Error as err:print("Error: {}".format(err))finally:cursor.close()conn.close()# Example usage
register_user('test_user', 'password123', 'test_user@example.com')

1.3 用户登录

用户登录时,需要验证用户名和密码。使用如下 SQL 语句进行验证:

SELECT * FROM users WHERE username = 'test_user' AND password = 'password123';

假设在代码中,使用准备好的语句进行登录验证:

def login_user(username, password):conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='test_db')cursor = conn.cursor()cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))user = cursor.fetchone()if user:print("Login successful")else:print("Invalid username or password")cursor.close()conn.close()# Example usage
login_user('test_user', 'password123')

场景2:订单管理系统

2.1 数据库设计

设计一个简单的订单管理系统,包括订单表 orders 和订单详情表 order_items,表结构如下:

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,total_amount DECIMAL(10, 2) NOT NULL
);CREATE TABLE order_items (item_id INT AUTO_INCREMENT PRIMARY KEY,order_id INT NOT NULL,product_id INT NOT NULL,quantity INT NOT NULL,price DECIMAL(10, 2) NOT NULL,FOREIGN KEY (order_id) REFERENCES orders(order_id)
);

2.2 创建订单

创建订单时,需要在 orders 表中插入订单记录,并在 order_items 表中插入订单项记录。使用如下 SQL 语句进行插入:

INSERT INTO orders (user_id, total_amount) VALUES (1, 100.00);
INSERT INTO order_items (order_id, product_id, quantity, price) VALUES (LAST_INSERT_ID(), 101, 2, 50.00);

假设在代码中,使用事务进行创建订单操作:

def create_order(user_id, order_items):conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='test_db')cursor = conn.cursor()try:cursor.execute("INSERT INTO orders (user_id, total_amount) VALUES (%s, %s)", (user_id, sum(item['quantity'] * item['price'] for item in order_items)))order_id = cursor.lastrowidfor item in order_items:cursor.execute("INSERT INTO order_items (order_id, product_id, quantity, price) VALUES (%s, %s, %s, %s)", (order_id, item['product_id'], item['quantity'], item['price']))conn.commit()print("Order created successfully")except mysql.connector.Error as err:conn.rollback()print("Error: {}".format(err))finally:cursor.close()conn.close()# Example usage
order_items = [{'product_id': 101, 'quantity': 2, 'price': 50.00},{'product_id': 102, 'quantity': 1, 'price': 100.00}
]
create_order(1, order_items)

2.3 查询订单

查询订单时,需要关联 orders 表和 order_items 表。使用如下 SQL 语句进行查询:

SELECT o.order_id, o.order_date, o.total_amount, i.product_id, i.quantity, i.price
FROM orders o
JOIN order_items i ON o.order_id = i.order_id
WHERE o.user_id = 1;

假设在代码中,进行查询订单操作:

def get_orders(user_id):conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='test_db')cursor = conn.cursor()cursor.execute("""SELECT o.order_id, o.order_date, o.total_amount, i.product_id, i.quantity, i.priceFROM orders oJOIN order_items i ON o.order_id = i.order_idWHERE o.user_id = %s""", (user_id,))orders = cursor.fetchall()for order in orders:print(order)cursor.close()conn.close()# Example usage
get_orders(1)

场景3:博客系统

3.1 数据库设计

设计一个简单的博客系统,包括文章表 posts 和评论表 comments,表结构如下:

CREATE TABLE posts (post_id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,content TEXT NOT NULL,author_id INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);CREATE TABLE comments (comment_id INT AUTO_INCREMENT PRIMARY KEY,post_id INT NOT NULL,user_id INT NOT NULL,comment TEXT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (post_id) REFERENCES posts(post_id)
);

3.2 发布文章

发布文章时,需要在 posts 表中插入记录。使用如下 SQL 语句进行插入:

INSERT INTO posts (title, content, author_id) VALUES ('My First Post', 'This is the content of my first post.', 1);

假设在代码中,进行发布文章操作:

def create_post(title, content, author_id):conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='test_db')cursor = conn.cursor()try:cursor.execute("INSERT INTO posts (title, content, author_id) VALUES (%s, %s, %s)", (title, content, author_id))conn.commit()print("Post created successfully")except mysql.connector.Error as err:print("Error: {}".format(err))finally:cursor.close()conn.close()# Example usage
create_post('My First Post', 'This is the content of my first post.', 1)

3.3 评论功能

用户可以对文章进行评论,需要在 comments 表中插入记录。使用如下 SQL 语句进行插入:

INSERT INTO comments (post_id, user_id, comment) VALUES (1, 2, 'This is a comment.');

假设在代码中,进行评论操作:

def add_comment(post_id, user_id, comment):conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1', database='test_db')cursor = conn.cursor()try:cursor.execute("INSERT INTO comments (post_id, user_id, comment) VALUES (%s, %s, %s)", (post_id, user_id, comment))conn.commit()print("Comment added successfully")except mysql.connector.Error as err:print("Error: {}".format(err))finally:cursor.close()conn.close()# Example usage
add_comment(1, 2, 'This is a comment.')

以上是关于 MySQL 的详细场景面试题及解答,涵盖了用户注册和登录系统、订单管理系统和博客系统的具体场景和代码实现,供参考学习。

http://www.lryc.cn/news/398743.html

相关文章:

  • 《A++ 敏捷开发》- 10 二八原则
  • Spring Boot 框架知识汇总
  • 国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)
  • Go:基本变量与数据类型
  • 计算器原生js
  • 怎样将aac转换mp3格式?推荐四个aac转MP3的方法
  • MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询
  • html5——CSS高级选择器
  • Python-数据爬取(爬虫)
  • 虚幻引擎ue5如何调节物体锚点
  • Xcode持续集成之道:自动化构建与部署的精粹
  • Java高频面试基础知识点整理13
  • css画半圆画圆弧
  • LeetCode HOT100(四)字串
  • uniapp引入 uview( HBuilder 和 npm 两种安装方式) #按需引入
  • 使用uni-app和Golang开发影音类小程序
  • 基于Go1.19的站点模板爬虫详细介绍
  • 永恒之蓝:一场网络风暴的启示
  • AI绘画:艺术与科技的交融,创新浪潮与无限可能
  • 医疗健康信息的安全挑战与隐私保护最佳实践
  • 《C++并发编程实战》笔记(一、二)
  • 【日常bug记录】el-checkbox 绑定对象数组
  • 单元测试Mockito笔记
  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源代码参考
  • GitHub连接超时问题 Recv failure: Connection was reset
  • 浅谈PostCSS
  • GCN、GIN
  • Web控件进阶交互
  • 基于SpringBoot的校园疫情防控系统
  • elasticsearch 查询超10000的解决方案