问题描述:
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');
这样的语句也只能执行一次插入和一次更新。奇怪了
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');
这样的语句也只能执行一次插入和一次更新。奇怪了
`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 ;
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
但是执行call ck('我晕'); 会出现警告,而且每次都是插入。
讨论对mysql存储过程的用法。
首先 ,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