mysql - 在没有索引值跟unique 下的if esle 应用错误
PHPz
PHPz 2017-04-17 12:00:49
[MySQL讨论组]

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

怎么查都觉得上面是对的 = =

PHPz
PHPz

学习是最好的投资!

全部回复(1)
阿神

更新:如果不写存储过程,是不能用到存储过程中的流程控制语句IF..THEN..END IF,而只能用到流程控制函数if()。

这样的逻辑要么在后端查一次写一次,要么在存储过程/函数里面查一次写一次。
为何不加索引呢。这样的逻辑都避免不了查一次表写一次表,查表的时候还只能扫全表。


因为……少了THEN……

mysqlDELIMITER $$

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 $$
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号