数据库介绍
常用关系型数据库
Oracle数据库
MySQL数据库
SQL Server数据库
MySQL基础
1. MySQL简介
MySQL是一个广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典公司MySQL AB开发,现隶属于Oracle公司。它以高性能、可靠性和易用性著称,是Web应用(如 WordPress、Facebook 等)和许多企业系统的核心数据库解决方案。
-
开源关系型数据库管理系统(RDBMS)
-
使用SQL(结构化查询语言)进行数据库操作
-
支持多种存储引擎,如InnoDB、MyISAM等
2. 数据类型
通过合理选择数据类型,可以显著提高数据库性能和减少存储空间。
-
数值类型:INT, SMALLINT, TINYINT, BIGINT, FLOAT, DOUBLE, DECIMAL
-
字符串类型:CHAR, VARCHAR, TEXT, BLOB
-
日期时间类型:DATE, TIME, DATETIME, TIMESTAMP, YEAR
-
其他类型:ENUM, SET, JSON(5.7+)
3. 常用命令
掌握这些指令可以完成大多数数据库操作任务。实际使用时需要根据具体场景选择合适的指令和语法。
-- 数据库操作
CREATE DATABASE dbname;
USE dbname;
DROP DATABASE dbname;
-- 表操作
CREATE TABLE name (column1 datatype, column2 datatype, ...);
DROP TABLE name ;
ALTER TABLE name ADD columnname datatype;
ALTER TABLE name DROP COLUMN columnname;
SQL语句
1. DML(数据操作语言)
DML是SQL中用于操作数据库中实际数据的语言部分
-- 插入数据
INSERT INTO name (column1, column2) VALUES (value1, value2);
-- 更新数据
UPDATE name SET column1 = value1 WHERE condition;
-- 删除数据
DELETE FROM name WHERE condition;
-- 查询数据
SELECT column1, column2 FROM name WHERE condition;
DML 特点
-
操作对象是表中的数据(记录)
-
需要事务控制(COMMIT/ROLLBACK)
-
可以包含 WHERE 子句来限定操作范围
-
通常需要表级别的权限才能执行
-
执行后会影响数据库中的数据内容
2. DQL(数据查询语言)
DQL是SQL中专门用于数据查询的子语言,虽然从技术上讲它是DML的一个子集,但在实践中常被单独分类DQL的核心语句是SELECT。DQL 虽然只包含 SELECT 语句,但因其强大的查询能力和复杂的语法结构,成为SQL中最重要和最常使用的部分。
-- 基本查询
SELECT * FROM name;
-- 条件查询
SELECT * FROM name WHERE column1 = value1 AND column2 > value2;
-- 排序
SELECT * FROM name ORDER BY column1 ASC, column2 DESC;
-- 分组
SELECT column1, COUNT(*) FROM name GROUP BY column1;
-- 连接查询
SELECT a.column1, b.column2 FROM name1 a JOIN name2 b ON a.id = b.id;
-- 子查询
SELECT * FROM name WHERE column1 IN (SELECT column1 FROM table2);
DQL 特点
-
只用于数据查询,不会修改数据库内容
-
可以非常复杂,支持多表关联、嵌套查询等
-
结果通常以结果集(ResultSet)的形式返回
-
是 SQL 中使用最频繁的部分
-
性能优化重点区域(通过索引、执行计划等)
3. 聚合函数
聚合函数是SQL中用于对一组值执行计算并返回单个值的函数,通常与GROUP BY子句一起使用。
-
COUNT(): 计数
-
SUM(): 求和
-
AVG(): 平均值
-
MAX(): 最大值
-
MIN(): 最小值
-
GROUP_CONCAT(): 连接字符串
注意事项
-
聚合函数不能直接用在WHERE子句中(使用HAVING替代)
-
选择列表中非聚合的列通常需要包含在GROUP BY子句中
-
不同数据库系统可能支持不同的聚合函数或有不同的函数名称
-
聚合函数通常会导致全表扫描,在大数据量查询时需要考虑性能优化
索引与优化
索引是数据库中用于加速数据检索的数据结构,它通过创建额外的数据结构来存储表中某些列的排序值,从而快速定位数据位置,避免全表扫描。合理使用索引可以显著提高查询性能,但需要根据实际业务场景和数据特点进行设计和优化。
1. 索引类型
-
普通索引:最基本的索引
-
唯一索引:列值必须唯一
-
主键索引:特殊的唯一索引,不允许NULL
-
复合索引:多列组合的索引
-
全文索引:用于全文搜索
2. 索引操作
-- 创建索引
CREATE INDEX index_name ON name (columnname);
ALTER TABLE name ADD INDEX index_name (columnname);
-- 删除索引
DROP INDEX index_name ON name ;
3. 查询优化
-
使用EXPLAIN分析查询
-
避免SELECT *,只查询需要的列
-
合理使用索引
-
避免在WHERE子句中对字段进行函数操作
-
使用JOIN代替子查询
-
适当分表分库
高级特性
1. 视图
视图是MySQL中的一种虚拟表,其内容由查询定义。视图不实际存储数据,而是基于一个或多个基表(或其它视图)的动态查询结果。
CREATE VIEW view_name AS SELECT column1, column2 FROM name;
2. 存储过程
存储过程是MySQL中一组预编译的SQL语句集合,存储在数据库中,可以通过调用来执行。
DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT)
BEGIN
-- SQL语句
END //
DELIMITER ;
3. 触发器
触发器是MySQL中一种特殊的存储过程,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生时自动执行。
CREATE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE
ON name FOR EACH ROW
BEGIN
-- 触发逻辑
END;
4. 分区表
分区表是MySQL中将一个大表物理分割为多个更小、更易管理的部分的特性,但对用户而言仍然表现为单个逻辑表。
-
范围分区(RANGE)
-
列表分区(LIST)
-
哈希分区(HASH)
-
键分区(KEY)
总结:
MySQL 是一款开源、高性能的关系型数据库管理系统,支持事务、索引优化和多种存储引擎,适合高并发场景。它跨平台、易扩展,广泛用于Web开发、企业应用和云计算,并支持主从复制与集群部署。
MySQL从基础到高级的完整知识体系涵盖了数据库设计、性能优化、高可用架构等多个维度,实际应用中需要根据业务场景灵活选择合适的技术方案。