1. 数据库的增删改操作:
1.1 插入数据(Insert):
INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);
- 插入新记录到指定表。
- 注意:确保插入的值与表的列数和数据类型匹配。
1.2 更新数据(Update):
UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件;
- 修改表中符合条件的记录。
- 注意:不要忘记 WHERE 子句,否则可能会更新整个表的数据。
1.3 删除数据(Delete):
DELETE FROM 表名 WHERE 条件;
- 删除表中符合条件的记录。
- 注意:同样要小心 WHERE 子句,以免删除不必要的数据。
2. 连表查询:
2.1 内连接(Inner Join):
SELECT 列1, 列2, ... FROM 表1 INNER JOIN 表2 ON 表1.关联列 = 表2.关联列;
- 结合两个表中的匹配行。
- 注意:了解关联列,以确保连接的正确性。
2.2 左连接(Left Join):
SELECT 列1, 列2, ... FROM 表1 LEFT JOIN 表2 ON 表1.关联列 = 表2.关联列;
- 返回左表中所有的行,以及与右表中匹配的行。
- 注意:左连接可用于查找包含在左表中但不在右表中的数据。
2.3 右连接(Right Join):
SELECT 列1, 列2, ... FROM 表1 RIGHT JOIN 表2 ON 表1.关联列 = 表2.关联列;
- 返回右表中所有的行,以及与左表中匹配的行。
- 注意:右连接可用于查找包含在右表中但不在左表中的数据。
3. 数据库函数:
3.1 聚合函数:
COUNT()
:计数符合条件的行数。SUM()
:求和符合条件的列。AVG()
:计算符合条件的列的平均值。MIN()
:找出符合条件的列的最小值。MAX()
:找出符合条件的列的最大值。
3.2 字符串函数:
CONCAT()
:连接字符串。SUBSTRING()
:提取子串。UPPER()
:将字符串转换为大写。LOWER()
:将字符串转换为小写。
4. SQL执行语句顺序:
- SELECT: 选择需要查询的列。
- FROM: 指定要查询的表。
- JOIN: 合并多个表的数据。
- WHERE: 对数据进行筛选,定义条件。
- GROUP BY: 将结果集按照一列或多列进行分组。
- HAVING: 对分组后的结果进行条件过滤。
- ORDER BY: 对查询结果进行排序。
5. 常见问题和日常改主意的问题:
- 性能优化问题: 使用索引、避免全表扫描,考虑分页查询。
- 事务处理问题: 使用事务确保数据的一致性,合理使用提交和回滚。
- 安全性问题: 防止 SQL 注入攻击,限制用户权限,使用参数化查询。
- 数据备份与恢复问题: 定期备份数据,考虑数据库复原和灾难恢复计划。
- 改动影响问题: 修改表结构前,评估影响范围,备份数据,谨慎执行。
6.sql优化建议
SQL优化是一个复杂而关键的任务,涉及到多方面的考虑。以下是更详细的SQL优化建议:
-
6.1 选择合适的数据类型:
-
使用最小可能的数据类型,以减小存储空间,提高内存和磁盘的效率。
-
6.2 索引的优化:
- 2.1 选择合适的索引: 在查询经常用到的列上创建索引,但不要过度索引,因为每个索引都会占用存储空间并影响写入性能。
- 2.2 联合索引: 对于经常同时查询的多个列,考虑使用联合索引。
- 2.3 使用覆盖索引: 在查询中包含了索引中的所有列时,可以减少对数据表的访问次数,提高查询性能。
-
6.3 查询语句的优化:
- 3.1 避免使用SELECT *??: 明确指定需要的列,而不是使用SELECT *。只检索所需的数据可以减小数据库传输和处理的负载。
-- 不推荐
SELECT * FROM table_name;
-- 推荐
SELECT column1, column2 FROM table_name;
- 3.2 使用LIMIT: 对于大结果集,使用LIMIT限制返回的行数,减小查询的开销。
- 3.3 避免在WHERE子句中使用函数: 使用函数会导致无法使用索引,影响查询性能。
- 3.4 使用EXISTS代替IN: EXISTS通常比IN更高效。
- 3.5?合理使用JOIN: 尽量避免使用过多或不必要的JOIN操作,确保关联的列上有索引。
- 3.6?尽量将子查询转换为连接或联合查询,以提高性能
-- 不推荐
SELECT column1 FROM table_name WHERE column2 IN (SELECT column2 FROM another_table);
-- 推荐
SELECT t1.column1 FROM table_name t1 JOIN another_table t2 ON t1.column2 = t2.column2;
7.3.7?避免使用LIKE '%value%': 在使用LIKE进行模糊查询时,尽量避免在开头使用通配符,因为这会导致无法使用索引。
-- 不推荐
SELECT column1 FROM table_name WHERE column2 LIKE '%value%';
-- 推荐
SELECT column1 FROM table_name WHERE column2 LIKE 'value%';
使用连接池: 对于频繁连接数据库的应用程序,使用连接池可以减少连接和断开连接的开销,提高性能。
-
6.4? 查询语句的顺序:
- SELECT: 选择需要查询的列。
- FROM: 指定要查询的表。
- JOIN: 合并多个表的数据。
- WHERE: 对数据进行筛选,定义条件。
- GROUP BY: 将结果集按照一列或多列进行分组。
- HAVING: 对分组后的结果进行条件过滤。
- ORDER BY: 对查询结果进行排序。
- 4.1 合理的顺序: 遵循SQL语句的执行顺序,确保WHERE子句在其他子句之前执行,GROUP BY和ORDER BY在最后执行。
- 4.2 合并查询: 将多个小的查询合并成一个大的查询,减少数据库的负担。
-
6.4 分析执行计划:
-
6.5 sql之外的建议及优化:
- 6.1 数据库缓存: 使用数据库自身的缓存机制,例如MySQL的查询缓存,以减少对数据库的访问。
- 6.2 应用层缓存: 对于静态或不经常改变的数据,考虑使用应用层缓存,减轻数据库的压力。
-
定期维护:
- 7.1 表的分析和优化: 定期执行ANALYZE TABLE和OPTIMIZE TABLE,确保表的统计信息是最新的,表的碎片得到清理。
-
避免使用HINT: 尽量不要使用数据库引擎的HINT,因为它们可能会在不同的数据库系统上产生不同的效果,而且可能会降低可移植性。
-
避免全表扫描: 全表扫描是一种非常慢的操作,尽量通过索引或其他手段避免全表扫描。
-
注意事务的隔离级别: 根据实际需求选择合适的事务隔离级别,避免过高的隔离级别带来的性能开销。
-
定期监控与调整: 使用数据库性能监控工具,收集性能数据,定期进行性能分析和调整。