数据库知识点

news/2024/10/22 16:34:20/

1索引

介绍

索引本质上是一张表,保存了主键与索引字段,在对数据做频繁的查询或排序时,可在某些字段上添加索引,提高检索的的效率,降低IO成本,并可以使用索引列,对数据进行排序,降低排序的成本。盲目的添加索引是不正确的。索引表保存数据占用空间,在对数据进行增删改操作时,降低了操作的速度,在更新表的同时不仅要保存操作数据还需要更新索引表中的数据,因此我们可以在频繁的作为查询条件的字段上添加索引,查询中与其他表关联的字段,外检关系建立索引,在高并发下创建组合索引等恰当的使用索引事务场景。索引分为四类有唯一索引,复合索引,主键索引,单值索引。唯一索引的索引列必须是唯一的,但允许有空值,复合索引指一个索引包含多个列。例如用户表需要用户名以及手机号确定一个信息,就需要添加复合索引了。主键索引是一个特殊的唯一索引,非空且默认存在,单值索引,一个索引值包含单个列,一个表可以有多个单列索引。

1.2失效原因

1.索引失效的原因

1.模糊查询like以%开头,
2.数据类型错误
3.对索引字段使用内部函数
4.索引列是null
5.索引列运行四则运算
6.复合索引不按索引列最左特性开始查找

1.3.索引的类型

复合(最左特性)
主键
单值
唯一

1.4如何创建创建索引

创建主键索引

alter table table_name add primary key(column);

添加UNIQUE(唯一索引)

alter table table_name add unique(column);

添加普通索引

alter table table_name add index index_name(column);

添加多列索引
sql alter table table_name add index index_name(column1,column2,column3);

2.Sql语句

2.1基础函数

lower

SELECT 'ABC',LOWER('ABC') from dept; --数据转小写

upper

select upper(dname) from dept --数据转大写

length

select length(dname) from dept --数据的长度

substr

SELECT dname,SUBSTR(dname,1,3) FROM dept; --截取[1,3]

concat

select dname,concat(dname,'123') X from dept --拼接数据

replace

select dname,replace(dname,'a','666') X from dept --把a字符替换成666

ifnull

select ifnull(comm,10) comm from dept2 #判断,如果comm是null,用10替换

round四舍五入,ceil向上取整,floor向下取整

select comm,round(comm) from emp–直接四舍五入取整
select comm,round(comm,1) from emp–四舍五入并保留一位小数
select comm,ceil(comm) ,floor(comm) from emp–ceil向上取整,floor向下取整

now

select now() -- 年与日 时分秒
select curdate() --年与日
select curtime() --时分秒

2.2分组

group by

SELECT deptno,job,MAX(sal),AVG(sal) FROM emp
GROUP BY deptno,job #deptno和job都满足的

having

select deptno, AVG(sal) from emp
group by deptno #按部门分组
having AVG(sal)<8000 #查询条件,类似where,但是group by只能配合having

2.3聚合

count

select count(*) from emp --底层优化了
select count(1) from emp --效果和*一样
select count(comm) from emp --慢,只统计非NULL的

max / min

select max(sal) from emp --求字段的最大值
select max(sal) sal,max(comm) comm from emp
select min(sal) min from emp --获取最小值
select min(sal) min,max(sal) max from emp --最小值最大值
SELECT ename,MAX(sal) FROM emp group by ename --分组

sum / avg

select count(*) from emp --总记录数
select sum(sal) from emp --求和
select avg(sal) from emp --平均数

2.4排序

order by

SELECT * FROM emp order by sal #默认升序
SELECT * FROM emp order by sal desc #降序

2.5链接

left join : 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
right join : 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
inner join : 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

2.6多表联查

1.子查询
语法:

select  字段名  
from1,表2where1.字段 =2.字段
and 其它查询条件

例:以学生表student和班级表class为例

Select   student.sid,  student.sname,  student.classid, class.classid,  class.classname
from student,class
where student.classid = class.classid

2.join连接
内连接 inner join
语法:

from1
inner join2
on1.字段 =2.字段

外连接:

  1. left join
    语法:
select  字段名  
from1
left join2
on1.字段 =2.字段

2.right join
语法:

select  字段名  
from1
right  join2
on1.字段 =2.字段
  1. left join union right join
    语法:
select  字段名  
from1
left join2
on1.字段 =2.字段
union
select  字段名  
from1
right  join2
​​​​​​​on1.字段 =2.字段

例:

select   student.*  , class.*from student
left join class
on student.classid = class.classid
union
select  student.*  , class.*from student
right join class
on student.classid = class.classid

3.笛卡尔积

select * from t_user, t_address;

2.7条件查询

distinct
使用distinct关键字,去除重复的记录行

SELECT DISTINCT loc FROM dept;

like模糊查询

select * from emp where ename like 'l%' --以l开头的
select * from emp where ename like '%a' --以a结束的
select * from emp where ename like '%a%' --中间包含a的
select * from emp where ename like 'l__' --l后面有两个字符的 _代表一个字符位置

null

