MySQL 面试真题(带答案)

news/2024/8/21 23:26:54 标签: mysql, 面试, android

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.connector

def 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.lastrowid
        
        for 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.price
        FROM orders o
        JOIN order_items i ON o.order_id = i.order_id
        WHERE 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.niftyadmin.cn/n/5555976.html

相关文章

雷赛运动控制卡编程(2)限位设定与回原方式、脉冲模式设置

一、限位开关及急停开关的设置 限位开关的设置 //设置限位开关// dmc_set_el_modeushort _cardNo0;ushort _axisNo 0;ushort _enable 1; // 正负限位使能 ushort _elLogic 0; // 正负限位 低电平 有效ushort _model 0;// 正负限位停止方式为立即停止LTDMC.dmc_set_el_m…

Python使用策略模式和openpyxl库创建Excel文件并追加内容

from openpyxl import load_workbook# 数据数组 data [[1, 2, 3],[4, 5, 6],[7, 8, 9] ]# 打开现有的 Excel 文件 excel_file sheetApend_example.xlsx wb load_workbook(excel_file)# 选择要追加数据的工作表 sheet_name test_Sheet2 # 指定要追加数据的工作表名称 sheet…

Linux系统的用户组管理和权限以及创建用户

1.Linux是多用户的操作系统,正如在Windows系统中可以进行用户账号的切换,Linux同样允许多用户操作。在Linux服务器环境中,通常由多名运维人员共同管理,而这些运维人员各自拥有不同的权限和级别。因此,我们可以根据每个…

迅为RK3588S开发板广泛用于边缘技术,人工智能,智能家居,智慧零售,智能网关等

性能强 iTOP-3588S开发板采用瑞芯微RK3588S处理器,是全新一代AloT高端应用芯片,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构主频高达2.4GHZ,8GB内存,32GBEMMC。 四核心架构GPU内置GPU可以完全兼容0penGLES1.1…

vue3解决报错:ResizeObserver loop completed with undelivered notifications

运行环境:vue3 js 报错内容:ERROR ResizeObserver loop completed with undelivered notifications. at handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58) at eval (webpack-internal:///./node_modules…

Dify中的分段设置参数

1.自动分段与清洗 自动设置分段规则与预处理规则,如果不了解这些参数建议选择此项。 rules字段的 JSON 格式化的配置,以及每个组件的解释: {"pre_processing_rules": [{"id": "remove_extra_spaces","en…

Redis分布式解决方案 codis

引言 在大数据高并发场景下,单个Redis实例往往会显得捉襟见肘。首先体现在内存上,单个Redis的内存不宜过大,内存太大会导致rdb文件过大,进一步导致主从同步时全量同步时间过长,在实例重启恢复时也会消耗很长的时间加载…

MySQL学习|深入解析MySQL事务:原理、隔离级别与面试技巧

文章目录 1. MySQL事务的特性原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) 2. MySQL事务的隔离级别读未提交(Read Uncommitted&#xff09…