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

深入Mysql,SqlServer,Oracle主鍵自動增長的設(shè)置詳解

 更新時間:2013年06月04日 10:28:47   作者:  
本篇文章是對Mysql,SqlServer,Oracle主鍵自動增長的設(shè)置進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
1、把主鍵定義為自動增長標(biāo)識符類型
MySql
在mysql中,如果把表的主鍵設(shè)為auto_increment類型,數(shù)據(jù)庫就會自動為主鍵賦值。例如:
復(fù)制代碼 代碼如下:

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語句先創(chuàng)建了customers表,然后插入兩條記錄,在插入時僅僅設(shè)定了name字段的值。最后查詢表中id字段,查詢結(jié)果為:

由此可見,一旦把id設(shè)為auto_increment類型,mysql數(shù)據(jù)庫會自動按遞增的方式為主鍵賦值。
Sql Server
在MS SQLServer中,如果把表的主鍵設(shè)為identity類型,數(shù)據(jù)庫就會自動為主鍵賦值。例如:

復(fù)制代碼 代碼如下:

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中字符串用單引號擴(kuò)起來,而在mysql中可以使用雙引號。
查詢結(jié)果和mysql的一樣。



由此可見,一旦把id設(shè)為identity類型,MS SQLServer數(shù)據(jù)庫會自動按遞增的方式為主鍵賦值。identity包含兩個參數(shù),第一個參數(shù)表示起始值,第二個參數(shù)表示增量。
PS:2013-6-4
以前經(jīng)常會碰到這樣的問題,當(dāng)我們刪除了一條自增長列為1的記錄以后,再次插入的記錄自增長列是2了。我們想在插入一條自增長列為1的記錄是做不到的。今天跟同事討論的時候發(fā)現(xiàn)可以通過設(shè)置SET IDENTITY_INSERT <table_name> ON;來取消自增長,等我們插入完數(shù)據(jù)以后在關(guān)閉這個功能。實(shí)驗(yàn)如下:

復(fù)制代碼 代碼如下:

use TESTDB2
--step1:創(chuàng)建表
create table customers(
    id int identity primary key not null,
    name varchar(15)
);
--step2:執(zhí)行插入操作
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:插入重復(fù)主鍵,
--報錯: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:關(guān)閉IDENTITY_INSERT
SET IDENTITY_INSERT customers OFF;

2、從序列中獲取自動增長的標(biāo)識符
Oracle
在Oracle中,可以為每張表的主鍵創(chuàng)建一個單獨(dú)的序列,然后從這個序列中獲取自動增加的標(biāo)識符,把它賦值給主鍵。例如一下語句創(chuàng)建了一個名為customer_id_seq的序列,這個序列的起始值為1,增量為2。
復(fù)制代碼 代碼如下:

create sequence customer_id_seq increment by 2 start with 1

一旦定義了customer_id_seq序列,就可以訪問序列的curval和nextval屬性。
•curval:返回序列的當(dāng)前值
•nextval:先增加序列的值,然后返回序列值
以下sql語句先創(chuàng)建了customers表,然后插入兩條記錄,在插入時設(shè)定了id和name字段的值,其中id字段的值來自于customer_id_seq序列。最后查詢customers表中的id字段。
復(fù)制代碼 代碼如下:

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中執(zhí)行以上語句,查詢結(jié)果為:



通過觸發(fā)器自動添加id字段
從上述插入語句可以發(fā)現(xiàn),如果每次都要插入customer_id_seq.nextval的值會非常累贅與麻煩,因此可以考慮使用觸發(fā)器來完成這一步工作。
創(chuàng)建觸發(fā)器trg_customers

復(fù)制代碼 代碼如下:

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;

插入一條記錄
復(fù)制代碼 代碼如下:

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

這是我們會發(fā)現(xiàn)這一條記錄被插入到數(shù)據(jù)庫中,并且id還是自增長的。

相關(guān)文章

  • MySql服務(wù)未知原因消失解決方法

    MySql服務(wù)未知原因消失解決方法

    這篇文章主要介紹了MySql服務(wù)未知原因消失解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 簡述MySQL InnoDB存儲引擎

    簡述MySQL InnoDB存儲引擎

    這篇文章主要介紹了MySQL InnoDB存儲引擎的相關(guān)資料,幫助大家更好的了解MySQL的存儲引擎,感興趣的朋友可以了解下
    2020-08-08
  • MySQL創(chuàng)建高性能索引的全步驟

    MySQL創(chuàng)建高性能索引的全步驟

    這篇文章主要給大家介紹了關(guān)于MySQL創(chuàng)建高性能索引的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • MySQL之初始化數(shù)據(jù)詳解

    MySQL之初始化數(shù)據(jù)詳解

    本文介紹了MySQL命令行的基本操作,包括列出數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫、使用數(shù)據(jù)庫、查看表、刪除數(shù)據(jù)庫、退出MySQL等,還詳細(xì)介紹了數(shù)據(jù)庫表的結(jié)構(gòu)和屬性,以及如何創(chuàng)建和初始化測試數(shù)據(jù)
    2025-01-01
  • mysql error:#1062 Duplicate entry ‘***′ for key 1問題解決方法

    mysql error:#1062 Duplicate entry ‘***′ for key 1問題解決方法

    今天公司的一個網(wǎng)站突然提示MySQL Error Duplicate entry '96624' for key 1錯誤,經(jīng)過分析這個問題是由于mysql表中的一個id自增長字段導(dǎo)致。
    2011-09-09
  • MySQL數(shù)據(jù)庫鎖機(jī)制原理解析

    MySQL數(shù)據(jù)庫鎖機(jī)制原理解析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫鎖機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • 詳解mysql建立索引的使用辦法及優(yōu)缺點(diǎn)分析

    詳解mysql建立索引的使用辦法及優(yōu)缺點(diǎn)分析

    索引是快速搜索的關(guān)鍵。MySQL索引的建立對于MySQL的高效運(yùn)行是很重要的。下面介紹mysql建立索引的優(yōu)缺點(diǎn)及常用使用方法。
    2016-07-07
  • MySQL?人臉向量歐幾里得距離相似查詢步驟梳理

    MySQL?人臉向量歐幾里得距離相似查詢步驟梳理

    這篇文章主要為大家介紹了MySQL?人臉向量歐幾里得距離相似查詢步驟梳理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • MySQL跨服務(wù)器數(shù)據(jù)映射的實(shí)現(xiàn)

    MySQL跨服務(wù)器數(shù)據(jù)映射的實(shí)現(xiàn)

    本文主要介紹了MySQL跨服務(wù)器數(shù)據(jù)映射的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mysql 批處理文件出錯后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法

    mysql 批處理文件出錯后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猰ysql 批處理文件出錯后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10

最新評論

汶川县| 拜城县| 江陵县| 鄄城县| 景东| 龙南县| 宜昌市| 灵武市| 广东省| 友谊县| 循化| 英吉沙县| 长子县| 伊川县| 宝兴县| 专栏| 临颍县| 咸宁市| 南召县| 邢台市| 五家渠市| 张家口市| 榆社县| 肃北| 博罗县| 茶陵县| 白银市| 图木舒克市| 永济市| 竹山县| 石台县| 青河县| 大埔县| 康定县| 清水县| 青铜峡市| 名山县| 嘉峪关市| 亚东县| 报价| 商河县|