
数据库
vvhaleCH
这个作者很懒,什么都没留下…
展开
-
MySQL数据库锁
2.乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断别人有没有去更新这个数据,可以使用版本号等机制。每次操作数据的时候都认为其他人会影响自己,所以每次操作的时候都先加上锁。这样其他人想操作这个数据就要拿到锁。传统型的数据库里面就用到了这种锁机制,比如行锁、表锁、读锁、写锁等,都是在操作之前先上锁。主要是为了防止并发错误,根据锁粒度划分,一般分为:行锁、表锁、库锁。乐观锁适用于多是读操作的应用类型,这样可以提高吞吐量。原创 2024-12-16 00:09:44 · 183 阅读 · 0 评论 -
定位执行效率慢的sql语句
慢查询日志记录了所有执行时间超过long_query_time的sql语句的日志,long_query_time的值默认是10秒(可以通过修改配置文件设置)。index:索引全扫描,MySQL遍历整个索引查找匹配的行(虽然where中没有使用索引,但是查找的列是索引列,只要全表扫描索引即可,直接使用索引树查找数据)打开这个命令之后执行的所有的sql语句,他都能记录下执行时间,并展示出来。1.explain出来的结果中的type字段代表mysql如何查找表中的数据,查找数据记录的大概范围,最优到最差如下。原创 2024-12-16 00:09:02 · 305 阅读 · 0 评论 -
分表之后保持主键唯一递增
1.还是使用自增id,但是步长根据分片设置,可以想到的缺点就是如果后续在加水平分表,原有的计算逻辑走不通。原创 2024-12-16 00:06:11 · 137 阅读 · 0 评论 -
MySQL和Redis的数据一致性
1.可以考虑canalServer去拿mysql集群主节点的binlog,再去更新,这样代码层面、dba层面修改数据都可以同步。两个线程同时想要修改db中的某行记录,然后更新Redis,竞争到行锁修改记录之后,怎么保证Redis缓存的更新顺序。T1时刻,缓存已清空,线程2做查询任务,此时发现没有Redis,就去更新了Redis,读取到的依旧是老数据。删缓存->更db->起线程sleep一定时间,再次删缓存。思路是将更新db、更新Redis的操作原子化。线程1准备清空redis,再更新db。原创 2024-12-16 00:05:45 · 146 阅读 · 0 评论 -
MySQL事务
不可重复读:一个事务前后两次因为另一个事务做了修改或导致读到的数据不同。幻读:一个事务前后两次因为另一个事务做了新增而读取到了多出来的行。1.在手动事务中,如果开启事务,但是不提交或者回滚,就会造成行锁死锁。读未提交:会出现脏读、不可重复读、幻读。脏读:读到了另一个事物中未提交的修改。读已提交:会出现不可重复读、幻读。原创 2024-12-16 00:03:39 · 111 阅读 · 0 评论 -
mysql索引
1.如果WHERE子句中使用的索引包含了ORDER BY中的列,因为索引本身会对列进行排序,所以ORDER BY中不需要再次使用索引排序;如果WHERE子句中使用的索引没有包含ORDER BY中的列,则ORDER BY中的列无法使用索引,因为一个查询只能选择一个索引,这时候排序就进行了filesort,非常费时。当连接使用索引的所有部分时, 索引是主键或唯一非 NULL 索引时, 将使用该值。比较值可以是常量或使用此表之前读取的表中的列的表达式。用于联表查询的情况,按联表的主键或唯一键联合查询。原创 2024-12-02 00:07:10 · 298 阅读 · 0 评论 -
MySQL-外键
1.插入数据的时候外键对应的列数据可以为null。原创 2024-12-01 23:59:18 · 113 阅读 · 0 评论 -
MySQL标识符
1.第一个字必须是 字母 、下划线 、@和#开头。原创 2024-12-01 23:58:48 · 109 阅读 · 0 评论 -
MySQL复合索引
当 select * from T where a = 1 and b = 3 的时候, 数据库系统可以直接从索引文件中直接二分法找到 A = 1 的记录,然后再 B = 3 的记录。2.在MySQL建立联合索引时会遵守最左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。1.首先,需要明确的是:最左前缀原则是发生在复合索引上的,只有复合索引才会有所谓的左和右之分。但如果你 where b = 3 则需要遍历这个索引表的全部。原创 2024-12-01 23:58:27 · 283 阅读 · 0 评论 -
MySQL关键字
3.删除触发器 DROP TRIGER。3.REVOKE用于回收语句或对象许可。1.DROP可用于删除视图。2.CLOSE用于关闭游标。原创 2024-12-01 23:54:11 · 105 阅读 · 0 评论 -
ON和WHERE
1.ON作用于生成临时表的时候,而WHERE用于临时表生成之后。原创 2024-12-01 23:53:41 · 120 阅读 · 0 评论 -
MySQL JOIN
('1004' , '张三' ,'2000-08-06' , '男');('1006' , '王五', '2000-08-06' , '女');('1011' , '李四', '2002-08-06' , '女');('1009' , '李四', '2000-01-01', '男');('1010' , '李四', '2001-01-01', '男');('1008' , '张三', '2002-12-01', '女');('1012' , '张三', '2001-12-01', '女');原创 2024-12-01 23:53:25 · 219 阅读 · 0 评论 -
MySQL - !=和<>
也就不能用<>来比较是否相等,换句话说,使用<>也会排除掉为NULL的结果。原创 2024-12-01 23:48:39 · 126 阅读 · 0 评论 -
MySQL NULL
1.SUM()和COUNT()均对NULL不敏感。COUNT遇NULL不累加。SUM加NULL和不变。原创 2024-12-01 23:47:19 · 116 阅读 · 0 评论 -
MySQL查询
1.在查询的时候,如果要select一个临时表再次用于查询,要给它起别名。SELECT的时候如果遇到重复数据,就需要去重,即使用DISTINCT;最后如果要指定返回的查询数据范围、条数则要用LIMIT/OFFSET函数。分组时如果也存在筛选条件,这里就要用HAVING进行分组筛选;先找到要查询表格或连接要查询的表格,因此FROM才是第一步;接下来如果要对查询后的数据进行排序,会用到ORDER BY;然后如果遇到表格有分组的需要,则需要先GROUP BY;接下来是进行条件筛选,所以是WHERE紧随其后;原创 2024-12-01 23:46:25 · 270 阅读 · 0 评论 -
数据库-事务
1、事务是数据库的最小操作单位。原创 2024-12-01 23:34:35 · 123 阅读 · 0 评论 -
数据库-存储过程
1.存储过程有IN OUT INOUT参数,后两者可以作为输出参数。调用存储过程之后,可以用select查询该输出参数的值。2.存储过程没有返回值。原创 2024-12-01 23:32:57 · 85 阅读 · 0 评论 -
数据库-存储函数
1.存储函数有返回值。其可以返回值或者表对象。但是存储函数没有IN、OUT参数。2.因为函数有返回值,可以返回表对象,所以可以跟在from后面。原创 2024-12-01 23:32:04 · 83 阅读 · 0 评论 -
DCL DDL DML
2.DDL主要的命令有CREATE、ALTER、DROP等,大多在建立表时使用。3.DML包括SELECT、UPDATE等,对数据库里的数据进行操作。1. 数据控制语言DCL,主要用于对用户权限的授权和回收,原创 2024-12-01 23:24:33 · 127 阅读 · 0 评论 -
数据库-视图
2.视图是虚拟表,是一个依赖于别的表上的寄生表,其本身不存储数据,对视图的操作最终都会转化为对基本表的操作。所以说视图不能是从其他视图导出的。4.数据库存储的是视图的定义,不存放视图对应的数据——视图不存数据。1.视图可以解决检索数据时一个表中得不到一个实体所有信息的问题。3.若基表的数据发生变化,则变化也会自动反映到视图中。原创 2024-12-01 23:23:54 · 125 阅读 · 0 评论