`

MySQL序列解决方案

 
阅读更多
MySQL自增长与Oracle序列的区别: 自增长只能用于表中的其中一个字段 自增长只能被分配给固定表的固定的某一字段,不能被多个表共用. 自增长会把一个未指定或NULL值的字段自动填上. 在mysql中添加序列,请看下面的实例: 在MYSQL里有这样一张表:
Java代码 复制代码
  1. CREATETABLEMovie(
  2. idINTNOTNULLAUTO_INCREMENT,
  3. nameVARCHAR(60)NOTNULL,
  4. releasedYEARNOTNULL,
  5. PRIMARYKEY(id)
  6. )ENGINE=InnoDB;
Java代码 复制代码
  1. INSERTINTOMovie(name,released)VALUES('Gladiator',2000);
  2. INSERTINTOMovie(id,name,released)VALUES(NULL,'TheBourneIdentity',1998);
在ORACLE是这样的:
Java代码 复制代码
  1. CREATETABLEMovie(
  2. idINTNOTNULL,
  3. nameVARCHAR2(60)NOTNULL,
  4. releasedINTNOTNULL,
  5. PRIMARYKEY(id)
  6. );
  7. CREATESEQUENCEMovieSeq;
Java代码 复制代码
  1. INSERTINTOMovie(id,name,released)VALUES(MovieSeq.NEXTVAL,'Gladiator',2000);
在oracle下为表添加一个触发器,就可以实现mysql自增长功能:
Java代码 复制代码
  1. CREATEORREPLACETRIGGERBRI_MOVIE_TRG
  2. BEFOREINSERTONMovie
  3. FOREACHROW
  4. BEGIN
  5. SELECTMovieSeq.NEXTVALINTO:new.idFROMDUAL;
  6. ENDBRI_MOVIE_TRG;
  7. .
  8. RUN;
这样,插件记录就可以成为MYSQL风格:
Java代码 复制代码
  1. INSERTINTOMovie(name,released)VALUES('TheLionKing',1994);
下面我们来看看如何在mysql数据里使用Oracle序列语法.NEXTVAL 和 .CURVAL. 我们假设在mysql中序列的语法是:
    NEXTVAL(’sequence’); CURRVAL(’sequence’); SETVAL(’sequence’,value);
下面就是CURRRVAL的实现方案:
Java代码 复制代码
  1. DROPTABLEIFEXISTSsequence;
  2. CREATETABLEsequence(
  3. nameVARCHAR(50)NOTNULL,
  4. current_valueINTNOTNULL,
  5. incrementINTNOTNULLDEFAULT1,
  6. PRIMARYKEY(name)
  7. )ENGINE=InnoDB;
  8. INSERTINTOsequenceVALUES('MovieSeq',3,5);
  9. DROPFUNCTIONIFEXISTScurrval;
  10. DELIMITER$
  11. CREATEFUNCTIONcurrval(seq_nameVARCHAR(50))
  12. RETURNSINTEGER
  13. CONTAINSSQL
  14. BEGIN
  15. DECLAREvalueINTEGER;
  16. SETvalue=0;
  17. SELECTcurrent_valueINTOvalue
  18. FROMsequence
  19. WHEREname=seq_name;
  20. RETURNvalue;
  21. END$
  22. DELIMITER;
测试一下结果:
Java代码 复制代码
  1. mysql>SELECTcurrval('MovieSeq');
  2. +---------------------+
  3. |currval('MovieSeq')|
  4. +---------------------+
  5. |3|
  6. +---------------------+
  7. 1rowinset(0.00sec)
  8. mysql>SELECTcurrval('x');
  9. +--------------+
  10. |currval('x')|
  11. +--------------+
  12. |0|
  13. +--------------+
  14. 1rowinset,1warning(0.00sec)
  15. mysql>showwarnings;
  16. +---------+------+------------------+
  17. |Level|Code|Message|
  18. +---------+------+------------------+
  19. |Warning|1329|NodatatoFETCH|
  20. +---------+------+------------------+
  21. 1rowinset(0.00sec)
nextval
Java代码 复制代码
  1. DROPFUNCTIONIFEXISTSnextval;
  2. DELIMITER$
  3. CREATEFUNCTIONnextval(seq_nameVARCHAR(50))
  4. RETURNSINTEGER
  5. CONTAINSSQL
  6. BEGIN
  7. UPDATEsequence
  8. SETcurrent_value=current_value+increment
  9. WHEREname=seq_name;
  10. RETURNcurrval(seq_name);
  11. END$
  12. DELIMITER;
Java代码 复制代码
  1. mysql>selectnextval('MovieSeq');
  2. +---------------------+
  3. |nextval('MovieSeq')|
  4. +---------------------+
  5. |15|
  6. +---------------------+
  7. 1rowinset(0.09sec)
  8. mysql>selectnextval('MovieSeq');
  9. +---------------------+
  10. |nextval('MovieSeq')|
  11. +---------------------+
  12. |20|
  13. +---------------------+
  14. 1rowinset(0.01sec)
  15. mysql>selectnextval('MovieSeq');
  16. +---------------------+
  17. |nextval('MovieSeq')|
  18. +---------------------+
  19. |25|
  20. +---------------------+
  21. 1rowinset(0.00sec)
setval
Java代码 复制代码
  1. DROPFUNCTIONIFEXISTSsetval;
  2. DELIMITER$
  3. CREATEFUNCTIONsetval(seq_nameVARCHAR(50),valueINTEGER)
  4. RETURNSINTEGER
  5. CONTAINSSQL
  6. BEGIN
  7. UPDATEsequence
  8. SETcurrent_value=value
  9. WHEREname=seq_name;
  10. RETURNcurrval(seq_name);
  11. END$
  12. DELIMITER;
Java代码 复制代码
  1. mysql>selectsetval('MovieSeq',150);
  2. +------------------------+
  3. |setval('MovieSeq',150)|
  4. +------------------------+
  5. |150|
  6. +------------------------+
  7. 1rowinset(0.06sec)
  8. mysql>selectcurval('MovieSeq');
  9. +---------------------+
  10. |currval('MovieSeq')|
  11. +---------------------+
  12. |150|
  13. +---------------------+
  14. 1rowinset(0.00sec)
  15. mysql>selectnextval('MovieSeq');
  16. +---------------------+
  17. |nextval('MovieSeq')|
  18. +---------------------+
  19. |155|
  20. +---------------------+
  21. 1rowinset(0.00sec)
分享到:
评论

相关推荐

    存储问题解决方案.doc

    4. **数据库存储**:根据数据类型和查询需求,可以选择关系型数据库(如MySQL、PostgreSQL等)、NoSQL数据库(如MongoDB、Cassandra等)或时间序列数据库(如InfluxDB、TimescaleDB等)。 5. **分布式存储**:对于...

    PHP和MySQL Web开发第4版pdf以及源码

    《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...

    PHP和MySQL WEB开发(第4版)

    2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets...

    基于 nodejs express mysql 开发的留言板 demo.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于C#试题库管理系统(MySQL).zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于Java Swing + MySQL的图书管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    C++ Qt 基于数据库Mysql学生信息管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于Flask + MySQL的在线请假微信小程序.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于Jsp+Servlet+MySQL的会员管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    MySql性能优化-通过使用XML将多次循环处理变为一次集合处理

    数据库批量操作有很多这样的应用场景,如批量通过选中的审请信息、批量插入采购单的采购清单信息等。一个公认的实事,即关系型数据库在结构化...本文将深入的分析各种解决方案,并重点介绍使用XML的方式批量更新操作。

    基于Java Swing + MySQL + JDBC 的图书管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于Java SpringBoot + mysql的在线图书展示商城。.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    Node、koa2、mysql 基于mpvue的网易严选商城.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于 jsp + servlet + mysql 三层架构实现的网上书店系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于MVC模式的简单购物车实验,JavaWeb作业。Servelet Mysql JSP .zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    koa+mysql+vue+iview 基于node前后端分离blog项目.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    RhymeSearch 疯狂押韵 - 基于Django + Mysql 的中文押韵词语搜索网站.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于 gin+gorm+redis+mysql 读写分离的电子商城.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    C++程序设计实践项目——学生信息管理系统,基于Qt+MySQL.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

    基于go、gorm、gin、mysql及layui构建的人力资源管理系统.zip

    自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 ...

Global site tag (gtag.js) - Google Analytics