首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MYSQL SELECT 是多彩的, 业务如何应用适应不同场景

看过不少文字, 实际上基本上很少看到select 语句被研究的, select 不就是select 出数据这么简单, NO NO NO ....我们先看看MYSQL 的SELECT 到底有几种形式, 在什么方式上需要被使用,可以满足某些系统的功能. 1 select for share; 这个应用到的相对于for update 要少的多, 但实际上有些业务中是可以用到他来避免一些问题的...这样的情况就使用 select for update 对操作的行添加 X 锁的方式解决问题. 那可能有同学会问那我什么都不加的情况下,加的什么锁....在mysql 8 后给出了新的select 支持的方式, 其中NOWAIT 就是一个在原有模式中添加的附加的功能, 和NOWAIT 一样,不必等待 ?...MYSQL 数据库本身的定位是快速的OLTP的操作,在高并发中这样的等待的情况可能不被允许,应用程序希望快速的得到我是否可以对这行是否能进行操作,所以在此基础上,MYSQL 8 提供了 NOWAIT 的方式来满足应用的需求

69930

MySQL的SELECT …for update

最近的项目中,因为涉及到Mysql数据中乐观锁和悲观锁的使用,所以结合项目和网上的知识点对乐观锁和悲观锁的知识进行总结。...上面的第一步我们执行了一次查询操作:select status from t_goods where id=1 for update;与普通查询不一样的是,我们使用了select…for update的方式...补充:MySQL select…for update的Row Lock与Table Lock   上面我们提到,使用select…for update会把数据给锁住,不过我们需要注意一些锁的级别,MySQL...举例说明:   数据库表t_goods,包括id,status,name三个字段,id为主键,数据库中记录如下;   注:为了测试数据库锁,我使用两个console来模拟不同的事务操作,分别用console1...select * from person where id>=2 for UPDATE   以上就是关于数据库主键对MySQL锁级别的影响实例,需要注意的是,除了主键外,使用索引也会影响数据库的锁定级别

