
mysql
文章平均质量分 84
Java道哥
汲取 传承 打造开源影响力
展开
-
数据库中的Schema是什么?
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文模式)是数据库的组织和结构,在这里,产品是电影,所以它包含电影标题,类别,演员等数据。(4)Views(视图):关于用于评估的数据的特别观点,所以通过这些模式图,我们可以进一步创建一个数据库,它显示了三个表,以及它们的数据类型,表之间的关系,以及它们的主键和外键。从概念上讲,模式是一组相互关联的数据库对象,例如表,表列,列的数据类型,索引,外键等。因此,根据您使用的RDBMS,模式和数据库可能是也可能不是同一个东西。转载 2023-01-05 16:34:39 · 8982 阅读 · 0 评论 -
MySQL的Schema是什么?
中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。一般一个用户对应一个集合,所以为区分不同集合就需给不同集合起名。用户的schema名就相当于用户名,并作为该用户缺省schema。在不同的数据库中要创建的Schema方法是不一样的,但是它们有一个共同的特点就是都支持CREATE SCHEMA语句。例如当我们访问一个数据表时,若该表没有指明属于哪个schema,系统就会自动加上缺省的schema。数据库中,我们可以通过CREATE SCHEMA语句来创建一个数据库。转载 2023-01-05 16:18:36 · 8490 阅读 · 0 评论 -
【有料】JDBC通过PreparedStatement解决SQL注入(5)
正常情况下,应该返回id=1的文章信息,但是,如果在浏览器地址栏输入test.com/sql/article.php?产生这种情况的原因是,id=-1 永远是false,1=1永远是true,所以整个where语句永远是true,相当于没有加where条件,所以查询的条件相当于是整张表的内容。这是一个post请求,登录时调用接口test.com/sql/login.html,sql的查询过程:首先连接。,密码随意输入,如:111,然后提交。,密码随意输入,如:111。转载 2022-10-19 00:11:50 · 171 阅读 · 0 评论 -
【有料】一张图搞懂MySQL的索引失效
explain select * from user where name = 'zhangsan' and age = 20 and pos = 'cxy' and phone = '18730658760'; 和索引顺序无关,MySQL底层的优化器会进行优化,调整索引的顺序explain select * from user where name = 'zhangsan' and age = 20 and pos = 'cx转载 2022-09-20 19:56:04 · 105 阅读 · 0 评论 -
【有料】分库分表神器 Sharding-JDBC,几千万的数据你不搞一下?
的基础概念做了简单梳理,快速的搭建了一个分库分表案例,但这只是实践分库分表的第一步,下一篇我们会详细的介绍四种分片策略的具体用法和使用场景(必知必会),后边将陆续讲解自定义分布式主键、分布式数据库事务、分布式服务治理,数据脱敏等。但有些时候我们并没有使用任何的分片键和分片策略,可还想将 SQL 路由到目标数据库和表,就需要通过手动干预指定SQL的目标数据库和表信息,这也叫强制路由。如果后去需要增加分片表的数量,要逐一修改分片表的步长,运维成本非常高,所以不建议这种方式。接口做数据分片功能的适配。转载 2022-09-19 15:25:21 · 763 阅读 · 0 评论 -
【有料】你分库分表的姿势对么?——详谈水平分库分表
前期业务数据量级不大,流量较低的时候,我们无需分库分表,也不建议分库分表。但是一旦我们要对业务进行分库分表设计时,就一定要考虑到分库分表方案的可持续性。那何为可持续性?其实就是:业务数据量级和业务流量未来进一步升高达到新的量级的时候,我们的分库分表方案可以持续使用。一个通俗的案例,假定当前我们分库分表的方案为10库100表,那么未来某个时间点,若10个库仍然无法应对用户的流量压力,或者10个库的磁盘使用即将达到物理上限时,我们的方案能够进行平滑扩容。转载 2022-09-18 00:03:09 · 225 阅读 · 0 评论 -
【略有料】事务隔离级别中的可重复读能防幻读吗?
每次谈到数据库的事务隔离级别,大家一定会看到这张表.其中,可重复读这个隔离级别,有效地防止了脏读和不可重复读,但仍然可能发生幻读,可能发生幻读就表示可重复读这个隔离级别防不住幻读吗?我不管从数据库方面的教科书还是一些网络教程上,经常看到RR级别是可以重复读的,但是无法解决幻读,只有可串行化(Serializable)才能解决幻读,这个说法是否正确呢?在这篇文章中,我将重点围绕MySQL中可重复读(Repeatable read)能防住幻读吗?转载 2022-09-14 00:58:40 · 265 阅读 · 0 评论 -
【有料】mysql 幻读的详解、实例及解决办法
隔离级别下,step1 执行时是会隐式的添加 行(X)锁 / gap(X)锁的,从而 step2 会被阻塞,step3 会正常执行,待 T1 提交后,T2 才能继续执行(主键冲突执行失败),对于 T1 来说业务是正确的,成功的阻塞扼杀了扰乱业务的T2,对于T1来说他前期读取的结果是可以支撑其后续业务的。事务默认隔离级别,是事务安全与性能的折中,可能也符合二八定律(20%的事务存在幻读的可能,80%的事务没有幻读的风险),我们在正确认识幻读后,便可以根据场景灵活的防止幻读的发生。转载 2022-09-14 00:54:14 · 219 阅读 · 0 评论 -
【有料】数据库-MySQL中for update的作用和用法
for update是一种行级锁,又叫排它锁。一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行。如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。执行提交(COMMIT)语句退出数据库(LOG OFF)程序停止运行。...转载 2022-08-04 19:02:10 · 829 阅读 · 0 评论 -
【有料】MySQL执行计划解读
如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。本例中,由key_len可知t1表的idx_col1_col2被充分使用,col1匹配t2表的col1,col2匹配了一个常量,即 ’ac’c.range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、等的查询。指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。...转载 2022-08-04 01:26:32 · 126 阅读 · 0 评论 -
【有料】MySQL数据类型DECIMAL用法
本文比较简单实用,通读下来,你大概会明白DECIMAL字段的使用场景及注意事项,其实对于常见的字段类型,我们只需要了解其使用场景及注意事项即可,当我们建表时,能够快速选出合适的字段类型才是我们的目的,比如当我们需要存储小数时,能够使用DECIMAL类型并且根据业务需要选择合适的精度,这样我们的工作将很容易开展下去。例如字段salaryDECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是从-999.99到999.99。3.DECIMAL使用总结。...转载 2022-07-30 10:33:41 · 3545 阅读 · 0 评论 -
MySQL触发器trigger的使用
Q:什么是触发器?A: 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性: 1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:I、D、U 3、什么时候触发:在增删改前或者后 4、触发频率:针对每一行执行 5、触发器定义在表上,附着在表上。也就是由事件来触发某个操作,事件包括INSERT语句,UPDATE语句和DELETE语句;可以协助应用在数据库端确保数据的完整转载 2022-05-07 00:50:32 · 405 阅读 · 0 评论 -
MySQL中EXISTS的用法
比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢?E.转载 2022-05-06 20:06:58 · 54064 阅读 · 0 评论 -
MySQL的多版本并发控制(MVCC)是什么?
一、什么是多版本并发控制多版本并发控制技术的英文全称是Multiversion Concurrency Control,简称MVCC。多版本并发控制(MVCC)是通过保存数据在某个时间点的快照来实现并发控制的。也就是说,不管事务执行多长时间,事务内部看到的数据是不受其它事务影响的,根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。简单来说,多版本并发控制的思想就是保存数据的历史版本,通过对数据行的多个版本管理来实现数据库的并发控制。这样我们就可以通过比较版本号...转载 2022-05-05 23:28:45 · 501 阅读 · 0 评论 -
高性能数据库之 分库分表
前言前面的读写分离,分散了数据库读写操作的压力,没有分散存储压力,当数据量很大时,单台数据库服务器就会出现性能瓶颈,主要在以下几方面:数据量太大,读写性能下降数据文件也会变得很大, 备份恢复时间变长所以,需要控制单台数据库服务器数据量大小,分库分表,他来了!先从分库开始说起。分库一般都是业务分库,也就是按照业务模块将数据分散到各个数据库,比如一个电商网站,可以分为用户、商品和订单库。原本一台数据库服务器的数据分散了三个库。需要注意的点join操作问题以前的表都在一个库中,关联表很容易转载 2022-04-02 22:49:00 · 181 阅读 · 0 评论 -
DruidDataSource的使用、配置
记录一下使用DruidDataSource的常用配置。1.pom.xml中引入: <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId>...转载 2022-04-02 17:16:11 · 4882 阅读 · 0 评论 -
高性能数据库之 读写分离
前言随着业务的不断发展,单机数据库已经不能满足业务需要。接下来讲讲数据库集群的几种方式:读写分离和分库分表。读写分离原理读写分离的原理就是将数据库的读写操作分散在不同的节点上。实现方式多台数据库搭建一个集群,一台数据库做主库,其他数据库做从库。主库负责写操作,从库负责读操作主库通过复制将数据的变更同步到从库,每台节点都有完整的数据需要考虑的问题复制延迟主库在数据变更后,不可能立即去进行同步,会有一个延迟。如果这时遇到修改完数据需要立即读出数据的场景,去从库读读是不可行的。这转载 2022-04-02 16:53:23 · 159 阅读 · 0 评论 -
【有料】详解MySQL行锁、死锁和死锁检测
前言上一篇文章中,介绍了 MySQL 的全局锁和表级锁,这篇文章讲解行锁。MySQL 的行锁是在引擎层由各个引擎自己实现的,但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。 InnoDB 是支持行锁的,这也是 MyISAM 被 InnoDB 替代的主要原因之一。顾名思义,行锁就是针对数据库中行记录的锁。这很好理解,比如事务 A 更新了一行,而这时候事务 B转载 2022-04-01 16:57:27 · 510 阅读 · 0 评论 -
一分钟明白MySQL聚簇索引和非聚簇索引
MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值,这是了解聚簇索引和非聚簇索引的前提什么是聚簇索引?很简单记住一句话:找到了索引就找到了需要的数据,那么这个索引就是聚簇索引,所以主键就是聚簇索引,修改聚簇索引其实就是修改主键。什么是非聚簇索引?索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。clustered index(M转载 2022-04-01 16:26:10 · 340 阅读 · 0 评论 -
聚簇索引与非聚簇索引(也叫二级索引)--最清楚的一篇讲解
通俗点讲聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因澄清一个概念:innodb中,在聚簇索引之上创建的索引称之为辅助索引,辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引转载 2022-04-01 16:24:29 · 250 阅读 · 0 评论 -
【有料】MySQL 全局锁和表锁
前言今天讨论的是 MySQL 的锁,数据库锁设计的初衷是处理并发问题,作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则,而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,MySQL 里面的锁大致可以分为全局锁、表级锁和行锁三类。今天这篇文章,作者会介绍全局锁和表级锁,而关于行锁的内容,会在下一篇文章中详细介绍。锁的设计比较复杂,文章不会涉及锁的具体实现细节,主要介绍的是碰到锁时的现象及背后的原理。全局锁顾名思义,全局锁就是对整个数据库实施加锁。My转载 2022-03-31 20:43:26 · 141 阅读 · 0 评论 -
【有料】深入浅出 MySQL 索引(下)
前言在上一篇文章中,作者介绍了 InnoDB 索引的数据结构模型,今天继续聊聊跟 MySQL 索引有关的概念。在开始文章之前,我们先来看一个问题:在下面这个 表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行?下面是这个表的初始化语句。create table T( ID int private key, k int NOT NULL DEFAULT 0, s var转载 2022-03-31 19:17:20 · 91 阅读 · 0 评论 -
【有料】深入浅出 MySQL 索引(上)
前言本篇是专栏中的第四篇,此系列文章是学习《MySQL实战》后,总结出来的笔记文章。上一篇讲了MySQL事务隔离级别,本篇来讲讲索引。提到数据库索引,我想读者并不陌生,在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,可能会出现“给某个字段加个索引吧”之类的声音,但到底什么是索引,索引又是如何工作的呢?索引是数据库系统里面最重要的概念之一,所以我希望读者南信看完。在后面的实战文章中,作者也会经常引用文章中提到的知识点,加深你对数据库索引的理解。一句话简单来说,索引的出现其实转载 2022-03-30 22:04:20 · 95 阅读 · 0 评论 -
【有料】MySQL事务隔离级别详解
前言提到事务,你肯定不会陌生,最经典的例子就是转账,甲转账给乙100块,当乙的账户中到账100块的时候,甲的账户就应该减去100块,事务可以有效的做到这一点。在MySQL中,事务支持实在引擎层实现的,MySQL是一个支持多引擎的系统,但并不是所有引擎都支持事务。比如MySQL原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被取代的原因之一。隔离性事务的四大特性ACID(Atomicity原子性、Consistency一致性、Isolation隔离性、Durability持久转载 2022-03-30 21:48:42 · 239 阅读 · 0 评论 -
MySQL存储过程 事务transaction
MySQL中,单个Store Procedure(SP)不是原子操作,而Oracle则是原子的。如下的存储过程,即使语句2失败,语句1仍然会被commit到数据库中:createtabletestproc(idint(4)primarykey,namevarchar(100)); CREATEPROCEDUREtest_proc_ins( INi_idINT, INi_nameVARCHAR(100) ) BEGI...转载 2022-03-13 02:16:53 · 436 阅读 · 0 评论 -
数据库-MySQL中for update的作用和用法
一、for update定义for update是一种行级锁,又叫排它锁。一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行。如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。只有当出现如下之一的条件,才会释放共享更新锁:执行提交(COMMIT)语转载 2022-03-13 01:20:29 · 6267 阅读 · 1 评论 -
索引失效的情况有哪些?索引何时会失效?(全面总结)
虽然你这列上建了索引,查询条件也是索引列,但最终执行计划没有走它的索引。下面是引起这种问题的几个关键点。列与列对比某个表中,有两列(id和c_id)都建了单独索引,下面这种查询条件不会走索引select * from test where id=c_id;1这种情况会被认为还不如走全表扫描。存在NULL值条件我们在设计数据库表时,应该尽力避免NULL值出现,如果非要不可避免的要出现NULL值,也要给一个DEFAULT值,数值型可以给0、-1之类的, 字符串有时候给空串有问题,就给一个空格转载 2021-04-06 15:44:14 · 142 阅读 · 0 评论 -
阿里巴巴数据库连接池(DruidDataSource)配置属性列表
DruidDataSource配置兼容DBCP,但个别配置的语意有所区别。配置 缺省值 说明 name 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错。详情-点此处。 url 连接数据库的url,不同数据库不一样。例如..转载 2021-01-25 21:00:02 · 354 阅读 · 0 评论 -
mysql 通过使用联全索引优化Group by查询
/*SELECT count(*) FROM (*/EXPLAIN SELECT st.id,st.Stu_name,tmpgt.time,tmpgt.goutong FROM jingjie_students st RIGHT JOIN (SELECT * FROM _goutong gttime,(SELECT name_id nameid, max(time) timeFROM t_goutongGROUP BY name_id) gt WHERE gttime.n...转载 2020-10-26 02:25:25 · 403 阅读 · 0 评论 -
SQL UNION 操作符
SQL UNION 操作符合并两个或多个 SELECT 语句的结果。SQL UNION 操作符UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。SQL UNION 语法SELECTcolumn_name(s)FROMtable1UNIONSELECTcolumn_name(s)FROMtable2;...转载 2020-10-26 00:30:09 · 496 阅读 · 0 评论 -
MySQL 删除表的几种情况
MySQL 删除表的几种情况:1、drop table table_name: 删除表全部数据和表结构,立刻释放磁盘空间,不管是 Innodb 和 MyISAM;实例,删除学生表:drop table student;2、truncate table table_name: 删除表全部数据,保留表结构,立刻释放磁盘空间 ,不管是 Innodb 和 MyISAM;实例,删除...转载 2020-01-09 21:45:43 · 328 阅读 · 0 评论 -
MySQL: 数据类型转换函数(CONVERT/CONCAT/CAST)
名称 说明 BINARY 将 string 转换为二进制 string CAST() 将某个值转换为特定类型 CONVERT() 将某个值转换为特定类型 数据类型转换可以通过CAST()和CONVERT()函数来实现。大多数情况下,这两个函数是重叠的,它们反映了SQL语言的演化历史。这两个函 数的功能相似,不过它们的语法不同。虽然并非所有类型的值都能转变为其...转载 2020-01-09 11:46:47 · 1517 阅读 · 0 评论 -
这一次,彻底读懂Mysql执行计划
写在最前面本文主要介绍mysql执行计划各个字段的作用,以及如何利用Mysql执行计划优化我们的Sql,本文主要面向后端开发程序员,以及需要和数据库打交道的同学们。1、什么是Mysql执行计划所谓的执行计划就是Mysql如何执行一条Sql语句,包括Sql查询的顺序、是否使用索引、以及使用的索引信息等内容。一个例子:基本语法explain select ....转载 2019-11-26 00:02:12 · 125 阅读 · 0 评论 -
一份超详细的MySQL高性能优化实战总结!
MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰。在进行 MySQL 的优化之前必须要了解的就是 MySQL 的查询过程,很多的查询优化工作实际上就是遵循一些原则让 MySQL 的优化器能够按照预想的合理方式运行而已。MySQL 查询过程优化的哲学注:优化有风险,修改需谨慎。优化可能带来的问题: 优...转载 2019-11-26 00:00:33 · 148 阅读 · 0 评论