我是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',因为它已被调用此存储函数/触发器的语句使用。”我在这做错了什么?
答案 0 :(得分:2)
运行语句时,请尝试不使用“FROM id_generator”,基本上只需:
SELECT f_id_test()
您的函数已经从id_generator表中提取数据(因此FROM子句不会改变它),并且错误是说您的SELECT语句正在使用该函数尝试更新的同一个表。