mysql中的序列

來源:互聯網
上載者:User

標籤:

(1)首先mysql的自增長“序列”和序列是兩回事,mysql本身不提供序列機制。 

(2)mysql的AUTO_INCREMENT可以設定起始值,但是不能設定步長,其步長預設就是1. 

(3)mysql一個表只能有一個自增長欄位。自增長只能被分配給固定表的固定的某一欄位,不能被多個表共用。並且只能是數字型。 

(4)在曆史表和資料移轉時,經常會遇到自增主鍵重複的問題。 

(5)自增主鍵往往是沒意義的。 
在下列情況下可能你需要使用序列: 
(1)業務複雜,你需要高度定製和控制主鍵(自增主鍵只能是按數字遞增的,但是序列可以隨心所欲的變化,比如按照年月日產生主鍵。。。) 
(2)你希望手工維護自增長,方便資料移轉; 
(3)當事務跨多表時,期望事務可靠性; 

(4)當你需要一個業務上有意義的主鍵時,比如單據號等(若你需要的只是一個流水號,那麼用自增更方便); 

(5)當你的主鍵很明確地需要和其他表關聯時(若你的表不與其他表關聯時,如日誌表,自增更方便) 

(6)你期望這個主鍵是唯一的,不需要重複利用的。 
    當然,序列也有缺點,主要就是程式處理麻煩,不如自增方便。oracle的自增有緩衝,不用擔心效率問題,而mysql只能通過觸發器類比,可能會有效能損失。 

下面,我們就來實現一下mysql中的序列。 

先建一個序列表,如下: 

 

CREATE TABLE IF NOT EXISTS `sequence` (  

  
  `name` varchar(50) NOT NULL,  
  
  `current_value` int(11) NOT NULL,  
  
  `increment` int(11) NOT NULL DEFAULT ‘1‘  
  
) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT=‘序列表,命名s_[table_name]‘;  
  
INSERT INTO `sequence` (`name`, `current_value`, `increment`) VALUES  
  
(‘s_blog_account‘, 0, 1) 




DROP FUNCTION IF EXISTS `currval`;  
  
DELIMITER //  
  
CREATE  FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)  
  
    READS SQL DATA  
  
    DETERMINISTIC  
  
BEGIN  
  
DECLARE VALUE INTEGER;  
  
SET VALUE = 0;  
  
SELECT current_value INTO VALUE FROM sequence WHERE NAME = seq_name;  
  
RETURN VALUE;  
  
END//  
  
DELIMITER ;






DROP FUNCTION IF EXISTS `nextval`;  
  
DELIMITER //  
  
CREATE  FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)  
  
    DETERMINISTIC  
  
BEGIN  
  
UPDATE sequence SET current_value = current_value + increment WHERE NAME = seq_name;  
  
RETURN currval(seq_name);  
  
END//  
  

DELIMITER ;

 

最後使用select nextval("s_blog_account")即可得到下一個值

mysql中的序列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.