作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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_generator 表中提取数据(因此 FROM 子句不会更改它),并且错误表明您的 SELECT 语句正在使用该函数尝试更新的同一个表。
关于MySQL调用存储函数来生成唯一ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14573031/
我是一名优秀的程序员,十分优秀!