IF (SELECT count(user_id) FROM user_group where group_id != 1 and user_id=505) = 0
INSERT INTO user_group
(user_id
,group_id
) VALUES ('505','1766' );
else
update user_group SET user_id='505',group_id='1766' WHERE group_id !=1;
end IF
以上我拆开来试都可以执行,合在一起就不行
p.s. table 没有索引值,也没有uniqu 所以不能用replace 或 on DUPLICATE key update
怎么查都觉得上面是对的 = =
更新:如果不写存储过程,是不能用到存储过程中的流程控制语句IF..THEN..END IF,而只能用到流程控制函数if()。
这样的逻辑要么在后端查一次写一次,要么在存储过程/函数里面查一次写一次。
为何不加索引呢。这样的逻辑都避免不了查一次表写一次表,查表的时候还只能扫全表。
因为……少了THEN……
mysql
DELIMITER $$ CREATE PROCEDURE `new_procedure` () BEGIN IF EXISTS( SELECT 1 FROM user_group WHERE group_id != 1 AND user_id = '505' ) THEN INSERT INTO user_group (`user_id`,`group_id`) VALUES ('505','1766' ); ELSE UPDATE user_group SET user_id = '505', group_id = '1766' WHERE group_id !=1; END $$