如何使用 SQL 创建欺诈检测?
how to create fraud detection with SQL?
我有一个场景:
- 用户A是(骗子)
- 用户B不是(骗子)。但是,系统不会允许用户 B 做任何操作。因为 B 和 A 使用相同的 Phone 号码(与欺诈用户共享属性)。(1 层)。
- 用户D不是(骗子)。但是 D 使用与 B 相同的 Deviceid,B 与欺诈用户共享属性。然后也阻止用户 D。在这种情况下,有 2 层。 D 与 B 比较,B 与 A 比较。在此示例中有 3 个用户。如果我有 100 个用户!查询会很长,有 99 层。
*注意:我不想更新B和D成为骗子。它们只是与欺诈用户共享的属性。因此,如果我决定将用户 A 更改为不是欺诈者。与其他用户没有变化。
老实说问题很抽象,所以需要做出如下几个假设,
- 假设数据库服务器为MySQL
- 考虑到这一点,欺诈者帐户的数据已经存在于 table。
- 字段重复
MobileNo OR DeviceId OR EmailId OR IPAddress
决定fradster
所以为了回答你的问题,
- 在您的
table
上创建一个 AfterUpdate
触发器。
- 在那个触发器
Fetch
和 Update
行中,那些具有重复值的 MobileNo
或 DeviceId
OR EmailId
OR 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
触发器,它将验证和限制欺诈者帐户的创建。
我有一个场景:
- 用户A是(骗子)
- 用户B不是(骗子)。但是,系统不会允许用户 B 做任何操作。因为 B 和 A 使用相同的 Phone 号码(与欺诈用户共享属性)。(1 层)。
- 用户D不是(骗子)。但是 D 使用与 B 相同的 Deviceid,B 与欺诈用户共享属性。然后也阻止用户 D。在这种情况下,有 2 层。 D 与 B 比较,B 与 A 比较。在此示例中有 3 个用户。如果我有 100 个用户!查询会很长,有 99 层。
*注意:我不想更新B和D成为骗子。它们只是与欺诈用户共享的属性。因此,如果我决定将用户 A 更改为不是欺诈者。与其他用户没有变化。
老实说问题很抽象,所以需要做出如下几个假设,
- 假设数据库服务器为MySQL
- 考虑到这一点,欺诈者帐户的数据已经存在于 table。
- 字段重复
MobileNo OR DeviceId OR EmailId OR IPAddress
决定fradster
所以为了回答你的问题,
- 在您的
table
上创建一个AfterUpdate
触发器。 - 在那个触发器
Fetch
和Update
行中,那些具有重复值的MobileNo
或DeviceId
OREmailId
ORIPAddress
.
仅当 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
触发器,它将验证和限制欺诈者帐户的创建。