mysql查找字段为什么会无故更新?

mar11
  • 209

问个问题
mysql的order表不知为什么,支付时间(pay_time)这个字段数据会变。 随机的某行,都是更新成 订单添加时间+一段固定时间的和,不确定是哪个项目链接数据库更新的数据,或者是有调度任务,怎么查?

问题描述

问题出现的环境背景及自己尝试过哪些方法

尝试查找了这些订单的共性,但是字段上没什么相同的地方,我个人的订单有的被更新了, 有的没有。

相关代码

部分order表数据


CREATE TABLE `aws_orders` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id 无意义',
  `oid` varchar(32) DEFAULT '0' COMMENT '订单ID',
  `plat_oid` varchar(64) DEFAULT '0' COMMENT '平台交易号',
  `uid` int(10) unsigned DEFAULT '0' COMMENT '用户ID',
  `add_time` int(10) unsigned DEFAULT '0' COMMENT '创建时间',
  `amount` int(10) unsigned DEFAULT '0' COMMENT '订单金额',
  `pay_amount` decimal(7,2) unsigned DEFAULT '0.00' COMMENT '支付金额',
  `pay_time` varchar(20) DEFAULT '0' COMMENT '支付时间',
  `is_delete` tinyint(3) unsigned DEFAULT '0' COMMENT '已删除订单 0否 1是',
  `pay_type` tinyint(3) unsigned DEFAULT '0' COMMENT '支付方式 1微信 2支付宝 3免单',
  `from` tinyint(3) unsigned DEFAULT '0' COMMENT '订单来源 1网站 2移动端  3IOS 4Android',
  `coupon_id` int(10) unsigned DEFAULT '0' COMMENT '优惠码ID',
  `from_plat` tinyint(3) unsigned DEFAULT '0' COMMENT '订单来源 0网站 1ios 2android 3IPAD 4Mobile',
  `pay_plat` tinyint(3) unsigned DEFAULT '0' COMMENT '支付终端 0网站 1ios 2android 3IPAD 4Mobile',
  `type` tinyint(3) unsigned DEFAULT '0' COMMENT '订单类型 0普通订单 1团购 2小团',
  `full_cut` varchar(20) DEFAULT '0' COMMENT '满减活动 减掉的金额',
  PRIMARY KEY (`id`),
  KEY `i_oid` (`oid`) USING BTREE,
  KEY `i_uid` (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=48035 DEFAULT CHARSET=utf8

有问题的就是pay_time字段,本来是有值的,不知道为啥过一段时间一看,被更新了,已询问公司相关同事和leader,没有人在后端操作。在支付回调和下订单等所有和order表有关的操作中写日志了,也没有这个令人窒息的操作。

一些错误数据


+------------+-----------------+----------------------+--------+-------+
| add_time   | pay_time        | oid                  | uid    | ispay |
+------------+-----------------+----------------------+--------+-------+
| 1524973498 | 1533008773.6939 | 1524973498601898106  |  60189 |     2 |
| 1524975582 | 1533010805.9663 | 15249755824529331409 | 452933 |     0 |
| 1525001588 | 1533036851.0322 | 15250015884533789469 | 453378 |     2 |
| 1525001992 | 1533037260.197  | 15250019924533763961 | 453376 |     2 |
| 1525002153 | 1533037381.1686 | 15250021534533765879 | 453376 |     2 |
+------------+-----------------+----------------------+--------+-------+

这里也有个点,本来pay_time存的整数,数据错乱后变成了浮点型的数字时间戳。

你期待的结果是什么?实际看到的错误信息又是什么?

现在想知道是为啥被无故更新了

回复
阅读 2k
3 个回答

可以试试,
找公司的DBA,让其查看下执行过的SQL语句日志,找到对应的sql,再到程序中找哪边更新了。

从更新的情况来说这个字段应该是存取了microtim(true)

项目里搜索下这个表达式排查

或者

搜索所有可能更新该表操作的代码检查

查了binlog,能看到update 语句,但是并不知道是什么来源,,,数据贴到下面,参考下。

mysql数据库的错误数据:

+-----------------+----------------------+--------+-------+--------------------+-----------------------------------------------------+
| pay_time        | oid                  | uid    | ispay | cha_time           | beizhu                                              |
+-----------------+----------------------+--------+-------+--------------------+-----------------------------------------------------+

| 1533037381.1686 | 15250021534533765879 | 453376 |     2 |  8035228.168600082 | NULL                                                |
+-----------------+----------------------+--------+-------+--------------------+-----------------------------------------------------+


binlog:

15733 #180731 19:43:01 server id 1  end_log_pos 1069695028 CRC32 0xc258c5e8   Update_rows: table id 172 flags: STMT_END_F
15734 ### UPDATE `julyedu`.`aws_orders`
15735 ### WHERE
15736 ###   @1=48183
15737 ###   @2='15250021534533765879'
15738 ###   @3='2018042921001004880586962338'
15739 ###   @4=453376
15740 ###   @5=1525002153
15741 ###   @6=1200
15742 ###   @7=389.00
15743 ###   @8='1525002163.0765'
15744 ###   @9=0
15745 ###   @10=2
15746 ###   @11=0
15747 ###   @12=0
15748 ###   @13=1
15749 ###   @14=1
15750 ###   @15=0
15751 ###   @16='0'
15752 ### SET
15753 ###   @1=48183
15754 ###   @2='15250021534533765879'
15755 ###   @3='2018042921001004880586962338'
15756 ###   @4=453376
15757 ###   @5=1525002153
15758 ###   @6=1200
15759 ###   @7=389.00
15760 ###   @8='1533037381.1686'
15761 ###   @9=0
15762 ###   @10=2
15763 ###   @11=0
15764 ###   @12=0
15765 ###   @13=1
15766 ###   @14=1
15767 ###   @15=0
15768 ###   @16='0'
15769 # at 1069695028
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