📄🦌🙌🐟🏖️
日志记录
Where there is a where there is a way
随机文章
按住 Shift 横向滚动
热门文章
按住 Shift 横向滚动
触发器

触发器

触发器是一种与表关联的特殊存储过程,由表上的INSERT、UPDATE、DELETE事件自动触发执行,用于强制业务规则、维护数据一致性或记录日志。核心特性包括:事件驱动、支持BEFORE/AFTER触发时机、行级触发(每行变更触发一次)、不可显式调用。目前仅支持行级触发。 触发器类型中,INSERT型有NEW(新数据),DELETE型有OLD(旧数据),UPDATE型同时有NEW和OLD。创建语法为:`CREATE TRIGGER 触发器名 BEFORE/AFTER INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW BEGIN ... END;`。查看用`SHOW TRIGGERS;`,删除用`DROP TRIGGER [库名.]触发器名;`。通过`NEW.字段名`和`OLD.字段名`访问对应数据。

存储过程与存储函数

存储过程与存储函数

存储过程是预编译的SQL语句集合,支持参数传递、流程控制和异常处理,具有预编译提升效率、代码封装、减少网络开销和权限控制等特点。基本语法包括创建(`CREATE PROCEDURE`)、调用(`CALL`)、查看(`SELECT * FROM information_schema.routines`)、删除(`DROP PROCEDURE`)。变量分系统变量(全局/会话)、用户自定义变量(`@变量名`)和局部变量(需`DECLARE`声明)。参数类型有IN(输入)、OUT(输出)、INOUT(输入输出)。条件判断用IF和CASE,循环有WHILE、REPEAT、LOOP(配合LEAVE/ITERATE)。游标用于存储查询结果集并循环处理,需配合条件处理程序(如`DECLARE EXIT HANDLER FOR SQLSTATE '02000'`)避免无限循环。存储函数是有返回值的存储过程(参数默认为IN),调用时使用`SELECT`,且需指定函数特性(如DETERMINISTIC)。

视图View

视图View

视图是一种虚拟表,由基表的查询结果动态生成,不存储实际数据。其特点包括动态更新、逻辑抽象、权限隔离和简化操作。创建视图使用`CREATE VIEW`语句,可自定义列名;查询、修改和删除分别对应`SELECT`、`CREATE OR REPLACE`/`ALTER`和`DROP VIEW`。通过`WITH CHECK OPTION`(支持`CASCADED`或`LOCAL`)可限制插入数据符合查询条件,其中`CASCADED`会递归检查所有依赖视图的约束,`LOCAL`仅检查当前及显式约束的视图。视图的更新要求行与基表一一对应,且不能包含聚合函数、`DISTINCT`、`GROUP BY`、`HAVING`、`UNION`等操作。视图的主要作用:简化复杂查询、提升安全性(控制用户访问特定行列)、实现数据独立(屏蔽基表变化)。

SQL优化

SQL优化

本文总结了MySQL数据库优化的七大策略: 1. **Insert优化**:采用批量插入、LOAD DATA INFILE、事务包裹减少I/O;调整InnoDB缓冲池、日志参数,或使用MyISAM应对高插入场景。 2. **主键优化**:InnoDB为索引组织表,顺序插入避免页分裂,页合并受MERGE_THRESHOLD控制;主键应短小、顺序递增、避免修改。 3. **Order by优化**:利用索引排序(using index)避免filesort;若无法避免,可增大sort_buffer_size。 4. **Group by优化**:为分组字段加索引,避免临时表(using tempory)。 5. **Limit优化**:避免大偏移量全表扫描,使用覆盖索引、游标分页、延迟关联或预计算分页元数据。 6. **Count优化**:InnoDB中count(*)效率最高,count(1)次之,count(字段)需判空;可用触发器维护计数器。 7. **Update优化**:更新时确保使用索引字段,否则行锁可能升级为表锁,降低并发性能。

MySql索引

MySql索引

