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

时间:2013-01-28 23:15:26

标签: 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_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',因为它已被调用此存储函数/触发器的语句使用。”我在这做错了什么?

1 个答案:

答案 0 :(得分:2)

运行语句时,请尝试不使用“FROM id_generator”,基本上只需:

SELECT f_id_test()

您的函数已经从id_generator表中提取数据(因此FROM子句不会改变它),并且错误是说您的SELECT语句正在使用该函数尝试更新的同一个表。