原文地址:https://blog.csdn.net/czbqoo01/article/details/70148516
解決思路:由於mysql不帶sequence,所以要手寫的,創建一張儲存sequence的表(emp_seq),然后手動插入一條數據 ,最后自定義一個函數來處理要增長的值。
1.創建表emp_seq,用來存放sequence值:
-
-
create table emp_seq (
-
name varchar(50) not null primary key,
-
start_value int not null,
-
increment_value int not null default 1
-
);
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 聲明變量
-
-
DELIMITER //
-
create function nextval(str varchar(50)) returns integer
-
begin
-
declare i int;
-
set i=(select start_value from emp_seq where name=str);
-
update emp_seq
-
set start_value=i+increment_value
-
where name=str;
-
return i;
-
end;
-
//
-
4.恢復默認的語句結束符:
說明:
DELIMITER ; ->定義語句結束符(其中delimiter后跟了一個空格一個分號),也就是把分號作為語句結束符。因為上面已經把函數建立好了,所以在這里重新定義結束符,為的是以后更方便的執行SQL語句,平常我們使用SQL語句,習慣用分號作為結束符的。
-
DELIMITER ;
-
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,再插入一條信息:
查看下結果:

