MySQL为唯一id生成器调用存储函数
我是MySQL函数领域的新手,但我似乎无法让它正常工作。 基本上,每次我从这个特定的表运行SELECT查询时,都应该显示下一个递增的值 这是我的桌子:MySQL为唯一id生成器调用存储函数,mysql,Mysql,我是MySQL函数领域的新手,但我似乎无法让它正常工作。 基本上,每次我从这个特定的表运行SELECT查询时,都应该显示下一个递增的值 这是我的桌子: CREATE TABLE testdb.id_generator( invoice_id INT(11) NOT NULL, PRIMARY KEY (invoice_id) ) ENGINE = INNODB AVG_ROW_LENGTH = 16384 CHARACTER SET latin1 COLLATE latin1_swedi
CREATE TABLE testdb.id_generator(
invoice_id INT(11) NOT NULL,
PRIMARY KEY (invoice_id)
)
ENGINE = INNODB
AVG_ROW_LENGTH = 16384
CHARACTER SET latin1
COLLATE latin1_swedish_ci;
以下是函数:
CREATE
FUNCTION testdb.f_id_test()
RETURNS INT(11)
BEGIN
DECLARE v_val INT;
DECLARE c_select CURSOR FOR SELECT invoice_id
FROM
id_generator;
OPEN c_select;
FETCH c_select INTO v_val;
CLOSE c_select;
UPDATE id_generator
SET
invoice_id = invoice_id + 1;
RETURN v_val;
END
每当我尝试运行查询时
SELECT f_id_test()
FROM
id_generator
它说“无法更新存储函数/触发器中的表'id_generator',因为调用此存储函数/触发器的语句已经使用了它。”我在这里做错了什么 运行语句时,请在不使用“FROM id_generator”的情况下进行尝试,基本上只是:
SELECT f_id_test()
您的函数已经在从id_生成器表中提取数据(因此from子句不会对其进行更改),错误是SELECT语句使用的表与函数尝试更新的表相同。就是这样做的!这很简单。