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

update影响行数使用不当造成的bug

业务系统中,使用update语句更新数据是再正常不过的场景,我们也经常通过update更新的行数,来做一些业务判断,类似下面的伪代码:(mybatis + mysql 场景) if (xxxMapper.updateByPrimaryKeySelective...(entity)>0){ //更新成功,做其它业务处理 } 但是这里有一个坑,mysql中update影响行数>0是有条件的,假如有一张表: ?...这一行成功更新,影响行数为1,理所当然,然后把这条update语句再执行一次: ? 这时候,返回的影响行数为0,也就是说,当待更新的记录与原始记录旧值相同时,mysql其实并不会做任何更新。...换言之,如果上游传过来的数据,与数据库本身的旧值相等,没有变化时,update语句影响行数为0。这与另一种场景:"更新一条并不存在的记录,影响行数返回0" 无法区分。 ?...结论:不要使用update语句的影响行数做重要的业务判断!

2K10

浅谈MySQL 统计行数的 count

MySQL count() 函数我们并不陌生,用来统计每张表的行数。但如果你的表越来越大,且是 InnoDB 引擎的话,会发现计算的速度会越来越慢。...Count() 的实现 InnoDB 和 MyISAM 是 MySQL 常用的数据引擎,由于两者实现的不同,导致 count() 操作计算的效率也不同。...由于 MVCC 的控制,使得 MySQL 具有并发的能力,也就是说对于同一时刻,InnoDB 返回的表的行数是不一定的,事务看到的行数与开启后的一致性视图有关,换句话说,每个事务能看到的数据版本是不一样的...而且还有一点,由于 redo log 的支持,在 MySQL 发生异常时,是可以保证 crash-safe。...总结 MySQL count() 函数的执行效率和底层的数据引擎有关。MyISAM 不加 where 条件,查询会很快,但不支持事务。

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

    什么影响MySQL性能

    影响性能的一些常见因素 服务器硬件 服务器系统 数据库存储引擎 MyISAM:可以很好的利用内存,但不支持事务,表级锁 InnoDB:事务级存储引擎,完美支持行级锁以及事务ACID特性 数据库参数配置...数据库表结构设计和SQL语句执行效率 数据库的版本 ---- CPU资源和可用内存大小 在服务器硬件中,最容易影响数据库性能的是CPU资源和可用内存大小以及I/O。...若选择多核心的CPU的话,最好使用MySQL5.6以上的版本,因为低版本对多核心的CPU支持得不是很好 注:MySQL目前不支持多CPU对同一SQL进行并发处理。...MySQL适合的操作系统 MySQL在不同操作系统需要注意的事项: Windows下对数据库的库名表名没有大小写敏感,但是Unix/Linux上却是大小写敏感的,所以尽量统一小写 使用FreeBSD的话...,需要使用最新版本,因为老版本对MySQL的支持不是很好 Solaris系统上支持MySQL,它以稳定性著称 ---- CentOS系统参数优化 内核相关参数(/etc/sysctl.conf): 设置最大监听队列的长度

    88520

    什么影响MySQL 性能?

    来源:http://t.cn/RnU0h2o 1 影响性能的几个方面 2 MySQL体系结构 3 InnoDB存储引擎 4 InnoDB存储引擎的特性 5 什么是锁 6 如何选择正确的存储引擎 7 配置参数...8 性能优化顺序 ---- 1 影响性能的几个方面 服务器硬件。...3.1 InnoDB使用表空间进行数据存储。...1.2 独立表空间可以通过optimeze table 收缩系统文件,不需要重启服务器也不会影响对表的正常访问。 2.1 如果对多个表进行刷新时,实际上是顺序进行的,会产生IO瓶颈。...MySQL数据库实例:  ①MySQL是单进程多线程(而oracle是多进程),也就是说MySQL实例在系统上表现就是一个服务进程,即进程;  ②MySQL实例是线程和内存组成,实例才是真正用于操作数据库文件的

    76110

    oracle中,通过触发器,记录每个语句影响行数

    这个过程有可能 多人同时抽数,互相影响。有测试人员反应,原来抽过的数,偶尔就无缘无故的找不到了,有时又会出来重复行。这个问题产生肯定是抽数逻辑问题以及并行的问题了!...语句级是每一个语句执行前后触发一次操作,如果我在每一个SQL语句执行后,把表名,时间,影响行写到记录表里就行了。      ...但问题来了,在语句触发器中,无法得到该语句的行数,sql%rowcount  在触发器里报错。只能用行级触发器去统计行数! 代码结构: 整个监控数据行的功能包含: 一个日志表,包,序列。...日志表:记录目标表名,SQL执行开始、结束时间,影响行数,监控数据行上的某些列信息。 包:主要是3个存储过程, 语句开始存储过程:用关联数组来记录目标表名和开始时间,把其它值清0....这里假设要监控T_TRADE表,监控影响的code和rq列,那么调用时按下面方法写,就能监控一条SQL调用影响的所有主键及日期范围了: pck_cslog.oneachrow_cs('T_TRADE',

    79920

    MYSQL统计行数时到底应该怎么COUNT

    相信每个人在写代码时都有遇到过要获取MYSQL表里数据行数的情况,多数人获取数据表行数时都用COUNT(*),但同时也流传了不少其他方式,比如说COUNT(1)、COUNT(主键)、COUNT(字段)。...文章中都是针对MySQL的InnoDB引擎展开讨论的,MyISAM引擎是把一个表的总行数记录在了磁盘里,查询时效率很高(如果加了where条件也不能直接从磁盘返回)。...(返回10002); select count(*) from t; (返回10001) 会话A在T1开启事务拿到一致性视图,可重复读级别下在事务中任何时刻读到数据都一样,其他事务的更新对会话A没影响所以...另外要注意,很多人为了销量会把表的行数记录到Redis中,但这样不能保证Redis里的计数和MySQL表里的数据保持精确一致,这是两个不同的存储系统不支持分布式事务所以就无法拿到精确的一致性视图,如果为了效率把表行数单独存储那么最好存放在一个单独的...MySQL表里,这样无法拿到一致性视图的问题就能解决了.

    1.5K20

    MySQL自身对性能的影响

    MySQL体系结构 想要了解MySQL自身对性能的影响,就需要先熟悉MySQL的体系结构和常用的存储引擎。MySQL并不完美,却足够灵活,能够适应高要求的环境,例如Web类应用。...如果使用独立表空间的话这个问题就很好解决了,我们对表数据进行清理之后,可以直接通过optimize table命令来收缩系统文件,并且不需要重启MySQL,也不会影响数据库的访问。...2.然后我们再来看看使用系统表空间对I/O会有什么影响:对于系统表空间来说,因为只有一个文件,所以多个表空间进行数据刷新的时候,实际上在文件系统上是顺序进行的,这样就会产生大量的I/O瓶颈。...建议,在Innodb下使用独立表空间进行数据存储。...所以说死锁是可以由系统自动处理的,如果只有少量的死锁并不会对系统造成什么样的影响,只要在应用程序中发现死锁并进行处理就可以。

    1.2K20

    影响mysql的场外因素

    Mysql在使用时不仅会受到自己的配置参数影响, 服务器硬件设施, 内核参数也会对性能有影响....服务器硬件 先看下服务器硬件对Mysql性能的影响, 这里主要介绍下CPU, 内存, 磁盘IO三个方面的影响...., 需要并发处理SQL的能力更高, CPU核数越多越好; 在选择mysql时, 需要注意在5.6以后的版本, 对多核CPU支持比较好....内存 因为数据会缓存到内存中, 内存会直接影响性能. MyISAM引擎会将索引数据缓存到内存中, 数据信息从磁盘中读取. InnoDB引擎会将索引和数据信息都会缓存到内存中....但没考虑读操作和写操作不同耗时的情况; deadline 这个策略比较简单, 只分了读和写两个队列, 内核会为每个I/O操作都设置一个超时时间; noop 这个策略最简单, 只有单个队列, 只有一些简单合并操作; Mysql

    39910

    Mysql获取数据的总行数count(*)很慢

    获取数据的总数是很常见的业务场景,但是我们发现随着数据的增长count(*)越来越慢,这个是为什么呢, count(*)的实现方式 我们要明确不同的存储引擎,他的实现方式不一样 MyiSAM引擎把一个表的总行数存在了磁盘上...引擎就麻烦了,他的执行count(*)的时候,是一行行的累加计数 当然我们要知道此事的说的是没有带条件的count(*),如果加了where条件的话,MyiSAM返回也不能返回的很快 由于我们现在如果使用mysql...有数据的默认可复用读是他的默认隔离级别,在代码上通过多版本控制,也就是MVCC,每一行记录的要判断自己师傅对这个会话可见,因此对于count(*)请求来说,innoDB只好把数据一行行的读出判断,可见的行才能后用于累加, 当然mysql...也是对count(*)是有进行优化的,我们知道我们的索引是一棵树,而主键索引叶子节点是数据,而普通索引叶子节点是主键索引,所以主键索引比普通索引的树大些,因此mysql优化器会拿到索引树小的,进行遍历计算...缓存系统可能会发生数据丢失,由于redis不能永久的存储在内存中,因此我们可能会想到持久化存储起来,即使这样,万一redis异常重启了,有可能会发生数据丢失,比如数据插入一行数据,redis记录值加1

    5K20

    二帮主:央行数字货币的崛起,会给比特币带来什么影响

    1 输入标题 今天我们来聊一聊最近风口上的央行数字货币,各国央妈都来势汹汹,我国数字货币也已经开启测试,就差临门一脚了,正值比特币的价格也一直停顿不前,这一次是否会因为法定数字货币再一蹶不振,还是能无视法定数字货币的威胁继续向前...2 虚拟货币里没有央妈的份 1)央行数字货币没有升职空间 为什么关注区块链,我很诚实的说,关注区块链,是因为这样能看懂白皮书,知道哪个项目好,哪个项目不好,知道我的钱该给谁,项目将去往何处,是否拥有一飞冲天的本领...(话说回来,央行对于数字货币的发行更多的是政治和战略意义,而且不会占据很大的体量) 万一央行数字货币发行早鸟阶段送20%来吸引人买入,我是不敢拿的,薅国家羊毛这种事情,还是留给胆大的人来吧!...国家法定数字货币的发行如果一步步发展良好的话,很有可能所有国家会联合发布世界数字货币,其实最需要区块链的分布式账本的正是各个国家,他们彼此互不相信,政策的更迭还容易影响经济,如果发行基于区块链的世界数字货币

    1.1K90

    MySQL 使用 XtraBackup 进行数据热备份指导

    ,数据可读,但是不可写(分以下情况) Innodb 引擎的备份是无阻塞的备份,不会影响表的读写操作 MyISAML 引擎是要加读锁的,只能读不能写 XtraBackup 备份过程不会打断正在执行的事务...mysql:mysql -R /var/lib/mysql/data 5)....指定需要备份到哪个目录,使用incremental-dir指定全备目录; (2)进行数据备份时,需要使用参数 --apply-log redo-only 先合并全备数据目录数据,确保全备数据目录数据的一致性...password=bk_mT007 --no-timestamp ${BACKUP_PATH} 【注意】: 脚本文件不要在 windows 环境下编写,最好使用 Linux 下的 vim,以免回车键影响文件出现问号...后期若是选定一台 【从机】进行数据恢复,那么停机、合并全备份数据,还原操作即可 … 毕竟鄙人也是初次接触 实际生产环境中,可作具体的优化 比如:在多台从机上配置备份任务,避免不确定哪台服务器宕机等

    3K21

    是什么影响MySQL 的性能?

    SQL 脚本 SQL 脚本会影响MySQL 的执行效率,这个大家都懂,面试八股文中常见问题之一。...服务器的硬件如 CPU、内存、磁盘 IO 等都会影响MySQL 性能,操作系统也会影响MySQL 性能。 3.网卡流量 网卡流量当然也会影响数据库。...5.大表操作 大表操作也会影响到数据库性能,那么什么样的表就算大表呢? 大表没有统一的标准,还是要结合具体的业务场景来定。 我举一个比较常规的例子: 数据表中的行数超过千万行。...在 MySQL5.5(不含) 之前,建立索引是会锁表的,从 MySQL5.5(含) 开始,建立索引虽然不会锁表,但是会引起主从延迟(因为要在主库上操作完成之后,再将操作日志传到从库,然后完成同步)。...7.存储引擎 使用 MySQL 我们可以选择不同的存储引擎,不同的存储引擎特点不同,最终对数据库的影响也不同。例如 MySQL 中常见的 MyISAM、InnoDB 等存储引擎。

    1.3K30
    领券