Mysql,SqlServer,Oracle主鍵自動增長的設置

參考文獻

http://blog.csdn.net/andyelvis/article/details/2446865

1、把主鍵定義為自動增長標識符類型

MySql

在mysql中,如果把表的主鍵設為auto_increment類型,數據庫就會自動為主鍵賦值。例如:

create table customers(id int auto_increment primary key not null, name varchar(15));
insert into customers(name) values("name1"),("name2");
select id from customers;

以上sql語句先創建了customers表,然后插入兩條記錄,在插入時僅僅設定了name字段的值。最后查詢表中id字段,查詢結果為:

由此可見,一旦把id設為auto_increment類型,mysql數據庫會自動按遞增的方式為主鍵賦值。

Sql Server

在MS SQLServer中,如果把表的主鍵設為identity類型,數據庫就會自動為主鍵賦值。例如:

create table customers(id int identity(1,1) primary key not null, name varchar(15));
insert into customers(name) values('name1'),('name2');
select id from customers;

注意:在sqlserver中字符串用單引號擴起來,而在mysql中可以使用雙引號。

查詢結果和mysql的一樣。

由此可見,一旦把id設為identity類型,MS SQLServer數據庫會自動按遞增的方式為主鍵賦值。identity包含兩個參數,第一個參數表示起始值,第二個參數表示增量。

PS:2012-7-13

以前經常會碰到這樣的問題,當我們刪除了一條自增長列為1的記錄以后,再次插入的記錄自增長列是2了。我們想在插入一條自增長列為1的記錄是做不到的。今天跟同事討論的時候發現可以通過設置SET IDENTITY_INSERT <table_name> ON;來取消自增長,等我們插入完數據以后在關閉這個功能。實驗如下:

復制代碼
use TESTDB2
--step1:創建表
create table customers(id int identity primary key not null,name varchar(15)
);--step2:執行插入操作
insert into customers(id,name) values(1,'name1');
--報錯:An explicit value for the identity column in table 'customers' can only be specified when a column list is used and IDENTITY_INSERT is ON.--step3:放開主鍵列的自增長
SET IDENTITY_INSERT customers ON;--step4:插入兩條記錄,主鍵分別為1和3。插入成功
insert into customers(id,name) values(1,'name1');
insert into customers(id,name) values(3,'name1');--step5:再次插入一個主鍵為2的記錄。插入成功
insert into customers(id,name) values(2,'name1');--step6:插入重復主鍵,
--報錯:Violation of PRIMARY KEY constraint 'PK__customer__3213E83F00551192'. Cannot insert duplicate key in object 'dbo.customers'.
insert into customers(id,name) values(3,'name1');--step7:關閉IDENTITY_INSERT
SET IDENTITY_INSERT customers OFF;
復制代碼

2、從序列中獲取自動增長的標識符

Oracle

在Oracle中,可以為每張表的主鍵創建一個單獨的序列,然后從這個序列中獲取自動增加的標識符,把它賦值給主鍵。例如一下語句創建了一個名為customer_id_seq的序列,這個序列的起始值為1,增量為2。

create sequence customer_id_seq increment by 2 start with 1

一旦定義了customer_id_seq序列,就可以訪問序列的curval和nextval屬性。

  • curval:返回序列的當前值
  • nextval:先增加序列的值,然后返回序列值

以下sql語句先創建了customers表,然后插入兩條記錄,在插入時設定了id和name字段的值,其中id字段的值來自于customer_id_seq序列。最后查詢customers表中的id字段。

create table customers(id int primary key not null, name varchar(15));
insert into customers values(customer_id_seq.nextval, 'name1');
insert into customers values(customer_id_seq.nextval, 'name2');
select id from customers;

如果在oracle中執行以上語句,查詢結果為:

通過觸發器自動添加id字段

從上述插入語句可以發現,如果每次都要插入customer_id_seq.nextval的值會非常累贅與麻煩,因此可以考慮使用觸發器來完成這一步工作。

創建觸發器trg_customers

create or replace
trigger trg_customers before insert on customers for each row 
begin 
select CUSTOMER_ID_SEQ.nextval into :new.id from dual; 
end;

插入一條記錄

