oracle實現自增的方法和碰到的問題

来源:https://www.cnblogs.com/wfkfytmy/archive/2022/04/15/16147204.html
-Advertisement-
Play Games

1. 什麼是資料庫 資料庫是“按照數據結構來組織、存儲和管理數據的倉庫”。是一個長期存儲在電腦內的、有組織的、可共用的、統一管理的大量數據的集合。簡單的來說就像是一個大型的衣櫃,你所有春夏秋冬的衣服都被統一放在了一個衣櫃里,然後分類,分季節的有序擺放好。資料庫的優點重點在於體量足夠的大,一般的數據 ...


眾所周知,Oracle是沒有辦法像Mysql里用AUTO_INCREMENT實現自增的。

但是Oracle可以通過序列實現自增。

--以下是oracle 12c的方法

create sequence temp_seq
increment by 1
start with 1001;
--創建一個簡單的序列
create table temp(
id number default temp_seq.nextval primary key,
name varchar2(20)
);
--創建一個表 insert into temp(name) values('測試'); insert into temp(name) values('測試'); select * from temp;

但是這裡有一個小問題,就是如果已存在該id,插入會報錯,因為序列是一個跟表無關的對象。不會檢查id,當id存在時,序列不會繼續自動跳到下一個值。

如上圖,當表已存在行id = 1005時,序列增加到1005時會違反主鍵約束,那麼有沒有一種可能,可以讓這個序列跳到1006呢?

還得是觸發器啊。

create sequence test_seq
increment by 1
start with 1001;
--用觸發器獲取此序列的值

create table test( id number
default '0' primary key, name varchar2(20) ); --這裡預設值設為0是判斷使不使用序列
--當不使用序列時的插入是Insert into test (id,name) values('1234','測試');
--當使用序列時的插入是insert into test (name) values('測試');
create or replace trigger test_tri before insert on test
for each row declare v_val number;
     --定義v_val,當使用序列插入時,將序列值放到將變數中。 v_num number;
     --定義v_num,判斷插入時使不使用序列。 begin
if :new.id = 0 then
    --判斷,當id使用的是預設值0時,代表使用序列 v_val:
=test_seq.nextval; loop select count(id) into v_num from test where id = v_val;--查看test表的id列是否已存在跟序列相同的值,如果不存在,v_num = 0 。如果存在,v_num!=0; if v_num != 0 then v_val:=test_seq.nextval;--如果存在,則序列走一步。 end if; if v_num = 0 then exit;--如果不存在,則退出loop迴圈 end if; end loop; select v_val into :new.id from dual;--將序列值放進插入行,實現序列自增。 end if; end; /
--實現表自增功能觸發器

 如下圖所示

以上第五次使用insert into test(name) values('測試');進行插入時,因為表裡的id已存在1005了,所以觸發器會迴圈一次,讓序列走一下,變成1006;避免違反主鍵唯一約束。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 此次,iNeuOS工業互聯網操作系統升級主要針對三維(3D)模型線上編輯與應用、數據實時統計。用戶有現成的3D模型可以導入到平臺中,模型部件與數據點進行綁定,實時反饋狀態信息到3D模型中。數據實時統計主要後期應用到線上Excel報表中,快速開發和生成時表報、日報表、月報表和年報表等應用。 ...
  • 從編程開發的角度來簡單來說,CLR就相當於“執行/運行”我們所編寫程式的“環境/服務”。這就好比如我們組裝了一個賽車,我們的賽車需要依賴“跑道”作為一個環境,賽車才能進行飛馳。而這個“跑道”就類似於CLR。在Java平臺中程式員要向一臺電腦部署軟體時,要確保軟體運行,電腦上就要按照JVM(Java虛 ...
  • 本文介紹,如何使用Metalama庫對.NET項目添加自定義的代碼分析,即自定義的編譯時警告、錯誤 ...
  • 有沒有想過如果我們自己要設計一門編程語言,要做到什麼樣的標準才能符合在.Net平臺下運行的條件呢?.Net在官方描述過一段話,大體的意思變成白話是:只要你的語言在編譯後能夠轉換成CIL代碼,那麼你的語言就可以在.Net平臺下進行開發和運行。 CIL語言之所以能夠在.Net平臺下運行,實際上它是符合了 ...
  • 介紹指令集的指令格式、定址方式、指令類型,介紹了一些著名的指令集。 ...
  • 佈置的Linux作業裡面有個配置yum和安裝telnet和嘗試命令:telnet 127.0.0.1,並記錄結果,寫作業中間一直報錯,搞了五六個小時才完成。分享一下安裝telnet過程。 虛擬機VMware16 光碟 CentOS 7 阿裡鏡像:阿裡雲開源鏡像站資源目錄 下載DVD-2009.iso ...
  • bat文件是dos下的批處理文件。批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名為 .bat 或 .cmd。 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、Zabbix 簡介 Zabbix 可以用來監控各種網路參數,來保證伺服器和系統的安全運行。並且 Zabbix 還提供了靈活的通知機制,以此來讓系統管理員快速定位/解決存在的各種問題。是一個基於 Web 界面提供的分散式系統監控以及網路監控功能 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...