MySQL为唯一id生成器调用存储函数

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

我是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_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语句使用的表与函数尝试更新的表相同。

就是这样做的!这很简单。