程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 深刻Mysql,SqlServer,Oracle主鍵主動增加的設置詳解

深刻Mysql,SqlServer,Oracle主鍵主動增加的設置詳解

編輯:MySQL綜合教程

深刻Mysql,SqlServer,Oracle主鍵主動增加的設置詳解。本站提示廣大學習愛好者:(深刻Mysql,SqlServer,Oracle主鍵主動增加的設置詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻Mysql,SqlServer,Oracle主鍵主動增加的設置詳解正文


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:2013-6-4
之前常常會碰著如許的成績,當我們刪除一條自增加列為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照樣自增加的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved