[轉]MySQL如何設置自動增長序列 SEQUENCE


原文地址:https://blog.csdn.net/czbqoo01/article/details/70148516

解決思路:由於mysql不帶sequence,所以要手寫的,創建一張儲存sequence的表(emp_seq),然后手動插入一條數據 ,最后自定義一個函數來處理要增長的值。

 

1.創建表emp_seq,用來存放sequence值:

說明:

  • name這個列,是為了讓函數更好的通過條件來進行DML操作,
  • start_value,儲存了自增序列開始時的值,
  • increment_value,存儲了自增序列步進的值。
  1.  
  2. create table emp_seq (
  3. name varchar(50) not null primary key,
  4. start_value int not null,
  5. increment_value int not null default 1
  6. );

2.手動插入數據:

說明:

  • ‘empno’見名之意,
  • 第一個1,說明序列從1開始,
  • 第二個1,說明序列每次增長1。
insert into emp_seq values('empno',1,1);

3.定義函數 nextval:

說明:

  • DELIMITER //  ->定義語句結束符,其中//前面有一個空格,平常我們都是用分號;作為語句結束符。但是創建的函數中,是多條語句組合而成,每條語句也是使用分號;作為語句結束符,若沒有重新定義語句結束符,數據庫會認為declare i int;這里的分號是結束符,會報錯。所以在這我們重新定義一個語句結束符//,直到end;//這里才會結束整段代碼。
  • function 自定義函數 (user-defined function UDF),它是對MySQL功能的一個擴展,
  • declare 聲明變量
 
  1.  
  2. DELIMITER //
  3. create function nextval(str varchar(50)) returns integer
  4. begin
  5. declare i int;
  6. set i=(select start_value from emp_seq where name=str);
  7. update emp_seq
  8. set start_value=i+increment_value
  9. where name=str;
  10. return i;
  11. end;
  12. //
  13.  

4.恢復默認的語句結束符:

說明:

DELIMITER ; ->定義語句結束符(其中delimiter后跟了一個空格一個分號),也就是把分號作為語句結束符。因為上面已經把函數建立好了,所以在這里重新定義結束符,為的是以后更方便的執行SQL語句,平常我們使用SQL語句,習慣用分號作為結束符的。

 
  1. DELIMITER ;
  2.  

5.為了更方便的執行SQL命令,我把這些代碼復制到記事本中,並把文件存到D盤根目錄下,改名為emp_seq.sql

 
 

6.執行外部SQL腳本命令,若沒有提示,說明建立成功。如何執行外部SQL腳本命令,客官可移步:MySQL執行外部sql腳本文件的命令

 
 

7.成功導入sql腳本后,那咱們就需要驗證一下,進入mysql,並進入數據庫,我這里是jsd170101

 

 

OK,連續執行sql語句獲取序列,從上圖清楚的看到,結果從1開始,每次自增1

 

8.下面說說如何應用在DML語句中

我的數據庫里已有empno=6的數據,這里我讓start_value增長到7,再插入一條信息:
 
 
查看下結果:
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM