`

mysql增加sequence功能

阅读更多

-- Sequence 管理表
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
         name VARCHAR(50) NOT NULL,
         current_value INT NOT NULL,
         increment INT NOT NULL DEFAULT 1,
         PRIMARY KEY (name)
) ENGINE=InnoDB;
 
--
取当前值的函数
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
         RETURNS INTEGER
         LANGUAGE SQL
         DETERMINISTIC
         CONTAINS SQL
         SQL SECURITY DEFINER
         COMMENT ''
BEGIN
         DECLARE value INTEGER;
         SET value = 0;
         SELECT current_value INTO value
                   FROM sequence
                   WHERE name = seq_name;
         RETURN value;
END
$
DELIMITER ;
 
--
取下一个值的函数
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
         RETURNS INTEGER
         LANGUAGE SQL
         DETERMINISTIC
         CONTAINS SQL
         SQL SECURITY DEFINER
         COMMENT ''
BEGIN
         UPDATE sequence
                   SET current_value = current_value + increment
                   WHERE name = seq_name;
         RETURN currval(seq_name);
END
$
DELIMITER ;
 
--
更新当前值的函数
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
         RETURNS INTEGER
         LANGUAGE SQL
         DETERMINISTIC
         CONTAINS SQL
         SQL SECURITY DEFINER
         COMMENT ''
BEGIN
         UPDATE sequence
                   SET current_value = value
                   WHERE name = seq_name;
         RETURN currval(seq_name);
END
$
DELIMITER ;
 
/*
--
测试
INSERT INTO sequence VALUES ('TestSeq', 0, 1);
SELECT SETVAL('TestSeq', 10);
SELECT CURRVAL('TestSeq');
SELECT NEXTVAL('TestSeq');
*/

 

分享到:
评论

相关推荐

    mysql中实现sequence.pdf

    在MySQL中,`AUTO_INCREMENT`字段是一个常用的机制,用于在插入新记录时自动增加一个唯一的ID。当你在具有`AUTO_INCREMENT`属性的表中插入新记录时,MySQL会自动为该行生成一个新的ID,确保每个新插入的记录都有一个...

    java通过Mysql实现类似oracle序列功能序列.rar

    在MySQL中,定义一个存储过程如`GET_NEXT_SEQUENCE`,它会查询`sequence`表的最新`id`并增加1。 5. **Java调用存储过程**: - 使用`CallableStatement`对象,你可以调用MySQL的存储过程。设置参数和获取结果集,...

    mysql雪花算法生成唯一整型ID主键的实现方法

    这种方法的优点在于,它既保留了雪花算法的全局唯一性和有序性,又充分利用了MySQL的内置功能,无需依赖额外的分布式服务。但需要注意的是,这种方法在高并发场景下可能会面临锁竞争问题,因此在实际应用中需要根据...

    MySQL的PPT文档

    - **自动增长数据类型处理**:MySQL支持自动增长的数据类型,如`AUTO_INCREMENT`,而Oracle中则需要使用序列(sequence)来实现类似功能。 - **单引号处理**:MySQL中可以使用单引号来表示字符串,但在Oracle中使用单...

    mysql currval 和 nextval 函数的实现.txt

    本文将详细介绍如何在MySQL中实现类似`currval`和`nextval`的功能,这两个函数分别用于获取当前值和下一个值。 #### 关键概念解析 1. **currval**: 该函数返回序列的当前值。 2. **nextval**: 该函数将序列的当前值...

    MySQL实现类似Oracle序列的方案

    当然,为了适应不同的需求,还可以扩展这些函数,例如添加设置步长的函数,或者实现序列的循环功能。这需要根据实际业务场景进行调整和优化。 总结来说,虽然MySQL的`AUTO_INCREMENT`特性在某些情况下可能不足以...

    Python库 | django_mysql-3.7.1-py3-none-any.whl

    对于后端开发人员来说,`django_mysql`不仅简化了Django与MySQL的集成,还通过增加额外的功能,使得在项目中使用MySQL变得更加灵活和高效。使用这个库,开发者可以更好地利用MySQL的特性,同时保持Django的优雅和...

    MySQL生成Oracle序列参考案例

    本文档提供了一个详细的迁移案例,以及相关的SQL脚本,使得在MySQL中可以实现与Oracle序列相似的功能。 首先,文档介绍了一个名为`sequence`的表结构,这个表是模拟Oracle序列的核心组件。在这个表中,我们存储了...

    韩顺平j2ee-JDBC与MySQL学习笔记

    2. 将数据库驱动包(如MySQL的JDBC驱动)添加到项目的类路径中 为了演示JDBC的基本使用,我们可以通过一个简单的例子来了解。假设我们已经在Oracle数据库中创建了一个名为"user1"的表,包含id(主键,自增长)、...

    mysql_1.pdf

    - **添加新用户**: 需要在MySQL数据库的user表中插入新记录。例如: `CREATE USER 'briup'@'%' IDENTIFIED BY 'briup';`(允许任意主机连接) - **激活用户**: 执行 `FLUSH PRIVILEGES;` 来使用户权限生效。 - **设置...

    Oracle与MySQL的几点区别.docx

    ` 在 MySQL 中有效,但在 Oracle 中需要添加 GROUP BY 子句。 2. **自动增长数据类型的处理**: - MySQL 提供了一个 AUTO_INCREMENT 数据类型,用于自动为新插入的记录生成唯一的标识符。而在 Oracle 中,没有直接...

    MariaDB 新版本实力逆袭不仅仅是 MySQL 替代品

    而MariaDB则集成了更多的存储引擎,如Aria、SphinxSE、TokuDB、Cassandra、CONNECT、SEQUENCE及Spider,同时在服务器层面上做了大量改进,如引入多源复制和基于表的并行复制功能。 在兼容性方面,MariaDB与MySQL...

    Mysql全局ID生成方法

    在更新时,通过添加条件如`gid 来保证并发环境下的ID递增。如果更新影响的行数为0,说明ID已被其他进程占用,需要重试。这个过程可以通过循环和异常处理来实现,确保最终能够成功生成新的全局ID。 ```php ...

    专题23:Mysql 面试题(卷王专供+ 史上最全 + 2023面试必备)-V106-from-尼恩Java面试宝典.pdf

    - MySQL 5.6引入的功能,可以在索引查找阶段过滤掉更多行,减少不必要的访问。 ### 5. MySQL事务隔离级别 - **Repeatable Read (可重复读)**: 默认的隔离级别,保证同一事务内的多次读取返回相同的结果。 - **Read...

    Sequence-Databases:用于创建和存储蛋白质 DNA 序列数据库的存储库

    - 基因组学:在基因组项目中,序列数据库用于存储大规模的基因组序列,帮助研究人员发现基因功能和结构。 - 药物研发:在药物发现过程中,数据库中的序列信息可用于预测潜在的药物靶点和药物分子与靶点的相互作用...

    用mysql触发器自动更新memcache的实现代码

    在MySQL 5.1及以上版本中,引入了触发器功能,允许用户定义在插入、删除或更新数据表时自动执行的SQL语句。这种机制使得我们可以在数据变化时即时同步缓存中的数据,而无需手动处理。 Memcache是一种高性能的分布式...

    如何为oracle中的表增加自动增长列.pdf

    首先需要了解的是,Oracle数据库并不像MySQL中那样提供一个AUTO_INCREMENT的属性,而是通过序列(SEQUENCE)和触发器(TRIGGER)来实现类似的功能。序列生成一系列的数字,而触发器则在插入新记录时使用这些数字。 ...

    oracle数据库的功能

    5. **序列** (`CREATE SEQUENCE`):自动递增或递减的数字序列,常用于为主键生成唯一的标识符。 6. **索引** (`CREATE INDEX`):用于提高数据检索速度的数据库对象。通过创建索引,可以显著加快查询性能。 #### 二...

    mysql的增删改查总结面经.docx

    MySQL是世界上最流行的开源关系型数据库管理系统之一,其核心功能包括数据的增、删、改、查(CRUD)。本文将详细解析这些基本操作以及相关的数据库管理知识。 **增(Create)** - 插入数据:`INSERT INTO tab_name ...

    AliSQL数据库开源功能特性.pdf

    阿里云的AliSQL数据库是一个基于MySQL的开源分支,旨在提供更高效、稳定和安全的数据存储解决方案。自2016年10月正式开源以来,AliSQL已经在社区中获得了广泛的关注和支持,其设计理念是回馈开源社区,从社区中汲取...

Global site tag (gtag.js) - Google Analytics