插入到同一个表中避免重复

时间:2017-03-29 05:04:05

标签: php mysql

Table enrollments
-----------------

id      classId     userId
--      -------     ------
1         1           1
--      -------     ------

此统计信息后:想要在再次插入{classId=1userId=1}

时拒绝插入

如果用户插入相同的classIduserId,则应拒绝插入。 我已经尝试过了:

INSERT INTO enrollments(classId, userId) 
    VALUES('{$classId}', '{$userId}')
    WHERE
    NOT EXISTS(SELECT NULL FROM 
                enrollments WHERE 
                    classId='{$classId}' AND userId='{$userId}')

7 个答案:

答案 0 :(得分:4)

添加classIduserId合并为唯一,因此如果先前存在于表格中,则无法插入相同的classIduserId

ALTER TABLE enrollments
ADD CONSTRAINT UC_Person UNIQUE (classId,userId);

答案 1 :(得分:1)

而不是代码

INSERT INTO enrollments(classId, userId) 
    VALUES('{$classId}', '{$userId}')
    WHERE
    NOT EXISTS(SELECT NULL FROM 
                enrollments WHERE 
                    classId='{$classId}' AND userId='{$userId}')

替换为

INSERT INTO enrollments(classId, userId) 
    SELECT '{$classId}', '{$userId}'
    WHERE
    NOT EXISTS(SELECT * FROM 
                enrollments WHERE 
                    classId='{$classId}' AND userId='{$userId}')

示例:您可以尝试使用演示数据

INSERT INTO enrollments(classId, userId) 
    SELECT 2, 2
    WHERE
    NOT EXISTS(SELECT * FROM 
                enrollments WHERE 
                    classId=2 AND userId=2)

答案 2 :(得分:0)

使用INSERT IGNORE而不是INSERT

INSERT IGNORE INTO person_tbl (classId, userId)
VALUES( '{$classId}', '{$userId}')

注意:重复插入时,此语句不会生成错误。

答案 3 :(得分:-1)

删除id并将classId和userId设置为primary。 然后只需进行正常插入,如果它们存在则不再插入。

答案 4 :(得分:-1)

如果你想避免重复,那么制作这些文件(classId,userId)UNIQUE键或者你希望这些文件不为空,那么你可以将这些字段作为PRIMIRY键。

答案 5 :(得分:-1)

将id设为primary,并将id和classid组合为唯一。它将阻止从sql端插入重复。

答案 6 :(得分:-1)

create table enrollments
(
classId int,
userId int
)

ALTER TABLE enrollments
ADD CONSTRAINT UC_Person UNIQUE (classId,userId);

INSERT INTO enrollments(classId, userId) 
    VALUES(1, 1);

where子句不能在insert语句中输入,请尝试此代码。上面的表结构将不允许插入重复的条目