select * from emp where mgr is null --过滤字段值为空的
select * from emp where mgr is not null --过滤字段值不为空的

between and

select * from emp where sal between 3000 and 10000

limit
在mysql中,通过limit进行分页查询:

select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条

3.事务

3.1 特性(ACID)

原子性:一个事务要么全部成功,全部失败,不会停在某个阶段
一致性 :事务的前后处于一致状态
隔离性:多个事务同时操作相同数据库的同一个数据时,一个事务的执行不受另外一个事务的干扰
持久性:一个事务一旦提交,则数据将持久化到本地,除非其他事务对其进行修改

3.2隔离级别

1.读未提交,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读);
2.提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读),SQL server 的默认级别;
3.可重复读,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读),
MySQL 的默认级别;
4.序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。

3.3三大范式

第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。
第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
第三范式:任何非主属性不依赖于其它非主属性。

3.4约束

1.主键约束(Primary Key )
保证数据的唯一性,并且主键列数据不能为空(唯一性,非空性)。

alter table 表名
add constraint 主键名 primary key(id)

2.唯一约束(Unique ):
保证数据的唯一性,唯一约束的列可以为空(唯一性,可以空,但只能有一个)。

alter table 表名
add constraint 唯一约束名 unique(字段)

3.检查约束(Check ):
保证数据的有效性,让值在有效范围内取值,对该列数据的范围、格式的限制(如:年龄、性别等)

alter table 表名
add constraint 检查约束名 check(age between 10 and 40)

4.默认约束(Default ):
保证数据的完整性,如果没有入信息时,会使用默认信息填入,保证数据的完整性。

alter table 表名
add constraint 默认约束名 default('地址不详') for address

5.外键约束(Foreign Key ):
需要建立两表间的关系并引用主表的列,保证数据的完整性,互相依赖的数据不能缺失。

alter table 表名
add constraint 外键名 foreign key(order) references info(userId)

其他操作
1.删除约束

alter table 表名
drop constraint 约束名

2.关闭约束

alter table 表名
disable constraint 约束名 cascade
//如果没有被引用则不需CASCADE关键字

3.打开约束

alter table 表名
enable constraint 约束名

4. MySQL 问题排查都有哪些手段?

使用 show processlist 命令查看当前所有连接信息。
使用 explain 命令查询 SQL 语句执行计划。
开启慢查询日志,查看慢查询的 SQL。

5.Sql优化


http://www.ppmy.cn/news/79056.html

相关文章

10 对象和类

1.访问控制和数据隐藏 公有成员函数是程序和对象的私有成员之间的桥梁&#xff0c;提供了接口 2.类和结构 结构的默认访问类型是&#xff1a;public 类的默认访问类型是&#xff1a;private 3. 成员函数的内联 定义位于类声明中的函数&#xff0c;为内联函数 也可以现在类内进行…

LRU Cache

前言 哈喽&#xff0c;各位小伙伴大家好&#xff0c;本章内容为大家介绍计算机当中为了提高数据相互传输时的效率而引进的一种重要设计结构叫做LRU Cache,下面将为大家详细介绍什么是LRU Cache,以及它是如何是实现的&#xff0c;如何提升效率的。 1.什么是LRU Cache? LRU是L…

测牛学堂:2023软件测试学习教程之sql的分页查询

查重 所谓的查重&#xff0c;就是过滤返回数据中重复的记录。 语法关键字&#xff1a;distinct select distinct 字段列表 from tableName [where 子句]注意&#xff1a; distinct的位置有两个地方&#xff0c;一个是放在select后面&#xff0c;对筛选出来的数据去重。 一个是…

NetSuite SuiteTax之中国影响

这篇是还账。3个月前林师傅给的一个题目&#xff0c;陆陆续续的学习&#xff0c;一直没有弄完&#xff0c;直到今朝。 SuiteTax是2018年GA的一个重大功能&#xff0c;是NetSuite面向国际市场的一个标志动作。它将过去以美国为中心的税务功能&#xff0c;转向为国际市场服务。只…

泰克MDO4104C(Tektronix) mdo4104c混合域示波器

泰克 MDO4104C混合域示波器&#xff0c;1 GHz&#xff0c;4 通道&#xff0c;2.5 - 5 GS/s&#xff0c;20 M 点 ​泰克 MDO4104C 示波器是一款 6 合 1 集成示波器&#xff0c;可以配置可选的频谱分析仪、任意波形/函数发生器、逻辑分析仪、协议分析仪和 DVM/频率计数器。当配置…

位与运算符、矩阵快速幂

&运算符的作用是&#xff0c;比较两个数的二进制位&#xff0c;均1取1&#xff0c;否则该位为0。常用于&#xff1a; 判断某个非负整数的二进制最后一位是否为1&#xff1a; int x 4; if (x & 1 1) {printf("最后一位为1\n"); }和移位运算符>>结合&a…

Emacs之实时渲染markdown(九十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Three.js--》实现3d小岛模型搭建

目录 项目搭建 初始化three.js基础代码 设置环境背景 设置水面样式 添加天空小岛 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还…