insert into customers(name) values('test'); 

這是我們會發現這一條記錄被插入到數據庫中,并且id還是自增長的。

?

?本文轉自xwdreamer博客園博客,原文鏈接:http://www.cnblogs.com/xwdreamer/archive/2012/06/08/2542277.html,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284681.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284681.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284681.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Chapter 3 Phenomenon——19

His unfriendliness intimidated me. 他的不友好恐嚇到了我。 My words came out with less severity than Id intended. 我說出來的言辭比我打算的要不嚴厲一些。 我說出的話遠遠沒有達到我所想要的充滿火藥味的效果。 "You owe me an explanation," I reminded him…

Javascript 面向對象編程(一):封裝

Javascript是一種基于對象&#xff08;object-based&#xff09;的語言&#xff0c;你遇到的所有東西幾乎都是對象。但是&#xff0c;它又不是一種真正的面向對象編程&#xff08;OOP&#xff09;語言&#xff0c;因為它的語法中沒有class&#xff08;類&#xff09;。 那么&am…

【ArcGIS Pro微課1000例】0016:ArcGIS Pro 2.8浮雕效果地圖制圖案例教程

ArcGIS Pro制作地圖時可以制作出很多很炫的效果,比如地圖陰影、地圖暈渲效果、浮雕效果、三維效果等等。本實驗講解在ArcGIS Pro 2.8中制作浮雕效果地圖,效果如下所示: 【參考閱讀】:ArcGIS實驗教程——實驗四十四:ArcGIS地圖浮雕效果制作完整案例教程 1. 加載矢量數據 …

用正則實現多行文本合并,從而保存為csv文件

有如下文本&#xff0c;想實現每三行合并為一行&#xff0c;最終生成csv文件 分數 人數 累計人數 661及以上 23 23 660 3 26 659 5 31 658 5 36 657 9 45 656 10 55 655 4 59 654 6 65 653 15 80查找項&#xff1a; ^(.) ^(.) ^(.)替換項&#xff1a; $1,$2,$3替換結果&…

聊一聊 C# 后臺GC 到底是怎么回事?

一&#xff1a;背景 寫這一篇的目的主要是因為.NET領域內幾本關于闡述GC方面的書&#xff0c;都是純理論&#xff0c;所以懂得人自然懂&#xff0c;不懂得人也沒法親自驗證&#xff0c;這一篇我就用 windbg 源碼 讓大家眼見為實。二&#xff1a;為什么要引入后臺GC 1. 后臺GC到…

【BIM入門實戰】Revit中的墻體層次以及常見問題解答

一、Revit墻體的層次 1. Revit墻體的層次如圖 Revit繪制墻體時,要先選擇定位線,可以選核心層中心線,也可以選墻中心線,當墻體為對稱時,核心層中心線與墻中心線會重合。 2. 具體層次 1)結構[1]:必須在核心邊界內 2)襯底[2]:其他材質基礎的材料,如膠合板或石膏板 3…

Spring Boot 使用Redis

轉載自&#xff1a;http://www.cnblogs.com/ityouknow/p/5748830.html Redis支持更豐富的數據結構&#xff0c;例如hashes, lists, sets等&#xff0c;同時支持數據持久化。除此之外&#xff0c;Redis還提供一些類數據庫的特性&#xff0c;比如事務&#xff0c;HA&#xff0c;主…

工具鏈接

OmniGraffle Pro 7.0.2 Mac中文破解版 | 史蒂芬周的博客        http://www.sdifenzhou.com/omnigrafflepro702.html 轉載于:https://www.cnblogs.com/wfwenchao/p/6393097.html

FlashCache初體驗

FlashCache初體驗 注意&#xff1a; 測試用的是CentOS6.5 內核版本2.6.32-431.el6.x86_64 步驟&#xff1a; 上傳CentOS6.5做本地yum源&#xff0c;安裝以下包。 yum install gcc yum install *kernel* yum install perl 將flashcache master打包下載至測試機上&#xff0c;可以…

用python將指定目錄下的所有json文件合并成一個csv文件

#!/usr/bin/env python # -*- encoding: utf-8 -*-import sys import json import os import pandas as pd import csv""" 獲取文件名列表 """ def list_file_names(folder):exist_files os.listdir(folder)file_list []for f in exist_files:…

