【发布时间】:2013-12-27 15:24:26
【问题描述】:
我是 InnoDB 的新手,从事务开始。我已经 24 小时试图让它工作。 我正在创建一个交换站点,并且确实需要进行交易。先做一个Select,找一些数据,然后根据给出的结果进行一些更新和插入。
我不会发布完整的查询,因为阅读起来可能非常复杂,所以我创建了一个新查询来指出问题所在。
表日志
CREATE TABLE `log` (
`num_rows` int(10) unsigned NOT NULL,
`new_value` int(10) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
存储过程
DROP PROCEDURE IF EXISTS `test`//
CREATE PROCEDURE `test` (IN var1 BIGINT)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE result INT;
DECLARE num_rows INT;
DECLARE cur1 CURSOR FOR
SELECT @var1 := @var1 +1 AS result;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
START TRANSACTION;
OPEN cur1;
SELECT FOUND_ROWS() into num_rows;
INSERT INTO log (num_rows,new_value) VALUES (num_rows,var1);
read_loop:
LOOP
FETCH cur1 INTO result;
IF done = 1 THEN
LEAVE read_loop;
END IF;
END LOOP read_loop;
CLOSE cur1;
COMMIT;
END//
当我尝试时
CALL test(1);
我将 1 作为 var1 参数传递。所以在cur1中,应该增加值。然后用新值在日志中插入一个新行。看起来 := 分配不起作用。
其实我变了
SELECT @var1 := @var1 +1 AS result;
为此
SELECT var1 := var1 +1 AS result;
在 ":= var1 +1" 上得到一个错误
【问题讨论】:
标签: mysql variables pointers stored-procedures transactions