数据库
文章平均质量分 56
陈晨辰呀
这个作者很懒,什么都没留下…
展开
-
Mybatis自定义resultMap
<!-- 洗车门店和服务列表查询映射结果 --> <resultMap id="carWashStoreAndServices" type="com.aspire.mall.portal.carwash.vo.response.CarWashStoreDetailRes"> <result property="storeId" column="store_id" /> <result prope.原创 2021-06-17 11:01:34 · 371 阅读 · 0 评论 -
Mysql锁
全局锁&表锁&行锁&页锁悲观锁&乐观锁共享锁&排他锁&意向锁记录锁&间隙锁&临键锁全局锁&表锁&行锁&页锁表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般行锁表锁页锁MyISAM.原创 2021-06-02 14:17:17 · 245 阅读 · 0 评论 -
解决Oracle使用IN 不能超过1000问题
在oracle中,使用in方法查询记录的时候,如果in后面的参数个数超过1000个,那么会发生错误,JDBC会抛出“java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000”这个异常。解决办法使用or/union连接分割SQL语句为select a from b where c in(,) or c in (,) or c in (,),…或者select * from table where id in (1, 2, .. ., 1000)un原创 2021-06-01 14:48:07 · 2174 阅读 · 0 评论 -
Mysql与Oracle区别
InOracle语法限制,in内数量不能超过1000。超过1000会报如下错误:Caused by: java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000原创 2021-05-28 14:32:10 · 169 阅读 · 0 评论 -
MVCC多版本并发控制
什么是MVCC全称Multi-Version Concurrency Control,即多版本并发控制,解决读—写冲突的无锁并发控制。当前读是一种加锁操作,是悲观锁。同一行数据平时发生读写请求时,会上锁阻塞住。但mvcc用更好的方式去处理读—写请求,发生读—写请求冲突时不用加锁,提高数据库的并发性能,具体实现就是快照读。MVCC维护多版本数据,为每个数据修改保存一个版本,版本与事务时间戳相关联。因为myIsam不支持事务,MVCC都针对InnoDB引擎来讲。当前...原创 2021-05-21 18:33:43 · 445 阅读 · 2 评论 -
Mysql如何保证原子性,一致性,持久性
原子性mysql原子性利用了undo log。记录回滚的日志信息,利用undo log中的信息将数据回滚到修改之前。持久性mysql持久性的利用了redolog。包括内存中的日志缓冲(redo log buffer),以及磁盘上的持久化文件(redo log file)。事务提交时,必须先将所有事务日志写入到磁盘上的redo log file和undo log file中进行持久化。一致性mysql一致性的保证是从2个方面来保证。一方面数据库层面A(原子性)...原创 2021-04-24 11:22:36 · 1286 阅读 · 0 评论 -
oracle更新不生效以及提交后回滚
更新不生效,原因是未提交使用PL-SQL操作oracle时,执行完更新语句update tab set name='a' where id='1';结果显示1 row updated in 0.001 seconds,但是再次执行查询的时候,发现还是旧数据。原因是执行完update语句后,没有执行提交语句。可以执行COMMIT;进行提交,也可以点击commit图标进行提交提交后,如何"回滚"execute执行后 可以回滚 commit提交后闪回恢复原来的数据其实Ora..原创 2021-04-14 16:42:25 · 1622 阅读 · 1 评论 -
Java 游标
jdbcTemplate.setDataSource(goodsDataSource); jdbcTemplate.query(con -> { PreparedStatement preparedStatement = con.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, .原创 2021-03-27 21:35:30 · 242 阅读 · 0 评论 -
Oracle查看分析执行计划、建立索引以及SQL优化
查看执行计划1、explain planfor获取(类似plsql中的f5)Step1; explain plan for “sql”Step2: select * from table(dbms_xplan.display)优点:无需真正执行,快捷方便缺陷:a. 没有输出运行时的相关统计信息(产生多少逻辑读,多少次递归调用,多少次物理读的情况) b. 无法判断是处理了多少行 c. 无法判断表被访问了多少次SQL> set linesize 200SQL>.原创 2021-03-25 23:40:21 · 1803 阅读 · 0 评论 -
Mybatis新增数据,存在就更新,不存在就添加
插入一条数据,存在则不操作,不存在就插入(必须现有唯一键)使用insert ignore语句,例如插入数据:insert ignore into user_info (last_name,first_name) values ('LeBron','James');这样一来,如果表中已经存在last_name='LeBron'且first_name='James'的数据,就不会插入,如果没有就会插入一条新数据。上面的是一种用法,也可以用 INSERT .... SELECT 来实现。.原创 2021-03-05 10:01:30 · 18551 阅读 · 4 评论 -
从零开始带你成为MySQL实战优化高手
笔记:https://blog.csdn.net/qq_34136569/article/details/106586741pdf:https://pan.baidu.com/share/init?surl=iuffXAGEK-kBVSjwsMB83A解压码:i7fl文档密码:www.pplsunny.top 或者 pplsunny.top原创 2021-02-03 14:42:44 · 3657 阅读 · 18 评论 -
Mysql 异常:Lock wait timeout exceeded; try restarting transaction的解决办法
问题现象 接口响应时间超长,耗时几十秒才返回错误提示,后台日志中出现Lock wait timeout exceeded; try restarting transaction的错误<-- java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)原创 2021-01-18 17:53:10 · 12555 阅读 · 0 评论 -
Mysql 查询区分大小写的两种方法
oracle中查询默认是区分大小写的,但是在mysql中默认不区分大小写。解决办法:mysql可以在SQL语句中加入 binary来区分大小写。BINARY不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。一、查询语句上加binary select * from users WHERE binary user_name = '张三' AND status != 0二、建表时加b..原创 2021-01-08 18:44:28 · 3150 阅读 · 0 评论 -
MySQL 支持JSON字段的基本操作、相关函数及索引使用
Mysql5.7版本以后新增的功能,Mysql提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(internal binary)格式。在Json列插入或者更新的时候将会自动验证Json文本,未通过验证的文本将产生一个错误信息。Json文本采用标准的创建方式,可以使用大多数的比较操作符进行比较操作,例如:=, <, <=, >, >=, <>, != 和 <=>。原创 2020-11-25 20:40:01 · 4249 阅读 · 0 评论 -
Mybatis 查询时对通配符的处理
mybatis使用模糊搜索的时候,对通配符会进行转义,类似%_这些特殊符号都不会被作为字符串进行搜索例如:<if test="name != null and name != ''" > AND content.name like CONCAT(#{name},'%')</if>按原先的预想是该字段会进行左匹配,如果入参name是%测试%,则实际上搜索的是全匹配搜索了带有测试的所有值。原因就是使用 LIKE 关键字进行模糊查询时,%、下划线 和 [] 单独原创 2020-11-05 20:18:36 · 2110 阅读 · 1 评论 -
MySQL几种编码格式的区别(utf8、utf8mb4、utf8mb4_general_ci、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci)
存储字符集 utf8 和 utf8mb4utf8 是 Mysql 中的一种字符集,只支持最长三个字节的 UTF-8 字符,也就是 Unicode 中的基本多文本平面。要在 Mysql 中保存 4 字节长度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持。我觉得,为了获取更好的兼容性,应该总是使用 utf8mb4 而非 utf8. 对于 CHAR 类型数据,utf8mb4 会多消耗一些空间,根据 Mysql 官方建议,使用 VARCHAR 替代 CHAR。原创 2020-10-26 16:36:44 · 20841 阅读 · 0 评论 -
SQL 中判断条件的先后顺序,会引起索引失效么?
在群里看到一个基础题,有关索引的使用。题目就在这里,有的朋友说选 B, 有的选 C,有的说题目不严谨,还有的说没答案,都是错误的。讨论了很久,有两个共性的问题,值得拿出来说下: a=1 and b=1 和 b=1 and a=1 会有效利用 idx (b,a) 吗? b=1 还会利用索引 idx (a,b) 吗? 实践出真知,我就试着上机操作下。createdatabasefactory;usefactorygocreatetabledb...转载 2020-10-19 17:46:17 · 919 阅读 · 0 评论 -
一键生成数据库文档,堪称数据库界的 Swagger
梳理各业务线数据表的时候,每个业务线库都有近几十上百张表,挨个表一个一个字段的弄的话会让人疯掉。那有没有什么工具能帮助我们呢?还真有!一、数据库支持MySQLMariaDBTIDBOracleSqlServerPostgreSQLCache DB二、配置1、pom 文件引入screw核心包,HikariCP数据库连接池,HikariCP号称性能最出色的数据库连接池。<!--screw核心--><dependen...转载 2020-10-19 16:19:49 · 262 阅读 · 0 评论 -
mysq将查询结果作为条件更新到另一张表的sql语句
假如要将查询到 B 表中的字段,更新到 A 表中语句:update 库名. 表 Ainner join(select 列 a, 列 b from 表 B) con A. 列名 = c. 列名set A. 列名 = c. 列名;举例:update DB a inner join(select id,name from b) con a.name = c.nameset a.id = c.id;...原创 2020-09-27 10:44:25 · 685 阅读 · 0 评论 -
为什么数据库存储不要使用NULL
Null貌似在哪里都是个头疼的问题,例如Java里有人头疼的NullPointerException,为了避免猝死及防空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种如果判断,麻烦而又臃肿,估计java8发出了可选来避免这一问题。下面咱们要聊的是MySQL里的null,在大量的MySQL优化文章和书籍里都提到了放置使用用NOT NULL,而不是NULL,除非特殊情况。而是都只给指定不说明原因,犹如鸡汤这里今天就详细的剖析下使用Null的原因,并给出一些不用Null的理由。1,NULL为.原创 2020-09-12 20:56:49 · 1442 阅读 · 0 评论 -
GROUP BY 后 SELECT 列的限制:which is not functionally dependent on columns in GROUP BY clause
GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。我们来看个例子 我们有 学生班级表(tbl_student_class) 以及 数据如下 :DROP TABLE IF EXISTS tbl_student_class;CREATE TABLE tbl_student_class ( id int(8) unsig原创 2020-09-06 17:47:57 · 16649 阅读 · 1 评论 -
关于MySQL中删除操作的注意事项
关键问题:MySQL不允许在子查询中使用要删除的表错误示范:DELETEFROMpost_activity_userWHEREid IN (SELECT a.idFROM post_activity_user aLEFT JOIN post_activity_info b ON a.activity_id = b.idWHERE b.enterprise_id = 10000000AND b.activity_type = 3)正确处理:DELETEFR.原创 2020-07-02 10:14:16 · 999 阅读 · 0 评论 -
EXPLAIN FORMAT=json和EXPLAIN ANALYZE查询计划解读
EXPLAIN名词:QEP: Query Execution Plan,查询执行计划。语法:EXPLAIN [explain_type] {explainable_stmt }explain_type:{ EXTENDED | PARTITIONS | FORMAT = format_name}format_name:{ TRADITIONAL | JSON}explainable_stmt:{ SELECT statement | DELETE statement | IN..原创 2020-05-29 17:38:16 · 4156 阅读 · 1 评论 -
Mybatis使用IN语句查询
一、简介在SQL语法中如果我们想使用in的话直接可以像如下一样使用:select * from HealthCoupon where useType in ( '4' , '3' )但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map<String, Object> selectByUserId(@Param("useType") St...原创 2020-01-08 19:41:44 · 649 阅读 · 0 评论 -
详解Mysql执行计划explain
1、MySQL语法MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个”EXPLAIN”即可。默认情况下Mysql的profiling是关闭的,所以首先必须打开profilingset profiling="ON"mysql> show variables like "%profi%"; ------------------------ ------- | Variabl...原创 2019-11-28 20:12:17 · 1875 阅读 · 0 评论 -
SQL调优之性能调优
基于语法的优化以及简简单的查询条件。基于语法的优化指的是为不考虑任何的非语法因素(例如,索引,表大小和存储等),仅考虑 在 SQL 语句中对于词语的选择以及书写的顺序。一般规则这一部分,将看一下一些在书写简单查询语时需要注意的通用的规则。根据权值来优化查询条件最好的查询语句是将简单的比较操作作用于最少的行上。以下两张表,表 1 和表 2 以由好到差的顺序列出了典型查询条件操作符并赋与权值。...原创 2019-11-27 15:31:28 · 741 阅读 · 0 评论 -
MySQL之LEFT JOIN中使用ON和WHRERE对表数据
背景left join在我们使用mysql查询的过程中可谓非常常见,比如博客里一篇文章有多少条评论、商城里一个货物有多少评论、一条评论有多少个赞等等。但是由于对join、on、where等关键字的不熟悉,有时候会导致查询结果与预期不符,所以今天我就来总结一下,一起避坑。这里我先给出一个场景,并抛出两个问题,如果你都能答对那这篇文章就不用看了。假设有一个班级管理应用,有一个表classes,存...转载 2019-11-24 14:53:34 · 306 阅读 · 0 评论 -
Mysql索引分类
在绝大多数情况下,Mysql索引都是基于B 树的,而索引可以提高数据查询的效率。但是Mysql是如何利用B 树进行查询的呢?索引的作用只是提高查询效率吗?Mysql中的B Tree索引假设有一张教师表,里面有教师编号、名字、学科、薪资四个字段。当你执行下面这条创建索引的sql语句时:create index id_name on teacher(name);Mysql就会在磁盘中构建这样一颗...原创 2019-11-24 11:49:54 · 483 阅读 · 0 评论 -
查看Mysql执行计划
引言:实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表、怎样使用索引的,因此,我们能感知到的就只有sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写sql语句的时候就很少考虑到性能的问题。但是当数据规模增大,如千万、亿的时候,我们运行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度。所以,查询优化和索...原创 2019-10-09 14:07:27 · 4688 阅读 · 0 评论 -
MySQL 索引总结
1、索引是做什么的?索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B树中存储。只是空间列类型的索引使用R-树,并...原创 2019-11-04 21:00:47 · 847 阅读 · 0 评论 -
SQL易错锦集
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT *FROM operationWHERE type = 'SQLStats'AND name = 'SlowLog'ORDER ...原创 2019-11-04 20:51:35 · 999 阅读 · 0 评论 -
MySQL 慢查询、 索引、 事务隔离级别
慢查询什么是慢查询MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,阈值指的是运行时间超过 long_query_time 值的 SQL,则会被记录到慢查询日志中。long_query_time 的默认值为 10,意思是运行 10秒 以上的语句。默认情况下,MySQL 数据库并不启动慢查询日志,需要我们手动来设置这个参数。慢查询...转载 2019-05-22 17:46:23 · 278 阅读 · 0 评论 -
springboot整合redis及集群
springboot整合redis:https://blog.csdn.net/qq_34409255/article/details/80196578搭建Redis集群:https://blog.csdn.net/qq_34409255/article/details/80205617springboot整合redis集群:https://blog.csdn.net/q...转载 2019-05-14 16:28:15 · 3196 阅读 · 0 评论 -
Oracle存储过程和自定义函数-imooc
1-1存储过程和存储函数存储在数据库中供所有用户程序调用的子程序叫做存储过程,存储函数。区别:是否可以通过return返回函数值。存储函数可以通过return返回函数值,而存储过程不可以。相同点:完成特定功能的程序。由于通过out参数,存储过程也可以返回函数值,所以存储过程和存储函数已经没有太大的区别了。而存储函数仍然存在,是由于oracle不断升级,需要实现向下兼容,所以存储函数就...原创 2019-04-24 09:54:06 · 355 阅读 · 0 评论 -
Oracle高级查询-imooc
第1章 课程概述1-1 Oracle高级查询课程概述 (05:14)第2章 分组查询本章介绍分组函数的概念和应用,以及GROUP BY子句和HAVING子句的使用。2-1 Oracle分组查询概述 (01:45) 2-2 分组函数的概念 (02:04) 2-3 使用分组函数1 (04:25) 2-4 使用分组函数2 (02:28) 2-5 使用分组函数3 (...原创 2019-04-28 11:30:18 · 187 阅读 · 0 评论 -
Oracle触发器-imooc
一、触发器相关概念及语法1-1概述什么是触发器 触发器的应用场景 触发器的语法 触发器的类型 案例1-2触发器的概念和第一个触发器数据库触发器是一个与表相关联的,存储的PL/SQL 语句。每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。命令窗口中实现个简单的例子:当员工表中新...原创 2019-04-26 09:28:35 · 243 阅读 · 0 评论 -
附加数据库失败 版本为661,无法打开,支持655版本解决方法
给SQL sever 2008附加原来的数据库的时候却出现了这样的问题,如下图:然后就去查资料了,原因是SQL Sever 2008的版本号为655,SQL Sever 2008 R2的版本号为611,这句话就是是说我的服务器(本机)的SQL Sever 2008版本低于创建该数据库用到SQL Sever的版本(就是你用的数据库的版本过时了),解决方法么就是最简单的下载一个SQL ...转载 2019-04-03 14:39:09 · 4852 阅读 · 1 评论 -
列级约束与表级约束
5种约束:主键约束(primary key )、唯一性约束(unique)、检查约束(check)、缺省约束(default)、外部键约束(foreign)约束又分为列级约束与表级约束,它们的区别:(1)列级约束:只能应用于一列上。表级约束:可以应用于一列上,也可以应用在一个表中的多个列上。(即:如果你创建的约束涉及到该表的多个属性列,...转载 2019-04-08 11:25:23 · 8386 阅读 · 0 评论 -
Oracle基本语法:操作表结构与表数据
创建表CREATE TABLE table_name(column_name datatype,...);复制表数据在建表时复制: create table table_new as select column1,...|* from table_old;在添加数据时复制:insert into table_new [(column1,...)] selec...原创 2019-04-04 17:40:36 · 267 阅读 · 0 评论 -
Oracle 表空间和数据文件之间的关系
一、概念表空间:是一个或多个数据文件的逻辑集合表空间逻辑存储对象:永久段-->如表与索引临时段-->如临时表数据与排序段回滚段-->用于事物回滚或闪回内存的撤销数据表空间分类:系统表空间(system、sysaux),非系统表空间一个表空间至少包含一个数据文件,一个数据文件只能属于一个表空间。不可或缺的几个表空间:SYSTEM --->字典表...转载 2019-04-04 15:54:42 · 426 阅读 · 0 评论