【系統設計】分布式鍵值數據庫

鍵值存儲 ( key-value store )&#xff0c;也稱為 K/V 存儲或鍵值數據庫&#xff0c;這是一種非關系型數據庫。每個值都有一個唯一的 key 關聯&#xff0c;也就是我們常說的 鍵值對。常見的鍵值存儲有 Redis, Amazon DynamoDB&#xff0c;Microsoft Azure Cosmos DB&#xff0c…

keras系列︱Application中五款已訓練模型、VGG16框架(Sequential式、Model式)解讀(二)...

引自&#xff1a;http://blog.csdn.net/sinat_26917383/article/details/72859145 中文文檔&#xff1a;http://keras-cn.readthedocs.io/en/latest/ 官方文檔&#xff1a;https://keras.io/ 文檔主要是以keras2.0。 . . Keras系列&#xff1a; 1、keras系列︱Sequential與Mo…

【BIM入門實戰】Revit建筑墻體:構造、包絡、疊層圖文詳解

本文主要講解Revit建筑墻體:構造、包絡、疊層。 一、基本墻 第一步: 選擇菜單欄的【建筑】選項卡中的【墻】下拉菜單→【屬性】面板中切換至基本墻→點擊屬性面板中的【編輯類型】,彈出如下墻體對話框。 第二步: 選擇【復制】按鈕→重新進行編輯名稱,命名為“外墻-1F-2…

win11 恢復win10開始菜單及任務欄

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "Start_ShowClassicMode"dword:00000001 "TaskbarSi"dword:00000000將上述代碼存為reg文件&#xff0c;雙擊導入注冊表。 任務欄…

CentOS安裝Tomcat

1. 下載Tomcat安裝包&#xff1a; Tomcat官網 解壓下載下來的tar.gz至任意目錄下&#xff0c;執行命令&#xff1a; Java代碼 tar -xzf apache-tomcat-7.0.56.tar.gz 解壓后如圖&#xff1a; 如果是在windows上&#xff0c;則直接解壓zip包到任意目錄&…

【BIM+GIS】ArcGIS Pro2.8如何打開Revit模型,BIM和GIS融合?

ArcGIS Pro2.8中,可以直接打開Revit模型(.rvt)項目文件,實現了從數據格式方面BIM與GIS的有機融合,具體操作如下所示: 1. Revit2018模型繪制 打開Revit2018軟件,選擇【建筑樣板】,打開標高1樓層平面,新建一個簡單的戶型:包括四面墻體、2個門和一扇窗戶,如下圖所示。…

Edge 開發者沙龍|一小時精通Edge擴展開發

點擊藍字關注我們編輯&#xff1a;Alan Wang排版&#xff1a;Rani Sun微軟 Reactor 為幫助廣開發者&#xff0c;技術愛好者&#xff0c;更好的學習 .NET Core, C#, Python&#xff0c;數據科學&#xff0c;機器學習&#xff0c;AI&#xff0c;區塊鏈, IoT 等技術&#xff0c;將…

tomcat 開啟遠程debug

1、linux服務器上tomcat配置startup.sh 文件末尾添加&#xff08;不換行&#xff09;&#xff1a;declare -x CATALINA_OPTS"-server -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,suspendn,address9876"2、eclipse配置&#xff1a;…

公歷還是很簡單的

1 import java.util.*;2 class CalendarTest3 {4 /*先輸出提示語句&#xff0c;并接受用戶輸入的年、月。5 根據用戶輸入的年&#xff0c;先判斷是否是閏年。6 根據用戶輸入的年份來判斷月的天數。7 用循環計算用戶輸入的年份距1900年1月1日的總天數。8 用…

【測繪程序設計】坐標反算神器V1.0(附C/C#/VB源程序)

【拓展閱讀】:【測繪程序設計】坐標正算神器V1.0(附C/C#/VB源程序) 一、坐標反算原理 ?坐標反算:已知兩點坐標,反求邊長和方位角,稱為坐標反算。 原理坐標系: 計算公式: 二、C#程序實現 1. 界面設計 2