我有一个表,用于存储包括SSN在内的用户信息。现在,我需要编写一个查询来防止或检查是否有人开始向表中插入一些新记录,如果新记录的SSN与当前系统中的某人相同,则返回false ,或拒绝插入。
我知道如何在表中计算相同的SSN,但这是插入检查之前的一种,我应该在前端级别执行此操作吗?
更新:所以我想一遍,我一直在问,我该如何实际允许插入,并且每次我们执行插入操作时,都会检查一下,如果新插入的对象具有重复的SSN,且其中之一我们当前的客户,那么将会有一个新列“ DuplicatedSSN” = True。我该如何实现?
答案 0 :(得分:0)
亚历克斯在这里是正确的。 UNIQUE
约束将防止数据库中的重复条目。为了添加约束,您将需要确保表中不存在任何重复项。要添加约束,您可以使用类似以下的内容
ALTER TABLE table1 ADD UNIQUE (SSN)
如果您只想基于现有信息设置字段,我认为您可以在插入内容中使用case语句。
INSERT INTO table 1 (SSN, DuplicatedSSN) VALUES (999-99-9999, CASE WHEN EXISTS (SELECT ID FROM orders where SSN = '999-99-9999') THEN 1 ELSE 0 END)
答案 1 :(得分:0)
步骤1(DB):向表中添加UNIQUE约束以防止重复。
第2步(程序):对值进行预检查,然后从那里运行代码。
伪代码如下:
SELECT COUNT(*) LINES FROM MAIN_TABLE WHERE SSN = $attempted_entry
if(LINES <= 0){
--insert into MAIN_TABLE
} else {
--insert into POSSIBLE_FRAUD_CHECKS
}
答案 2 :(得分:0)
我希望您正在加密SSN信息,但是这是您检查是否已经存在重复项的方法。有两种方法。
首先,您应该使SSN的数据库列具有“ UNIQUE”值。这样可以防止重复。
对于您的查询,您应该执行以下操作:
INSERT IGNORE INTO table (column1, column2, etc, ssn_column)
VALUES (column1_value, column2_value, etc_value, ssn_value)
ON DUPLICATE KEY UPDATE ssn_column=ssn_column
基本上说... 1)将值插入表 2)但是如果ssn已经存在... 3)将现有的ssn更新为= ssn(即不执行任何操作)
这只会在尚不存在的情况下插入新列,但SSN列必须是UNIQUE列!
您也可以...
SELECT id FROM table WHERE ssn = ssn_value
如果这返回一行...您知道它存在...
如果不存在...
INSERT INTO table (columns) VALUES (values)