初级程序员必备的十大技能之计算机基础必备(四)

简介: 教程来源 http://lemci.cn 本节系统讲解数据库核心知识:涵盖关系型与非关系型数据库对比;SQL增删改查、多表JOIN、事务及EXPLAIN优化;B+树索引原理与失效场景;连接池机制与实践;以及三大范式驱动的规范化设计。理论结合代码,助力高效、可靠的数据持久化开发。

四、数据库:数据的持久化存储

4.1 关系型数据库与非关系型数据库
image.png
4.2 SQL 核心知识

-- 1. 数据库操作
CREATE DATABASE myapp;
USE myapp;

-- 2. 表操作
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    age INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 3. 索引(性能优化关键)
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_age ON users(age);
-- 复合索引
CREATE INDEX idx_users_age_email ON users(age, email);

-- 4. 增删改查
-- 插入
INSERT INTO users (username, email, age) VALUES ('zhangsan', 'zs@example.com', 25);

-- 查询
SELECT * FROM users WHERE age > 18 ORDER BY created_at DESC LIMIT 10;
SELECT COUNT(*) FROM users WHERE age BETWEEN 18 AND 30;
SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 5;

-- 更新
UPDATE users SET age = 26 WHERE username = 'zhangsan';

-- 删除
DELETE FROM users WHERE username = 'zhangsan';

-- 5. 多表查询(JOIN)
-- 内连接
SELECT u.username, o.order_amount 
FROM users u 
INNER JOIN orders o ON u.id = o.user_id;

-- 左连接(即使没有订单的用户也会显示)
SELECT u.username, COALESCE(o.order_amount, 0) as amount
FROM users u 
LEFT JOIN orders o ON u.id = o.user_id;

-- 6. 事务(保证数据一致性)
BEGIN TRANSACTION;
    UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
    -- 如果中间出错,执行 ROLLBACK
COMMIT;

-- 7. 查询优化分析
EXPLAIN SELECT * FROM users WHERE email = 'zs@example.com';

4.3 索引的工作原理
索引类似于书的目录,能大幅提升查询速度,但会降低写入速度。

// 索引底层使用 B+ 树(平衡多路搜索树)
// B+ 树特点:
// 1. 所有数据都在叶子节点
// 2. 叶子节点之间有链表连接(范围查询高效)
// 3. 节点存储多个键值(降低树高度)

// 无索引查询:全表扫描 O(n)
// 有索引查询:B+树查找 O(log n)

// 索引失效的场景
SELECT * FROM users WHERE age + 1 = 26;      -- ❌ 对列进行运算
SELECT * FROM users WHERE UPPER(name) = 'ZHANG'; -- ❌ 使用函数
SELECT * FROM users WHERE name LIKE '%三%';   -- ❌ 前导模糊匹配
SELECT * FROM users WHERE age > 18 OR name = '李四'; -- ⚠️ OR 可能失效

4.4 数据库连接池

// Node.js + MySQL 连接池示例
const mysql = require('mysql2');

const pool = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'myapp',
    waitForConnections: true,
    connectionLimit: 10,      // 最大连接数
    queueLimit: 0,            // 队列无限制
    enableKeepAlive: true,
    keepAliveInitialDelay: 0
});

// 使用连接池执行查询
async function query(sql, params) {
    const [rows] = await pool.promise().execute(sql, params);
    return rows;
}

// 连接池的好处
// 1. 复用连接,避免频繁创建/销毁开销
// 2. 限制并发连接数,防止数据库过载
// 3. 自动管理连接生命周期

4.5 数据库设计原则
三大范式
image.png

-- 违反第三范式的示例
CREATE TABLE orders_bad (
    order_id INT PRIMARY KEY,
    user_id INT,
    user_name VARCHAR(50),   -- 依赖 user_id,不是直接依赖 order_id
    product_id INT,
    product_name VARCHAR(50) -- 依赖 product_id
);

-- 符合第三范式
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    product_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

来源:
http://xcfsr.cn

