SQL-基础
SQL-简介:
SQL 是用于访问和处理数据库的标准的计算机语言。
-- SQL 指结构化查询语言
-- SQL 使我们有能力访问数据库
-- SQL 是一种 ANSI 的标准计算机语言 (注:ANSI,美国国家标准化组织)
SQL-分类:
DDL(Data Definition Language)
数据定义语言,这些语句是用于定义不同的数据字段、数据库、表、列、索引。如:create、drop、alter等。
DML(Data Manipulation Language)
数据操作语言,用于添加、删除、修改、查询数据的完整性。如:insert、 update 、 delete 等。
DQL(Data Query Language)
数据查询语言,用于查询数据库中的记录。如:select 。
DCL(Data Control Language)
数据控制语言,用于控制不同数据库中字段值的许可和说级别等。如:grant、 invoke 等。
SQL-视图:
1、视图简介:
视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
特性:
方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
视图的作用
1. 提高了重用性,就像一个函数
2. 对数据库重构,却不影响程序的运行
3. 提高了安全性能,可以对不同的用户
4. 让数据更加清晰
2、定义视图,建议以v_开头
create view 视图名称 as select语句;
3、使用视图
select * from v_stu_score;
4、 查看视图
show tables;
-- 查看表会将所有的视图也列出来
5、删除视图
drop view 视图名称;
例:
drop view v_stu_sco;
SQL-事务
1、事务简介:
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
2、事务四大特性(简称ACID)
原子性(atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性
一致性(consistency)
数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)
隔离性(isolation)
通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)
持久性(durability)
一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)
3、常用命令:
3-1、查看表的创建语句,可以看到engine=innodb
-- 选择数据库use jing_dong;
-- 查看goods表show create table goods;
3-2、开启事务,命令如下:
开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
begin;
或者
start transaction;
3-3、提交事务,命令如下:
将缓存中的数据变更维护到物理表中
commit;
3-4、回滚事务,命令如下:
放弃缓存中变更的数据
rollback;
SQL-索引
1、索引简介
1-1、索引的概念:
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
注:为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
1-2、索引的优点和缺点:
1、优点:
1-1、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
1-2、可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
1-3、可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
1-4、在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
1-5、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
2、缺点:
2-1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2-2、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
2-3、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
3、适用场景
索引是建立在数据库表中的某些列的上面。在创建索引的时候,应该考虑在哪些列上可以创建索引,在哪些列上不能创建索引。一般来说,应该在这些列上创建索引:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
4、不适用场景
4-1、对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查 4-度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
4-2、对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的 4-行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
4-3、对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
4-4、当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但 4-降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
1-3、索引的分类:
1、唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。
当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的 据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。
2、主键索引
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。
在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使 键索引时,它还允许对数据的快速访问。
3、聚集索引
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。
如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
2、索引的使用
2-1、查看索引
show index from 表名;
2-2、创建索引 (MySQL)
-- 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
-- 字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))
-- 单列索引
create index index_name on table_name(column_name);
-- 复合索引
create index index_name on table_name(column1,column2);
-- 唯一索引
create unique index index_name on table_name(column_name);
2-3、删除索引
drop index 索引名称 on 表名;
分类:
6、数据库
, 6-1、数据库-SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现