14
回答
关于“MySQL 语句级避免重复插入等功能”
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

数据库:option_user


 jsp页面


 
我凌乱了。

 

我想要的功能是:用户(userid=1)选择optionid(1,2,3见上图),如果数据库里有(optionid---userid)就不插入,没有就插入;如果用户没有选择的optionid,数据库里有则删除;

 

麻烦了,望指点。。。

举报
上山打伞
发帖于4年前 14回/1K+阅
共有14个答案 最后回答: 4年前

如果表里只有这两列,建联合主键(userid,optionid)

如果数据库里有(optionid---userid)就不插入,没有就插入;

    用insert ignore into

    注意:如果表里还有其他唯一索引触发了冲突,但联合主键没有冲突,也会导致插入失败


如果用户没有选择的optionid,数据库里有则删除;

    delete from xxx where userid=xxx;


可以用触发器:

//1.如果数据库里有(optionid---userid)就不插入,没有就插入;

//其实这一功能只要设userid,optionid为主键即可(关系数据库中元组不能重复,而主键不能重复,只要主键不重复,元组不会重复)

CREATE  TRIGGER   ins1   

BEFORE  INSERT  ON option_user

NEW AS ne1

FOR EACH  ROW

WHEN (

             NOT EXISTS(

                                SELECT *

                                FROM option_user

                                WHERE ne1.userid=userid AND ne1.optionid

                                )

             )

BEGIN ATOMIC
            INSERT INTO option_user(userid,optionid)
            VALUES ( ne1.userid,ne1.optionid)

END

//2.如果用户没有选择的optionid,数据库里有则删除;

//我理解的1。如果optionid为空则删除所有对应如果用户没有选择的optionid,数据库里有则删除相应userid的内容;实现如下;

 CREATE TRIGGER  ins2

 BEFORE INSERT ON option_user

NEW AS ne2

FOR EACH ROW

WHEN(ne2.optionid IS NULL)

DELETE FROM option_user

WHERE userid=ne2.userid

//我理解的2。如果optionid为空则删除所有对应如果用户没有选择的optionid,则不插入;只需设userid,optionid为主键即可(实体完整性规定主键不能为空)

顶部