相关文章
|
19天前
|
编解码 数据可视化 前端开发
前端组件库——DataV知识点大全(二)
教程来源 https://www.xbivx.cn DataV提供40+高质量组件,涵盖边框(13种SVG动画边框)、装饰、数字翻牌器、滚动表格、水位图、锥形柱图、飞线图及全屏容器等,支持高度自定义与响应式适配,助力快速构建专业数据大屏。
|
19天前
|
资源调度 数据可视化 前端开发
前端组件库——DataV知识点大全(一)
教程来源 https://www.wkmsa.cn DataV是专注大屏可视化的开源Vue组件库,提供丰富SVG边框、装饰与图表组件,助力快速构建震撼数据看板。基于Vue3+TS重构,支持主题定制与按需引入;3.0版将集成WebGPU,性能提升47%。开箱即用,大幅降低开发门槛。
|
15天前
|
前端开发 JavaScript 数据可视化
前端组件库 ——Three.js 知识点大全(一)
教程来源 https://www.vhjpe.cn/ Three.js 是基于 WebGL 的主流 JavaScript 3D 库,封装底层图形接口,让开发者用简洁代码快速构建网页级 3D 场景。涵盖场景、相机、渲染器三大核心,支持几何体、材质、光照、动画等完整管线,广泛应用于数据可视化、虚拟展厅与智慧园区等领域。
|
16天前
|
JavaScript Java 关系型数据库
全栈(Java + Vue + MySQL)开发图书管理系统教程(一)
教程来源 https://yyvgt.cn 本教程带你从零打造全栈图书管理系统,涵盖Spring Boot+Vue3前后端分离开发、JWT认证、RBAC权限控制、MySQL数据库设计(含范式化/索引/软删除)及统一RESTful接口规范,深入原理与工程实践。
|
20天前
|
移动开发 自然语言处理 小程序
前端组件库——Wot Design Uni知识点大全(三)
教程来源 https://rvtst.cn Wot Design Uni 是基于 Vue3 的跨平台 UI 组件库,支持微信/支付宝小程序、H5、App 等多端兼容;提供样式隔离修复、virtualHost 渲染优化、虚拟列表、按需引入、国际化(15+语言)等完整解决方案。
|
20天前
|
移动开发 前端开发 JavaScript
前端组件库——Wot Design Uni知识点大全(二)
教程来源 http://unbgv.cn Wot Design Uni 是基于 Vue3+TS 的跨平台 uni-app 组件库,提供 70+ 高质量组件。涵盖按钮、单元格、表单(支持链式校验)、弹窗、Toast、虚拟列表及带徽标的 Tabs 等,全面适配小程序/H5/APP,支持暗黑模式与国际化。
|
20天前
|
JSON 小程序 前端开发
前端组件库——Vant Weapp知识点大全
教程来源 http://oplhc.cn/ Vant Weapp是有赞官方打造的高星(1.1w+)微信小程序UI组件库,轻量、稳定、高性能,含50+组件与CSS变量主题系统,支持按需引入与深度定制,是小程序开发首选开源UI方案。
|
24天前
|
人工智能 前端开发 JavaScript
前端组件库——shadcn/ui知识点大全(三)
教程来源 http://lemci.cn/ shadcn/ui通过Tree Shaking、动态导入、Tailwind JIT等实现极致性能优化,Bundle仅增20–50KB;组件即代码,完全可控、可定制、易维护,契合Next.js+Tailwind现代栈与AI协作开发。
|
8天前
|
前端开发 JavaScript API
前端组件库 ——LayUI 知识点大全(一)
教程来源 http://oplhc.cn LayUI是由国内开发者“贤心”于2016年推出的经典模块化前端UI框架,MIT开源。不依赖Vue/React等现代框架,零配置、低门槛、开箱即用,尤受后端开发者与中小项目青睐。2026年仍持续更新,最新版2.11+强化组件与工程化支持。
|
13天前
|
Web App开发 前端开发 数据可视化
前端组件库 ——ECharts 知识点大全(一)
教程来源 https://bgnno.cn/ ECharts 是 Apache 顶级开源可视化库,由百度于2013年发起,支持50+图表类型、千万级数据渲染、Canvas/SVG双引擎及深度交互。兼容主流浏览器与移动端,广泛应用于商业、政务与科研领域。