只有else条件在插入或更新期间使用存储过程在mysql中执行

jei2mxaa  于 2021-06-20  发布在  Mysql
关注(0)|答案(8)|浏览(259)

这是我的表模式 `MariaDB [a1]> show create table bad_numbers_final; +

vuktfyat

vuktfyat3#

--- | Table | Create Table +

3pmvbmvn

3pmvbmvn5#

---现在我想插入一个phone如果表中存在相同的数字,则只需增加phone_count否则,在表中添加新行。所以我用stored procedure写在上面BEGIN IF ('phone'='10083121224') THEN UPDATE bad_numbers_final SET phone_count= phone_count+10 WHERE 'phone'='10083121224' ; ELSE INSERT INTO bad_numbers_final (phone,phone_count) VALUES ('10083121224',10);END IF;END但是当我执行这个过程时,它总是在表中插入一个新行来代替增加phone_count因为phone我插入的值已经在表中了,所以它只需要增加phone_count` 但它没有这样做。请给我一些建议。提前谢谢。

tpgth1q7

tpgth1q76#

--- | bad_numbers_final | CREATE TABLE bad_numbers_final ( id int(11) NOT NULL AUTO_INCREMENT, phone varchar(255) NOT NULL, phone_count varchar(255) DEFAULT NULL, PRIMARY KEY (id,phone) ) ENGINE=InnoDB AUTO_INCREMENT=126956 DEFAULT CHARSET=latin1 | +

dm7nw8vv

dm7nw8vv7#

'phone'='10083121224' 您正在比较两个不同的字符串。您应该比较phone='10083121224'。
也, phone_count 是一个 varchar(255) . 不,它应该是一个数字(int或其他什么),它没有意义 varchar 。您可以通过这种方式将“10”连接为一个字符串。所以如果你之前有“0”,之后有“010”,然后是“01010”,依此类推。
然后你可以这样做:

UPDATE bad_numbers_final SET phone_count= phone_count+10 WHERE phone='10083121224' ;

这里不是“10083121224”,我猜您需要为过程放置一个参数。也可能你想改变电话号码的数据类型以及

wsxa1bj1

wsxa1bj18#

我对自己的问题有了一个答案,也就是说,我对自己的生活做了一些改变 if 条件,即。 BEGIN IF (select phone from bad_numbers_final WHERE phone='10083121224') THEN UPDATE bad_numbers_final SET phone_count= phone_count+10 WHERE phone='10083121224'; ELSE INSERT INTO bad_numbers_final (phone,phone_count) VALUES ('10083121224',10); END IF; END 问题是我的 if 条件不起作用,因为它不是从哪里来的领域 phone 马上就要插入一个了 sub query 内部 if 条件和这里它是工作良好,感谢您的所有建议。

相关问题