3.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mongodb与MySQL的不同_Mongodb与MySQL之间的比较分析

    大家好,又见面了,我是你们的朋友全栈君。 本篇文章给大家带来的内容是关于Mongodb与MySQL之间的比较分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。...2、MongoDB在指定_id与不指定_id插入时速度相差很大,而MySQL的差别却小很多。...MongoDB通过计算机特征值、时间、进程ID与随机数来确保生成的_id是唯一的。...2、从图中可以看出,在指定主键插入数据的时候,MySQL与MongoDB在不同数据数量级时,每秒插入的数据每隔一段时间就会有一个波动,在图表中显示成为规律的毛刺现象。...这些操作每当数据库中的数据达到一定量级后就会自动进行,因此每隔一段时间就会有一个明显的毛刺。 2、MongoDB毕竟还是新生事物,其稳定性没有已应用多年的MySQL优秀。

    1.9K20

    【mysql】基本的select语句

    去除重复行 查询员工表中一共有哪些部门id SELECT DISTINCT department_id FROM employees; [在这里插入图片描述] #错误的:没有去重的情况 SELECT...DISTINCT 其实是对后面所有列名的组合进行去重,你能看到最后的结果是 74 条,因为这 74 个部门id不同,都有 salary 这个属性值。...SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。...FROM employees;[在这里插入图片描述] 加入常数就会在每一行的前面增加一个常数,比如加个公司名为:“兮动人” 6....Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。 7.

    1.5K30

    mysql(基本的SELECT语句)

    在学习SELECT之前我们先来了解下关于它的基本知识点:   SQL语言的规则与规范 SQL 可以写在一行或者多行。...为了提高可读性,各子句分行写,必要时使用缩进每条命令以 ; 或 \g 或 \G 结束关键字不能被缩写也不能分行 关于标点符号必须保证所有的()、单引号、双引号是成对结束的必须使用英文状态下的半角输入方式字符串型和日期时间类型的数据可以使用单引号...空值参与运算 所有运算符或列值遇到null值,运算的结果都为null SELECT NULL+1,NULL-1,NULL*1,NULL>1,NULL<1,NULL=1 FROM DUAL 在 MySQL...SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。...Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。 barcode、goodsname 是文本型的 price 是整数类型的。

    1.7K30

    SELECT和DELETE执行计划的不同选择

    ,都创建了索引, SQL> SELECT * from A a inner join B b on a.ID = b.id where b.C_DATE 的成本,会更高些,SELECT返回所有列,需要考虑回表,因此干脆不回表,选择全表扫描,从Cost能看出,HINT索引的值更高。...从10053能看到SELECT的执行计划成本计算,根本没考虑索引,鉴于SELECT *和较高的CF,能不回表就不回表了, PLAN_TABLE_OUTPUT ----------------------...ID") DELETE的时候,毕竟要删除数据,因此回表势在必行的,只能在回表的各种路径中找一个合适的,所以会考虑索引路径, ?...SELECT和DELETE即使条件相同,相应的执行计划,可能还是有差别,归根结底在于Cost的计算和判断,如上例所示,可能会考虑是否需要回表、CF值高低等因素,所以Oracle在这方面还是很智能的,优化器的算法

    87050

    mysql中select子查(select中的select子查询)询探索

    ),也就是select dname from dept d where e.deptno = d.deptno但是这部分是不能单独执行的,所以猜测mysql对这部分做了处理,处理成类似这种select...子查询的结果会作为一个临时表,与主查询中的emp表进行连接查询,最终得到员工姓名和部门名称的查询结果。...= 3; Subquery returns more than 1 row 子查询中的limit mysql> select d.dname,(select e.ename from emp e where...子查询可能的使用场景 带统计的查询 查询部门名称,地点,和部门人数 mysql> select dname,loc,(select count(empno) from emp e where e.deptno...,主查询只需要一行,例如查询部门名称,所在地,和部门中id最大的一个人的名称 mysql> select d.dname,(select e.ename from emp e where e.deptno

    11200

    select语句的执行流程(MySql)

    学习了极客时间MySql课程,做个总结 以一条select语句为例:select * from T where ID=4 ,梳理下执行的流程 一条sql语句在执行过程中需要经过连接器、分析器、优化器、...执行器等,也有可能会经过查询缓存,如图所示 连接器 想要连接数据库那么必须是要通过连接器,连接器负责与客户端建立连接、获取权限、维持和管理连接。...查询缓存 在经过连接器之后,会执行第二步查询缓存,在MySql拿到查询后,会先到查询缓存查看是否执行过这条语句,之前执行的结果会以key-value对的形式存在,如果不在查询缓存中,会继续执行后面的极端...在MySql8.0之后去掉了查询缓存的功能。...分析器 分析器会先做“词法分析”,识别出sql里的字符串分别是什么,读出“select”关键字对出这是一条查询语句,把字符串T识别成“表T” “语法分析”,根据词法分析的结果,判断该条sql是否满足MySql

    10810

    MySQL的行转列

    MySQL的行转列操作 在MySQL中,经常会遇到行转列和列转行的操作,今天来看看这种问题的解决办法,先来说说行转列。...MySQL行转列操作 所谓的行转列操作,就是将一个表的行信息转化为列信息,说着可能比较笼统,这里先举个例子,如下: +----+-----------+--------+-------+ | ID...,而表2是将表1的行记录信息(学科、姓名)转化为列信息,并根据不同的user_name进行分组显示。...,我们定义一个列'数学',并把它的score填入其中,如果碰到'语文'或者'英语',那么把它替换为0,我们可以先笼统的写出如下SQL: mysql-yeyz ::>>SELECT user_name ,...,我们现在需要在转换之后的表上面添加一个total字段,这个字段的添加我们可以通过下面的方法,即在最开始统计的时候,就把score值也统计进去,如下: mysql-yeyz 14:18:06>>SELECT

    13.2K10

    相同的时间,不同的人生

    在规定的时间内,一个人目标的达成情况(创造的价值),我们称之为效率。如此可见效率与时间是密切相关的,提高效率首先要做的就是提高我们的时间利用率。...然而现实世界每个人之间的差距确实巨大的,那么如何在相同的时间内让自己比别人更优秀一点呢,有两种方法,一是将自己的空闲时间利用起来,二是提高自己的时间利用率。...利用自己的空闲时间 世界上有很多伟大的事情都是在空闲时间完成的,而不是在工作时间完成的。...你有多少时间是真正属于你自己的,也许你会说我自己的时间怎么会不属于我呢?其实不然你的大多数时间你都无法决定来做什么,严格来说这些时间是不属于你的。...这里说的空闲时间特指你可以自由支配的时间,因为你能弯道超车的机会只能在这些时间内实现。在无法自由支配的时间内,每个人都是一样的,未来工作和生活而忙碌。 那么如何找到自己的空闲时间,并将它利用起来呢?

    1.2K10

    MySQL的insert into select 引发锁表

    MySQL一般我们在生产上备份数据通常会用到 这两种方法: INSERT INTO SELECT CREATE TABLE AS SELECT 注:本文仅针对MySQL innodb引擎,事务是可重复读...,可以自定义选择字段吗,这样复制的时间会大大提升。...因此从MySQL5.5版本开始引入了MDL锁,来保护表的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 注意: 新表不会自动创建创建和原表相同的索引。...(即复制表的索引会消失) 3 .区别 首先,最大的区别是二者属于不同类型的语句,INSERT INTO SELECT 是DML语句(数据操作语言,SQL中处理数据等操作统称为数据操纵语言),完成后需要提交才能生效...其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建表;CREATE TABLE AS SELECT 则建表和插入数据一块完成。

    2.1K10

    sql去掉重复的行_select去掉重复记录

    有重复数据主要有一下几种情况: 1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 example: select distinct * from...table(表名) where (条件) 2.存在部分字段相同的纪录(有主键id即唯一键) 如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group...by分组 example: select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....]...) 3.没有唯一键ID 这种情况我觉得最复杂,目前我只会一种方法,有那位知道其他方法的可以留言,交流一下: example: select identity(int1,1) as...id,* into newtable(临时表) from table select * from newtable where id in (select max(id) from newtable group

    2.9K30

    MySQL的insert into select 引发锁表

    MySQL一般我们在生产上备份数据通常会用到 这两种方法: INSERT INTO SELECT CREATE TABLE AS SELECT 注:本文仅针对MySQL innodb引擎,事务是可重复读...,可以自定义选择字段吗,这样复制的时间会大大提升。...因此从MySQL5.5版本开始引入了MDL锁,来保护表的元数据信息,用于解决或者保证DDL操作与DML操作之间的一致性。 注意: 新表不会自动创建创建和原表相同的索引。...(即复制表的索引会消失) 3 .区别 首先,最大的区别是二者属于不同类型的语句,INSERT INTO SELECT 是DML语句(数据操作语言,SQL中处理数据等操作统称为数据操纵语言),完成后需要提交才能生效...其次,功能不同,INSERT INTO SELECT只是插入数据,必须先建表;CREATE TABLE AS SELECT 则建表和插入数据一块完成。

    6.7K31

    【重学MySQL】十三、基本的 select 语句

    总的来说,DUAL在MySQL中是一个可选的概念,主要用于与那些期望在所有数据库系统中都有DUAL表的概念的代码兼容。但在实际使用中,你通常可以省略它,直接在MySQL中执行你的SELECT语句。...distinct 在MySQL中,DISTINCT关键字用于在查询结果中返回唯一不同的值。当你从表中检索数据时,如果表中有重复的行,并且你只希望看到每个唯一值一次,那么就可以使用DISTINCT。...组合 注意:这实际上会返回所有行,因为假设每个员工都位于不同的部门或每个部门都有不同的员工名称(这通常不是真实情况,但用于说明)。...避免保留字冲突:如果你的表名或列名与MySQL的保留字相同,使用反引号可以避免语法错误。...不同的数据库系统(如MySQL、SQL Server、Oracle等)可能在SQL方言上有所不同,但基本的SELECT语句在大多数系统中都是通用的。

    17610

    例证MySQL GTID与MariaDB GTID的不同之处

    当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。...此UUID是32个字符的随机字符串。 该值取自位于mysql数据目录中的auto.cnf文件。 第二部分是序列。 例如: ? ?...当与session会话级一起使用时,该列表包含此客户端拥有的所有GTID; 当与global 级一起使用时,它包含所有GTID及其所有者的列表。...MariaDB 数据库作为是 MySQL 的一个分支,在某些特性上与 MySQL相同。...每个新产生的 Event Group 记录到Binlog时都会新生成一个单调递增的序列号 备注:MariaDB 10.0/10.1的GTID复制与MySQL 5.6/5.7 不兼容。 ?

    1.8K20

    MySQL Select语句是怎么执行的?

    MySQL Select语句是怎么执行的?...最近在极客时间看丁奇大佬的《MySQL45讲》,真心觉得讲的不错,把其中获得的一些MySQL方向的经验整理整理分享给大家,有兴趣同学可以购买相关课程进行学习。...今天分享的内容是select和update的执行流程。 select的执行过程 话不多说,来个神图镇楼(自己画的)。...[7goo7i5di4.png] 首先,我们可以看到,整个select语句包含三个模块,其中客户端和MySQL两个部分,MySQL又包含server端和存储引擎侧,server端包含连接器、查询缓存...如果客户端连接进入MySQL后,一直没有进行任何操作,那么连接器将会在wait_timeout参数设置的时间后,将该连接断开。

    2.3K40
    领券