最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL使用Sequence創(chuàng)建唯一主鍵的實現(xiàn)示例

 更新時間:2024年05月26日 11:03:41   作者:Holy_Java  
Sequence提供了更多的靈活性,本文主要介紹了MySQL使用Sequence創(chuàng)建唯一主鍵的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

第一章、快速了解Sequence

1.1)是什么?為什么使用

數(shù)據(jù)庫中的Sequence(序列)是一種用于生成唯一數(shù)字值的對象。在關(guān)系型數(shù)據(jù)庫中,Sequence通常用于生成主鍵值或其他需要唯一標識的字段值。

Sequence通常具有以下特點:

①生成連續(xù)的數(shù)字值,每次調(diào)用會遞增或遞減。
②可以定義起始值、增量值、最小值、最大值等屬性。
③可以被多個會話共享,確保生成的值是全局唯一的。
④通常用于生成主鍵值,確保數(shù)據(jù)庫表中的每條記錄都有唯一標識。
不同的數(shù)據(jù)庫系統(tǒng)(如Oracle、MySQL、PostgreSQL等)有不同的實現(xiàn)方式和語法規(guī)則。

1.2)Sequence和自增主鍵的區(qū)別

生成方式:
Sequence:Sequence是數(shù)據(jù)庫中的一個對象,通過定義序列可以生成一系列唯一的數(shù)字值,可以手動控制序列的起始值、增量值、最小值、最大值等屬性。
自增主鍵:自增主鍵是一種特殊的主鍵約束,通常與整數(shù)類型的字段一起使用。當插入新記錄時,數(shù)據(jù)庫會自動為該字段賦予一個唯一的遞增值,而無需手動管理。

跨會話性:
Sequence:Sequence對象可以被多個會話共享,確保生成的值在整個數(shù)據(jù)庫中是唯一的,適用于需要全局唯一標識的場景。
自增主鍵:自增主鍵是針對單個表的,每個表都有自己的自增主鍵,生成的值只在該表中唯一,不跨表。

靈活性:
Sequence:Sequence提供了更多的靈活性,可以定義不同的序列屬性,如循環(huán)、緩存等,適用于需要定制化生成規(guī)則的情況。
自增主鍵:自增主鍵是一種簡單的自動生成方式,適用于簡單的唯一標識生成需求。

第二章、在MySQL中使用Sequence

2.1)創(chuàng)建mysql_sequence表

2.1.1)創(chuàng)建表

