问题描述:
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');
这样的语句也只能执行一次插入和一次更新。奇怪了

解决方案 »

  1.   

    更正一下,表的名字是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   ; 
      

  2.   

    再更正一下: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 
      

  3.   

    创建表和存储过程的代码在2、3楼、一楼的不对。现在这样执行call   ck('1'); 是正常的了。
    但是执行call   ck('我晕'); 会出现警告,而且每次都是插入。
      

  4.   

    回复本帖给分。
    讨论对mysql存储过程的用法。
      

  5.   


    首先 ,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