假设,现在有2个数据表一个是**users**表,另一个是积分表**currencies**
结构如下
1. users
| id | 主键 |
| name | 用户名 |
|
. . . |
. . . |
2. currencies
| user_id | 所属用户,对应 users的id |
| expensive | 总消耗 |
| sum | 积分总数 |
现在的业务是在users种插入记录的时候,需要在currencies表中同时插入一条积分记录,
使用事务能很好的同步这个问题,我们不作具体业务讨论
只是处理在某种很微妙的情况下导致了users插入了记录,但是currencies表却没有成功写入的情况
eg:
INSERT INTO currencies(`owner_id`, `expensive`, `sum`) // 很简单的mysql insert语法
SELECT // select的内容可以是目标表的 column,或者自定义的值,如果是需要目标表的column的话要确保这个字段在目标表中要存在
`id` // users表的主键
0, // 总消耗, 根据要被写入的数据表的字段来定义类型: 可以是:char,int 等等
5 // 总收入
FROM
`users` // select的columns来自哪个数据表
WHERE NOT EXISTS // 查找currencies不存在,但是在users中存在的记录
(
SELECT
*
FROM
`currencies` // 要被写入的表
WHERE
`currencies`.`owner_id` = `users`.`id`
)
以防万一的操作,祝你永远用不上
本文介绍了一个使用MySQL事务处理两个关联表(users与currencies)同步插入数据的问题。在特定情况下,如何确保当users表中插入记录时,currencies表也能同步更新,避免数据不一致的情况发生。
2154

被折叠的 条评论
为什么被折叠?