MySQL索引是帮助数据库高效获取数据的有序数据结构(如B+Tree),能提升检索与排序效率,但会降低增删改性能并占用空间。InnoDB默认采用B+Tree索引,因其多叉低高度减少磁盘I/O、叶子节点链表支持范围查询、查询性能稳定,并支持聚簇索引与二级索引。索引按功能分为主键、唯一、普通、全文和组合索引,按存储分为聚簇与非聚簇索引。使用联合索引需遵循最左前缀原则,避免在索引列使用函数、隐式类型转换、OR连接非索引字段、前导模糊查询等导致索引失效。设计索引时,应对查询频繁、区分度高、常作为WHERE/ORDER BY/GROUP BY条件的字段建立索引,优先使用唯一索引和联合索引,控制索引数量,字符串字段可用前缀索引,建议列定义为NOT NULL。

MySQL存储引擎

MySQL存储引擎

MySQL存储引擎是表级别的技术实现,决定了数据的存储、索引和查询方式。InnoDB(5.5后默认)支持事务、行级锁、外键和ACID特性,采用表空间→段→区→页→行的逻辑存储结构,适合高并发写入场景。MyISAM以读速度快、存储空间小著称,但仅支持表级锁、无事务和崩溃恢复能力,适合只读或低并发场景。Memory引擎将数据完全存储在内存中,读写极快,但重启后数据丢失,仅支持表级锁,适合缓存、会话等临时数据。三种引擎在锁机制、索引类型、事务支持和适用场景上差异显著,实际开发需根据业务需求选择。

事务

事务

事务是一组不可分割的操作集合,要么全部成功要么全部失败。MySQL默认自动提交每条DML语句,但可通过BEGIN/START TRANSACTION显式开启事务,用COMMIT提交、ROLLBACK回滚。事务的四大特性(ACID):原子性依赖Undo Log回滚;一致性由数据库约束和应用逻辑保证;隔离性通过MVCC和锁机制(如Next-Key锁)实现,默认级别REPEATABLE READ避免脏读、不可重复读和幻读;持久性依赖Redo Log和Double Write Buffer确保提交后数据不丢失。

多表查询

多表查询

本文介绍了数据库中多表之间的关系(一对多、多对多、一对一)及其实现方式,重点讲解了多表查询的几种类型:内连接(隐式与显式)、外连接(左外与右外)、自连接、联合查询以及子查询(标量、列、行、表),并附有SQL语法示例。核心观点是掌握不同连接方式以有效消除笛卡尔积,获取所需关联数据。

函数与约束条件

函数与约束条件

本文介绍了SQL中常用的函数与约束条件。函数部分涵盖字符串函数(Concat拼接、Lower/Upper大小写转换、Lpad/Rpad填充、Trim去空格、Substring截取)、日期函数(Curdate/Curtime/Now获取当前时间、Year/Month/Day提取部分、Date_add/Datediff时间计算)、数值函数(Ceil/Floor取整、Mod取余、Rand随机数、Round四舍五入)以及流程控制函数(if、ifnull、case when多分支判断)。约束条件用于保证数据正确性、有效性和完整性,包括非空(not null)、唯一(unique)、主键(primary key)、默认(default)、检查(check)和外键(foreign key)。外键用于建立表间关联,支持级联操作(cascade、set null等),但现代微服务架构中较少使用。

SQL基础

SQL基础

SQL语言不区分大小写,分为DDL(数据库/表定义)、DML(表数据增删改)、DQL(数据查询)和DCL(权限管理)。数据类型包括整型(tinyint到bigint)、浮点型(float、double、decimal)、字符串(char固定长度、varchar可变长度)、二进制/文本类型以及日期类型(date、time、datetime等)。DDL用于创建、删除、修改数据库和表结构;DML用于插入、更新、删除数据;DQL支持基本查询、条件查询(含三值逻辑与NULL处理)、聚合函数、分组(先where过滤后having过滤)、排序和分页查询,执行顺序为from→where→group by→having→select→order by→limit。DCL管理用户(创建、修改密码、删除)和权限授予/撤销。

© 2026 日志记录