mysql 判断字符串是否相等的存储过程

AlphaWu 2007-12-01 07:38:43
问题描述:
CREATE TABLE `c` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(200) NOT NULL,
`count` int(11) NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

判断某一条记录是否存在,如果存在,count=count+1,否则,插入一条新记录。

我的存储过程如下:

CREATE PROCEDURE ck(IN cate VARCHAR(200))
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count FROM `cc` WHERE `title`=cate;
SELECT count;
IF count<1 THEN
INSERT INTO `cc` (`title`) VALUES(cate);
ELSE
UPDATE `cc` SET `count`=`count`+1 WHERE `title`=cate;
END IF;
END

然后运行下面的语句:
call ck('我晕');

只能插入一次,更新一次,然后就不执行了,难道是这个条件不成立了么?WHERE `title`=cate
谢谢大家的回复。

call ck('1');
这样的语句也只能执行一次插入和一次更新。奇怪了。。。
...全文
2679 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
toddzst 2007-12-03
  • 打赏
  • 举报
回复
应该没问题的,就是语句不太规范.
懒得去死 2007-12-01
  • 打赏
  • 举报
回复

首先 ,AUTO_INCREMENT的最小值是1,你设置成零也没有用 。
还有 ,你 的终端 编码不对,所以导致这样的结果。
看我的例子:
CREATE TABLE `c` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(200) NOT NULL,
`count` int(11) NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`ck`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `ck`(IN cate VARCHAR(200))
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count FROM `c` WHERE `title`=cate;
SELECT count;
IF count <1 THEN
INSERT INTO `c` (`title`) VALUES(cate);
ELSE
UPDATE `c` SET `count`=`count`+1 WHERE `title`=cate;
END IF;
END$$

DELIMITER ;

第一次调用 :

set names gbk;
call ck('我晕');
select * from c;
query result(1 records)
id title count
1 我晕 1

第二次调用:

set names gbk;
call ck('我晕');
select * from c;

query result(1 records)
id title count
1 我晕 2


AlphaWu 2007-12-01
  • 打赏
  • 举报
回复
回复本帖给分。
讨论对mysql存储过程的用法。
AlphaWu 2007-12-01
  • 打赏
  • 举报
回复
貌似又都正常了。嘿嘿
AlphaWu 2007-12-01
  • 打赏
  • 举报
回复
创建表和存储过程的代码在2、3楼、一楼的不对。

现在这样执行call ck('1'); 是正常的了。
但是执行call ck('我晕'); 会出现警告,而且每次都是插入。
AlphaWu 2007-12-01
  • 打赏
  • 举报
回复
再更正一下:

CREATE PROCEDURE ck(IN cate VARCHAR(200))
BEGIN
DECLARE x INT;
SELECT COUNT(*) INTO x FROM `cc` WHERE `title`=cate;
SELECT x;
IF x <1 THEN
INSERT INTO `cc` (`title`) VALUES(cate);
ELSE
UPDATE `cc` SET `count`=`count`+1 WHERE `title`=cate;
END IF;
END
AlphaWu 2007-12-01
  • 打赏
  • 举报
回复
更正一下,表的名字是cc,

CREATE TABLE `cc` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(200) NOT NULL,
`count` int(11) NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