成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談如何屏蔽數據庫中自增ID功能

數據庫 SQL Server
今天我們將討論的是如何屏蔽數據庫中自增ID功能,也就是ID由系統自動分配,DBA們不用手動干預。不過在做分布式數據庫時,要求數據同步時,這種自增ID就會出現嚴重的問題,因為你無法用該ID來唯一標識記錄。

在平時的項目開發中,我相信有很大一批人都在用這個數據庫自增ID,用數據庫自增ID有利也有弊。

優點:節省時間,根本不用考慮怎么來標識***記錄,寫程序也簡單了,數據庫幫我們維護著這一批ID號。

缺點:for example, 在做分布式數據庫時,要求數據同步時,這種自增ID就會出現嚴重的問題,因為你無法用該ID來***標識記錄。同時在數據庫做移植時,也會出現各種問題,總之,對此自增ID有依賴的情況,都有可能出現問題。我絕對相信園子里有很一部分人都被這個“好用的東西” 曾經害慘過!

我平時在開發項目的時候,一般都沒有用到數據庫的自增ID, 所以我想分享一下自己的解決方法。

解決思路

1:定義一張表,專門用來存放存所有需要***ID的表名稱以及該表當前所使用到的ID值。

2: 寫一個存儲過程,專門用來在上一步的表中取ID值。

這個思路非常簡單,我不作解釋了,直接來看看我的實現方法:

***步:創建表

  1. create table table_key  
  2. (  
  3.  table_name   varchar(50) not null primary key,  
  4.        key_value    int         not null 

第二步:創建存儲過程來取自增ID

  1. create procedure up_get_table_key  
  2. (  
  3.    @table_name     varchar(50),  
  4.    @key_value      int output 
  5. )  
  6. as 
  7. begin 
  8.      begin tran  
  9.          declare @key  int 
  10.            
  11.          --initialize the key with 1  
  12.          set @key=1  
  13.          --whether the specified table is exist  
  14.   if not exists(select table_name from table_key where table_name=@table_name)  
  15.             begin 
  16.     insert into table_key values(@table_name,@key)        --default key vlaue:1  
  17.             end 
  18.          -- step increase  
  19.          else      
  20.             begin 
  21. select @key=key_value from table_key with (nolock) where table_name=@table_name  
  22.                 set @key=@key+1  
  23.                 --update the key value by table name  
  24.           update table_key set key_value=@key where table_name=@table_name  
  25.             end 
  26.         --set ouput value  
  27.     set @key_value=@key 
  28.  
  29.     --commit tran  
  30.     commit tran  
  31.         if @@error>0  
  32.       rollback tran  
  33. end 

對于在表中不存在記錄,直接返回一個默認值為1的鍵值,同時插入該條記錄到table_key表中。而對于已存在的記錄,key值直接在原來的key基礎上加1.

總結一下,這種方法非常簡單,我說一下它的優缺點。

優點:

1:ID值是可控的。用戶可以從指定段開始分配ID值,這對于在分布式數據要求同數據同步時,非常方便,很好地解決了ID重復的問題。

2:在編寫程序中,ID值是可見的,比如在再插入關聯的記錄時,相比使用數據庫自增ID的情況下,這種方法不需要在插入一條數據庫記錄之后,再去得到自增ID值,然再再使用該ID的值來插入關聯的記錄。我們可以一次性使用事務來插入關聯記錄。

3:對于需要批量插入數據時,我們可以改寫一下上面的存儲過程,返回一個段的開始ID,然后更新表時需要注意,不是原來的簡單的遞增1,而是遞增你想要的插入多少條記錄的總數。

缺點:

1:效率問題,每次取ID值都需要調用存儲過程從數據庫中檢索一次。對于這種情況,我覺得效率不是很大問題,因為SQL server 會對我們經常調用的存儲過程有緩存,再一點,這個表的數據應該不會很大,最多上千條(一個項目中上千個表的情況應該不是很多吧)。所以檢索不是什么問題,何況是根據表名來檢索(表名列已是主鍵)。

原文鏈接:http://www.cnblogs.com/repository/archive/2011/01/17/1937265.html

【編輯推薦】

  1. SQL Server 2000刪除實戰演習
  2. SQL Server存儲過程的命名標準如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. 對SQL Server字符串數據類型的具體描述
  5. SQL Server數據類型的種類與應用
     
責任編輯:彭凡 來源: 博客園
相關推薦

2019-12-09 10:03:40

MySQLSQL數據庫

2023-11-30 09:09:53

數據庫Java

2011-08-18 18:34:00

Oracle數據庫創建自增字段

2022-06-14 08:01:43

數據庫MySQL

2020-08-21 13:15:29

開發技能代碼

2022-11-08 19:30:52

DjangoID自增

2024-10-08 15:31:45

2024-12-25 15:32:29

2020-08-31 07:00:00

數據庫數據庫同步

2018-12-14 15:35:20

MySQL索引數據庫

2009-07-01 16:01:58

JSP數據庫

2010-03-29 14:09:12

Oracle ID 自

2009-07-07 14:56:33

JSP連接MySQL

2021-11-26 22:07:57

數據庫管理Mongodb

2024-11-22 15:32:19

2010-06-18 13:47:21

SQL Server數

2024-11-11 00:00:06

MySQLID數據類型

2024-06-14 08:34:36

2010-07-05 11:26:31

2022-06-03 08:12:52

InnoDB插入MySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产人成精品一区二区三 | 久久精品亚洲 | 高清18麻豆 | 国产精品久久久久久久久久 | 超碰8| 久久青| 中文字幕在线一区 | 午夜视频一区 | 黄色在线免费观看视频网站 | 国产美女自拍视频 | 99精品电影 | 国产三级 | av免费网址 | 亚洲精品成人av久久 | 欧美极品在线观看 | 综合久久色 | 91久久爽久久爽爽久久片 | 国产一区| 午夜精品一区二区三区在线观看 | www.欧美视频 | 成人乱人乱一区二区三区软件 | 精品国产一区二区三区久久久四川 | 一区二区三区四区在线 | 大学生a级毛片免费视频 | 人人做人人澡人人爽欧美 | 久草视频在线播放 | 污污免费网站 | 中文精品久久 | 99热这里有精品 | 欧美精品一区二区在线观看 | 成人av观看 | 久久成人人人人精品欧 | 91一区| 逼逼网 | 日韩精品久久久久 | 久色| 国产ts人妖另类 | 国产精品久久久久无码av | 久久精品国产久精国产 | 精品欧美一区二区在线观看视频 | 欧美精品久久久久久久久久 |