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

数据库笔记

数据库结构解析

数据库结构通常分为三层:外模式(用户视图)、概念模式(逻辑设计)和内模式(物理存储)。核心组件包括表、字段、索引、约束(如主键、外键)以及视图。关系型数据库遵循ACID原则(原子性、一致性、隔离性、持久性),而非关系型数据库(如MongoDB)采用文档或键值存储。

-- 示例:查看表结构
DESCRIBE employees;

建库建表

创建数据库需定义字符集和排序规则,建表时需明确字段类型(如VARCHAR, INT)和约束。主键确保唯一性,外键维护表间关系。

-- 创建数据库
CREATE DATABASE company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 创建表
CREATE TABLE employees (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,dept_id INT,FOREIGN KEY (dept_id) REFERENCES departments(id)
);

查询基础

基础查询包括SELECT、WHERE筛选、GROUP BY分组和ORDER BY排序。聚合函数(如COUNT, SUM)常与GROUP BY配合使用。

-- 条件查询示例
SELECT name, salary 
FROM employees 
WHERE salary > 5000 
ORDER BY hire_date DESC;

JOIN操作

JOIN用于关联多张表,常见类型包括INNER JOIN(交集)、LEFT JOIN(左表全保留)和RIGHT JOIN。需注意关联字段的索引性能。

-- INNER JOIN示例
SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;

进阶知识点

索引优化
创建索引加速查询,但过多索引影响写入性能。复合索引需遵循最左前缀原则。

-- 创建复合索引
CREATE INDEX idx_name_dept ON employees(name, dept_id);

事务控制
使用BEGIN, COMMIT, ROLLBACK管理事务,隔离级别(如READ COMMITTED)影响并发行为。

-- 事务示例
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

窗口函数
适用于分组计算但不合并行的场景,如排名、累积求和。

-- 计算部门薪资排名
SELECT name, salary,RANK() OVER (PARTITION BY dept_id ORDER BY salary DESC) AS rank
FROM employees;

存储过程与触发器
存储过程封装复杂逻辑,触发器自动响应数据变更。

-- 存储过程示例
CREATE PROCEDURE raise_salary(IN emp_id INT, IN amount DECIMAL)
BEGINUPDATE employees SET salary = salary + amount WHERE id = emp_id;
END;

相关文章:

  • 一句话开发Chrome摸鱼插件
  • OpenCV中的分水岭算法 (C/C++)
  • 大语言模型的技术原理与应用前景:从Transformer到ChatGPT
  • 晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册
  • 【解决办法】Git报错error: src refspec main does not match any.
  • 通信算法之280:无人机侦测模块知识框架思维导图
  • Spring Boot中使用@JsonAnyGetter和@JsonAnySetter处理动态JSON属性
  • 移动安全Android——解决APP抓包证书无效问题
  • Spring Boot 基础知识全面解析:快速构建企业级应用的核心指南
  • 备战2025全国青少年信息素养大赛省赛—图形化编程—每一练——打开密码锁
  • 关于ffplay在macos上运行奔溃的问题
  • 英语中最难学的部分是时态‌
  • 一、Python 常用内置工具(函数、模块、特性)的汇总介绍和完整示例
  • #Js篇:BlobFile对象URL.createObjectURL()fetchlocationnavigatornew URl
  • 动态规划-300.最长递增子序列-力扣(LeetCode)
  • (LeetCode 每日一题)2359. 找到离给定两个节点最近的节点( 图)
  • haproxy 搭建web群集
  • Flexbox + Grid 组合布局技术解析
  • 通用的防御框架,用于抵御(多模态)大型语言模型的越狱攻击
  • @Docker Compose 部署 Pushgateway
  • 做网站需要备案么/南宁百度seo排名公司
  • jiathis wordpress/西安seo和网络推广
  • 怎么做网站收录的关键词/代发软文
  • 网站建设制作多少钱/网络营销专业学校排名
  • wordpress如何导入/长沙市seo百度关键词
  • 电子商务网站建设试卷.doc/seo的基础优化