mysql - 如何使用 SQL 创建欺诈检测?
问题描述
- 用户 A 是(欺诈者)。
- 用户 B 不是(欺诈者)。但是,系统将不允许用户 B 执行任何操作。因为 B 和 A 使用相同的电话号码(与欺诈用户共享属性)。(1 层)。
- 用户 D 不是(欺诈者)。但是 D 与 B 使用相同的 Deviceid 并且 B 与欺诈用户共享属性。然后也阻止用户 D。在这种情况下,有 2 层。D 与 B 比较,B 与 A 比较。在此示例中,有 3 个用户。如果我有 100 个用户!查询会很长,有 99 层。
*注意:我不想更新 B 和 D 成为欺诈者。它们只是与欺诈用户共享的属性。因此,如果我决定将用户 A 更改为不是欺诈者。与其他用户没有任何变化。
解决方案
老实说问题很抽象,所以需要做一些假设如下,
- 假设数据库服务器为 MySQL
- 考虑到这一点,欺诈者账户的数据已经存在于表中。
- 字段的重复
MobileNo OR DeviceId OR EmailId OR IPAddress
决定了fradster。
所以回答你的问题,
- 在
AfterUpdate
您的table
. - 在该触发器
Fetch
和行中,那些具有OR OR ORUpdate
重复值的行。MobileNo
DeviceId
EmailId
IPAddress
仅在 ,NEW.IsFraudsterStatus = 1
时触发更新查询
if (NEW.IsFraudsterStatus = 1) THEN
UPDATE tableUser
SET IsFraudsterStatus = 1
WHERE
(tableUser.MobileNo = NEW.MobileNo
OR
tableUser.DeviceId = NEW.DeviceId
OR
tableUser.EmailId = NEW.EmailId
OR
tableUser.IPAddress = NEW.IPAddress)
AND
IsFraudsterStatus = 0;
ELSE
UPDATE tableUser
SET IsFraudsterStatus = 0
WHERE
(tableUser.MobileNo = NEW.MobileNo
OR
tableUser.DeviceId = NEW.DeviceId
OR
tableUser.EmailId = NEW.EmailId
OR
tableUser.IPAddress = NEW.IPAddress)
AND
IsFraudsterStatus = 1;
END IF;
在上面的查询中,您可以根据conditions
需要添加任意数量的内容,请注意,OR
如果任何条件为真,则该帐户是欺诈者。
- 一旦上述查询被触发,它将重复更新所有此类帐户,例如Fraudster。请注意
AND
ed 条件,它将防止无休止的递归触发。
除此之外,我会推荐一个BeforeInsert
触发器,它将验证和限制创建欺诈者帐户。
推荐阅读
- arrays - linux内核模块的数组中逐行读取文件
- spring - Spring Security Oauth2 + OIDC (OpenID Connect) OP 使用多个 RP 发起/反向通道注销
- c - C中带有2个分隔符的Strtok
- permutation - 为什么使用 set.seed() 不能得到恒定的结果?
- java - Java Maven 项目找不到依赖项
- r - 2-Way Anova Loop & 导出到 CSV 或 Excel 表
- spring-boot - OkHttp 调用超时被忽略
- loops - 程序集:如何返回指针?
- reactjs - @msal-browser loginPopup() 方法只获取不记名令牌
- google-home - google home 设备控制页面不可用