標籤:efi char .sql 變數 自訂函數 prim lin next l命令
原文地址:70148516
解決思路:由於mysql不帶sequence,所以要手寫的,建立一張儲存sequence的表(emp_seq),然後手動插入一條資料 ,最後自訂一個函數來處理要增長的值。
1.建立表emp_seq,用來存放sequence值:
說明:
- name這個列,是為了讓函數更好的通過條件來進行DML操作,
- start_value,儲存了自增序列開始時的值,
- increment_value,儲存了自增序列步進的值。
-
- 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,再插入一條資訊: 查看下結果:
[轉]MySQL如何設定自動成長序列 SEQUENCE