资讯专栏INFORMATION COLUMN

mysql实现nextVal功能

sixgo / 3482人阅读

摘要:如果我们开启了我们就必须为我们的指定一个参数。在中创建函数时出现这种错误的解决方法

mysql实现nextVal功能

首先创建表:

CREATE TABLE `sys_sequence` (
   `NAME` varchar(50) NOT NULL,
   `CURRENT_VALUE` int(11) NOT NULL DEFAULT "0",
   `INCREMENT` int(11) NOT NULL DEFAULT "1",
   PRIMARY KEY (`NAME`)
 )

插入记录
INSERT INTO SYS_SEQUENCE(NAME,CURRENT_VALUE,INCREMENT) VALUES("TBL_FS", 1,1)

DELIMITER $$
DROP FUNCTION IF EXISTS `currval`$$
CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS INT(11)
BEGIN
DECLARE VALUE INTEGER;
SET VALUE=0;
SELECT current_value INTO VALUE
FROM sys_sequence 
WHERE NAME=seq_name;
RETURN VALUE;
END$$
DELIMITER ;

查询当前记录:
select currval("TBL_FS");
如果出现Error Code: 1449 The user specified as a definer ("root"@"%") does not exist 错误,则执行如下sql:
grant all privileges on . to root@"%" identified by "password";
flush privileges;

继续执行当前记录sql则成功
创建nextval函数

DELIMITER $$
DROP FUNCTION IF EXISTS `nextval`$$
 
CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name varchar(50)) RETURNS int(11)
BEGIN
UPDATE sys_sequence
SET CURRENT_VALUE = CURRENT_VALUE + INCREMENT
where name=seq_name;
return currval(seq_name);
END$$
DELIMITER ;

执行nextval函数
select nextval("tbl_fs")

创建函数过程中出现This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误

这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句

其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。

在MySQL中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76609.html

相关文章

  • mysql实现nextVal功能,即使用代理表实现其他表的主键自增长

    摘要:首先创建表插入记录执行函数查询记录如果出现错误,则执行如下继续执行当前记录则成功创建函数创建好了表之后如图字段为代理表名称,原来为,此处我修改了,为当前序号,为步长。 首先创建表:CREATE TABLE sys_sequence ( NAME varchar(50) NOT NULL, CURRENT_VALUE int(11) NOT NULL DEFAULT 0, INCR...

    ISherry 评论0 收藏0
  • 移动易开源APP组合套件更新——支持多种外部数据库,支持全文搜索

    摘要:移动易后台实现外部数据库连接要实现外置数据库,即上层开发人员不关心下层数据库的实现,在项目中需要针对不同数据库修改文件以及在项目中添加依赖包。本文主要介绍移动易后台如何实现同不同数据源的连接,数据源包括,。 1、移动易后台实现外部数据库连接 要实现外置数据库,即上层开发人员不关心下层数据库的实现,在Spring boot项目 中需要针对不同数据库修改application.proper...

    anyway 评论0 收藏0
  • PostgreSQL的实践一:数据类型(一)

    摘要:数据类型类型转换数值类型数值类型序列类型不同于的自增长,和都是序列的方式创建使用创建序列关联列表架构模式名称类型拥有者数据表数据表序列数行记录数据 数据类型 showImg(https://segmentfault.com/img/bVbi9mw?w=750&h=379);showImg(https://segmentfault.com/img/bVbi9mz?w=729&h=626)...

    高璐 评论0 收藏0
  • PostgreSQL之序列(Sequence)

    摘要:中的序列是一个数据库对象,本质上是一个自增器。因此,序列在其他同类型数据库软件中以值的形式存在。注意字段的默认值并不是强制使用的。用户仍然可以手动插入值,这样潜在地造成与未来的序列值冲突的风险。现在我们成功地执行一次序列删除来自 PostgreSQL 中的序列是一个数据库对象,本质上是一个自增器。因此,序列在其他同类型数据库软件中以 autoincrment 值的形式存在。在一张表需要...

    geekzhou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<