CREATE TABLE `mysql_sequence` (
  `seq_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列名稱',
  `seq_desc` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列描述',
  `seq_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '序列號',
  `max_val` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
  PRIMARY KEY (`seq_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

2.1.2)插入數(shù)據(jù)

數(shù)據(jù)如下:

在這里插入圖片描述

2.2)創(chuàng)建函數(shù)

2.2.1)創(chuàng)建nextval函數(shù)

DELIMITER $$
CREATE  FUNCTION `nextval`(v_seq_name VARCHAR(50)) RETURNS INT
DETERMINISTIC
BEGIN
    UPDATE mysql_sequence SET seq_no = seq_no + 1 WHERE seq_name = v_seq_name AND seq_no <= max_val;
    UPDATE mysql_sequence SET seq_no = 1 WHERE seq_name = v_seq_name AND seq_no > max_val;
    RETURN currval(v_seq_name);
END$$
DELIMITER ;

2.2.2)創(chuàng)建currval函數(shù)

DELIMITER $$
CREATE  FUNCTION currval(v_seq_name VARCHAR(50)) RETURNS INT
BEGIN
    DECLARE seq_val INT;
    SET seq_val = 0;
    SELECT seq_no INTO seq_val FROM mysql_sequence WHERE seq_name = v_seq_name;
    RETURN seq_val;
END$$
DELIMITER ;

2.2.3)創(chuàng)建timeseq函數(shù)

DELIMITER $$
CREATE  FUNCTION `timeseq`(v_seq_name VARCHAR(50), v_lpad INT) RETURNS VARCHAR(50) CHARSET utf8mb4 COLLATE utf8mb4_bin
BEGIN
    DECLARE seq_val VARCHAR(50);
    SELECT CONCAT(DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y%m%d'), LPAD(nextval(v_seq_name), v_lpad, '0')) INTO seq_val FROM dual;
    RETURN seq_val;
END$$
DELIMITER ;

2.3)查詢語句與結(jié)果

輸入項為表格的seq_name字段值stud_seq和位數(shù)4

SELECT CONCAT(DATE_FORMAT(CURRENT_TIMESTAMP(), '%Y%m%d'), LPAD(nextval('stud_seq'), 4, '0'))  FROM dual;

返回結(jié)果為時間戳20240428 拼上 4位數(shù)的 0002 這里的0002是數(shù)據(jù)表seq——no字段1自增后的結(jié)果

在這里插入圖片描述

第三章、SpringDataJpa中調(diào)用

3.1)實體類

@Data
@Entity
@Table(name = "mysql_sequence")
public class MysqlSequence {
    @Id
    private String SeqName;
    private String SeqDesc;
    private String SeqNo;
}

3.2)repository接口

import com.icbc.sh.dto.MysqlSimpleSequence;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.jpa.repository.Modifying;

public interface SequenceRepo extends JpaRepository<MysqlSimpleSequence, String> {

    // 獲取下一個序列值
    @Query(value = "select nextval(:seqName) from dual", nativeQuery = true)
    int nextval(@Param("seqName") String seqName);

    // 獲取帶填充的時間序列下一個值
    @Query(value = "select timeSeq(:seqName, :lpad) from dual", nativeQuery = true)
    String timeSeqNextVal(@Param("seqName") String seqName, @Param("lpad") int lpad);

    // 重置序列
    @Transactional
    @Modifying
    @Query(value = "update sequence set val = 1 where reset_flag = ?1", nativeQuery = true)
    int resetSeq(String resetFlag);
}

3.3)controller層測試

@RestController
@RequestMapping("/test")
public class TestController {

    @Autowired
    private SequenceRepo sequenceRepo;

    @GetMapping("/testSequence")
    public void testSequence(){
        int sequence = sequenceRepo.nextval("stud_seq");
        log.info("sequence :" + sequence);
    }
}

 到此這篇關(guān)于MySQL使用Sequence創(chuàng)建唯一主鍵的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL Sequence創(chuàng)建唯一主鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用SQL實現(xiàn)小計,合計以及排序

    使用SQL實現(xiàn)小計,合計以及排序

    本篇文章是對SQL實現(xiàn)小計,合計以及排序進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL中數(shù)據(jù)類型的驗證

    MySQL中數(shù)據(jù)類型的驗證

    這篇文章主要介紹了MySQL中數(shù)據(jù)類型的驗證 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • SQL實現(xiàn)Excel的10個常用功能的示例詳解

    SQL實現(xiàn)Excel的10個常用功能的示例詳解

    SQL,數(shù)據(jù)分析崗的必備技能,你可以不懂Python,R,不懂可視化,不懂機器學習。但SQL,你必須懂。本文為大家總結(jié)了SQL實現(xiàn)Excel的10個常用功能的示例代碼,感興趣的可以了解一下
    2022-07-07
  • 如何查詢MySQL中某個表的索引信息

    如何查詢MySQL中某個表的索引信息

    MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),索引是數(shù)據(jù)庫中非常重要的組成部分,可以幫助提高查詢效率,這篇文章主要給大家介紹了關(guān)于如何查詢MySQL中某個表的索引信息,需要的朋友可以參考下
    2024-08-08
  • 關(guān)于django連接mysql數(shù)據(jù)庫并進行數(shù)據(jù)庫的創(chuàng)建的問題

    關(guān)于django連接mysql數(shù)據(jù)庫并進行數(shù)據(jù)庫的創(chuàng)建的問題

    這篇文章主要介紹了django連接mysql數(shù)據(jù)庫并進行數(shù)據(jù)庫的創(chuàng)建,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Mysql查看數(shù)據(jù)庫時區(qū)并設(shè)置時區(qū)的方法

    Mysql查看數(shù)據(jù)庫時區(qū)并設(shè)置時區(qū)的方法

    這篇文章主要介紹了Mysql查看數(shù)據(jù)庫時區(qū)并設(shè)置時區(qū)的方法,設(shè)置時區(qū)的方式可以通過mysql命令行模式下動態(tài)修改以及通過修改配置文件來修改時區(qū),需要的朋友可以參考下
    2024-02-02
  • MySQL語句之刪除指令deleted和truncate在使用中的異同詳解

    MySQL語句之刪除指令deleted和truncate在使用中的異同詳解

    這篇文章主要介紹了MySQL語句之刪除指令deleted和truncate在使用中的異同,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • MySQL筆記 —SQL運算符

    MySQL筆記 —SQL運算符

    這篇文章主要介紹了SQL運算符,在sql語言中常用的運算符有這幾種:算術(shù)運算符、賦值運算符、比較運算符、邏輯運算符,下面面基于記住運算符資料展開文章內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • 深入分析MySQL數(shù)據(jù)類型 DECIMAL

    深入分析MySQL數(shù)據(jù)類型 DECIMAL

    這篇文章主要介紹了MySQL數(shù)據(jù)類型 DECIMAL的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • MYSQL如何優(yōu)雅的刪除二進制日志binlog

    MYSQL如何優(yōu)雅的刪除二進制日志binlog

    MySQL 的二進制日志(binlog)是用于記錄所有修改數(shù)據(jù)庫的操作的文件,因為它會占用大量磁盤空間,所以本文我們來聊聊如何優(yōu)雅的刪除二進制日志binlog吧
    2025-05-05

最新評論

巨野县| 平顺县| 澎湖县| 建湖县| 罗源县| 延津县| 阜宁县| 巩留县| 通榆县| 红河县| 孟州市| 聂荣县| 无为县| 宁津县| 衡东县| 郯城县| 克什克腾旗| 元谋县| 庐江县| 鹤峰县| 施秉县| 东港市| 荥阳市| 屏边| 绥芬河市| 扶余县| 阜南县| 历史| 南川市| 睢宁县| 方城县| 江永县| 邛崃市| 惠州市| 广南县| 定结县| 绵阳市| 封丘县| 武川县| 鄂托克旗| 苗栗市|