Anaconda虛擬環境
Mysql筆記
資料庫的相關概念
一、資料庫的好處
1、可以持久化資料到本地
2、結構化查詢
二、資料庫的常見概念 ★
1、DB:資料庫,儲存資料的容器
2、DBMS:資料庫管理系統,又稱為資料庫軟體或資料庫產品,用於建立或管理DB
3、SQL:結構化查詢語言,用於和資料庫通訊的語言,不是某個資料庫軟體特有的,而是幾乎所有的主流資料庫軟體通用的語言
三、資料庫儲存資料的特點
1、資料存放到表中,然後表再放到庫中
2、一個庫中可以有多張表,每張表具有唯一的表名用來標識自己
3、表中有一個或多個列,列又稱為“欄位”,相當於java中“屬性”
4、表中的每一行資料,相當於java中“物件”
四、常見的資料庫管理系統
mysql、oracle、db2、sqlserver
五、MySQL的背景
前身屬於瑞典的一家公司,MySQL AB
08年被sun公司收購
09年sun被oracle收購
六、MySQL的優點
1、開源、免費、成本低
2、效能高、移植性也好
3、體積小,便於安裝
七、MySQL的安裝
屬於c/s架構的軟體,一般來講安裝服務端
企業版
社群版
5.5
5.6
5.7
8.0
八、MySQL服務的啟動和停止
方式一:通過命令列
net start 服務名
net stop 服務名
方式二:計算機——右擊——管理——服務
九、MySQL服務的登入和退出
登入:mysql 【-h 主機名 -P 埠號】 -u 使用者名稱 -p密碼
退出:exit或ctrl+C
DQL語言
基礎查詢
一、語法
select 查詢列表
from 表名;
二、特點
1、查詢列表可以是欄位、常量、表示式、函式,也可以是多個
2、查詢結果是一個虛擬表
三、示例
1、查詢單個欄位
select 欄位名 from 表名;
2、查詢多個欄位
select 欄位名,欄位名 from 表名;
3、查詢所有欄位
select * from 表名
4、查詢常量
select 常量值;
注意:字元型和日期型的常量值必須用單引號引起來,數值型不需要
5、查詢函式
select 函式名(實參列表);
6、查詢表示式
select 100/1234;
7、起別名
①as
②空格
8、去重
select distinct 欄位名 from 表名;
9、+
作用:做加法運算
select 數值+數值; 直接運算
select 字元+數值;先試圖將字元轉換成數值,如果轉換成功,則繼續運算;否則轉換成0,再做運算
select null+值;結果都為null
10、【補充】concat函式
功能:拼接字元
select concat(字元1,字元2,字元3,...);
11、【補充】ifnull函式
功能:判斷某欄位或表示式是否為null,如果為null 返回指定的值,否則返回原本的值
select ifnull(commission_pct,0) from employees;
12、【補充】isnull函式
功能:判斷某欄位或表示式是否為null,如果是,則返回1,否則返回0
條件查詢
一、語法
select 查詢列表
from 表名
where 篩選條件
二、篩選條件的分類
1、簡單條件運算子
< = <> != >= <= <=>安全等於
2、邏輯運算子
&& and
|| or
! not
3、模糊查詢
like:一般搭配萬用字元使用,可以判斷字元型或數值型
萬用字元:%任意多個字元,_任意單個字元
between and
in
is null /is not null:用於判斷null值
is null PK <=>
普通型別的數值 null值 可讀性
is null × √ √
<=> √ √ ×
排序查詢
一、語法
select 查詢列表
from 表
where 篩選條件
order by 排序列表 【asc/desc】
二、特點
1、asc :升序,如果不寫預設升序
desc:降序
2、排序列表 支援 單個欄位、多個欄位、函式、表示式、別名
3、order by的位置一般放在查詢語句的最後(除limit語句之外)
常見函式
一、概述
功能:類似於java中的方法
好處:提高重用性和隱藏實現細節
呼叫:select 函式名(實參列表);
二、單行函式
1、字元函式
concat:連線
substr:擷取子串
upper:變大寫
lower:變小寫
replace:替換
length:獲取位元組長度
trim:去前後空格
lpad:左填充
rpad:右填充
instr:獲取子串第一次出現的索引
2、數學函式
ceil:向上取整
round:四捨五入
mod:取模
floor:向下取整
truncate:截斷
rand:獲取隨機數,返回0-1之間的小數
3、日期函式
now:返回當前日期+時間
year:返回年
month:返回月
day:返回日
date_format:將日期轉換成字元
curdate:返回當前日期
str_to_date:將字元轉換成日期
curtime:返回當前時間
hour:小時
minute:分鐘
second:秒
datediff:返回兩個日期相差的天數
monthname:以英文形式返回月
4、其他函式
version 當前資料庫伺服器的版本
database 當前開啟的資料庫
user當前使用者
password('字元'):返回該字元的密碼形式
md5('字元'):返回該字元的md5加密形式
5、流程控制函式
①if(條件表示式,表示式1,表示式2):如果條件表示式成立,返回表示式1,否則返回表示式2
②case情況1
case 變數或表示式或欄位
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end
③case情況2
case
when 條件1 then 值1
when 條件2 then 值2
...
else 值n
end
三、分組函式
1、分類
max 最大值
min 最小值
sum 和
avg 平均值
count 計算個數
2、特點
①語法
select max(欄位) from 表名;
②支援的型別
sum和avg一般用於處理數值型
max、min、count可以處理任何資料型別
③以上分組函式都忽略null
④都可以搭配distinct使用,實現去重的統計
select sum(distinct 欄位) from 表;
⑤count函式
count(欄位):統計該欄位非空值的個數
count(*):統計結果集的行數
案例:查詢每個部門的員工個數
1 xx 10
2 dd 20
3 mm 20
4 aa 40
5 hh 40
count(1):統計結果集的行數
效率上:
MyISAM儲存引擎,count()最高
InnoDB儲存引擎,count()和count(1)效率>count(欄位)
⑥ 和分組函式一同查詢的欄位,要求是group by後出現的欄位
分組查詢
一、語法
select 分組函式,分組後的欄位
from 表
【where 篩選條件】
group by 分組的欄位
【having 分組後的篩選】
【order by 排序列表】
二、特點
使用關鍵字 篩選的表 位置
分組前篩選 where 原始表 group by的前面
分組後篩選 having 分組後的結果 group by 的後面
連線查詢
一、含義
當查詢中涉及到了多個表的欄位,需要使用多表連線
select 欄位1,欄位2
from 表1,表2,...;
笛卡爾乘積:當查詢多個表時,沒有新增有效的連線條件,導致多個表所有行實現完全連線
如何解決:新增有效的連線條件
二、分類
按年代分類:
sql92:
等值
非等值
自連線
也支援一部分外連線(用於oracle、sqlserver,mysql不支援)
sql99【推薦使用】
內連線
等值
非等值
自連線
外連線
左外
右外
全外(mysql不支援)
交叉連線
三、SQL92語法
1、等值連線
語法:
select 查詢列表
from 表1 別名,表2 別名
where 表1.key=表2.key
【and 篩選條件】
【group by 分組欄位】
【having 分組後的篩選】
【order by 排序欄位】
特點:
① 一般為表起別名
②多表的順序可以調換
③n表連線至少需要n-1個連線條件
④等值連線的結果是多表的交集部分
2、非等值連線
語法:
select 查詢列表
from 表1 別名,表2 別名
where 非等值的連線條件
【and 篩選條件】
【group by 分組欄位】
【having 分組後的篩選】
【order by 排序欄位】
3、自連線
語法:
select 查詢列表
from 表 別名1,表 別名2
where 等值的連線條件
【and 篩選條件】
【group by 分組欄位】
【having 分組後的篩選】
【order by 排序欄位】
四、SQL99語法
1、內連線
語法:
select 查詢列表
from 表1 別名
【inner】 join 表2 別名 on 連線條件
where 篩選條件
group by 分組列表
having 分組後的篩選
order by 排序列表
limit 子句;
特點:
①表的順序可以調換
②內連線的結果=多表的交集
③n表連線至少需要n-1個連線條件
分類:
等值連線
非等值連線
自連線
2、外連線
語法:
select 查詢列表
from 表1 別名
left|right|full【outer】 join 表2 別名 on 連線條件
where 篩選條件
group by 分組列表
having 分組後的篩選
order by 排序列表
limit 子句;
特點:
①查詢的結果=主表中所有的行,如果從表和它匹配的將顯示匹配行,如果從表沒有匹配的則顯示null
②left join 左邊的就是主表,right join 右邊的就是主表
full join 兩邊都是主表
③一般用於查詢除了交集部分的剩餘的不匹配的行
3、交叉連線
語法:
select 查詢列表
from 表1 別名
cross join 表2 別名;
特點:
類似於笛卡爾乘積
子查詢
一、含義
巢狀在其他語句內部的select語句稱為子查詢或內查詢,
外面的語句可以是insert、update、delete、select等,一般select作為外面語句較多
外面如果為select語句,則此語句稱為外查詢或主查詢
二、分類
1、按出現位置
select後面:
僅僅支援標量子查詢
from後面:
表子查詢
where或having後面:
標量子查詢
列子查詢
行子查詢
exists後面:
標量子查詢
列子查詢
行子查詢
表子查詢
2、按結果集的行列
標量子查詢(單行子查詢):結果集為一行一列
列子查詢(多行子查詢):結果集為多行一列
行子查詢:結果集為多行多列
表子查詢:結果集為多行多列
三、示例
where或having後面
1、標量子查詢
案例:查詢最低工資的員工姓名和工資
①最低工資
select min(salary) from employees
②查詢員工的姓名和工資,要求工資=①
select last_name,salary
from employees
where salary=(
select min(salary) from employees
);
2、列子查詢
案例:查詢所有是領導的員工姓名
①查詢所有員工的 manager_id
select manager_id
from employees
②查詢姓名,employee_id屬於①列表的一個
select last_name
from employees
where employee_id in(
select manager_id
from employees
);
分頁查詢
一、應用場景
當要查詢的條目數太多,一頁顯示不全
二、語法
select 查詢列表
from 表
limit 【offset,】size;
注意:
offset代表的是起始的條目索引,預設從0卡死
size代表的是顯示的條目數
公式:
假如要顯示的頁數為page,每一頁條目數為size
select 查詢列表
from 表
limit (page-1)*size,size;
聯合查詢
一、含義
union:合併、聯合,將多次查詢結果合併成一個結果
二、語法
查詢語句1
union 【all】
查詢語句2
union 【all】
...
三、意義
1、將一條比較複雜的查詢語句拆分成多條語句
2、適用於查詢多個表的時候,查詢的列基本是一致
四、特點
1、要求多條查詢語句的查詢列數必須一致
2、要求多條查詢語句的查詢的各列型別、順序最好一致
3、union 去重,union all包含重複項
查詢總結
語法:
select 查詢列表 ⑦
from 表1 別名 ①
連線型別 join 表2 ②
on 連線條件 ③
where 篩選 ④
group by 分組列表 ⑤
having 篩選 ⑥
order by排序列表 ⑧
limit 起始條目索引,條目數; ⑨
DML 語言
插入
一、方式一
語法:
insert into 表名(欄位名,...) values(值,...);
特點:
1、要求值的型別和欄位的型別要一致或相容
2、欄位的個數和順序不一定與原始表中的欄位個數和順序一致
但必須保證值和欄位一一對應
3、假如表中有可以為null的欄位,注意可以通過以下兩種方式插入null值
①欄位和值都省略
②欄位寫上,值使用null
4、欄位和值的個數必須一致
5、欄位名可以省略,預設所有列
二、方式二
語法:
insert into 表名 set 欄位=值,欄位=值,...;
兩種方式 的區別:
1.方式一支援一次插入多行,語法如下:
insert into 表名【(欄位名,..)】 values(值,..),(值,...),...;
2.方式一支援子查詢,語法如下:
insert into 表名
查詢語句;
修改
一、修改單表的記錄 ★
語法:update 表名 set 欄位=值,欄位=值 【where 篩選條件】;
二、修改多表的記錄【補充】
語法:
update 表1 別名
left|right|inner join 表2 別名
on 連線條件
set 欄位=值,欄位=值
【where 篩選條件】;
刪除
方式一:使用delete
一、刪除單表的記錄★
語法:delete from 表名 【where 篩選條件】【limit 條目數】
二、級聯刪除[補充]
語法:
delete 別名1,別名2 from 表1 別名
inner|left|right join 表2 別名
on 連線條件
【where 篩選條件】
方式二:使用truncate
語法:truncate table 表名
兩種方式的區別【面試題】★
1.truncate刪除後,如果再插入,標識列從1開始
delete刪除後,如果再插入,標識列從斷點開始
2.delete可以新增篩選條件
truncate不可以新增篩選條件
3.truncate效率較高
4.truncate沒有返回值
delete可以返回受影響的行數
5.truncate不可以回滾
delete可以回滾
DDL語言
庫的管理
一、建立庫
create database 【if not exists】 庫名【 character set 字符集名】;
二、修改庫
alter database 庫名 character set 字符集名;
三、刪除庫
drop database 【if exists】 庫名;
表的管理
一、建立表 ★
create table 【if not exists】 表名(
欄位名 欄位型別 【約束】,
欄位名 欄位型別 【約束】,
。。。
欄位名 欄位型別 【約束】
)
二、修改表
1.新增列
alter table 表名 add column 列名 型別 【first|after 欄位名】;
2.修改列的型別或約束
alter table 表名 modify column 列名 新型別 【新約束】;
3.修改列名
alter table 表名 change column 舊列名 新列名 型別;
4 .刪除列
alter table 表名 drop column 列名;
5.修改表名
alter table 表名 rename 【to】 新表名;
三、刪除表
drop table【if exists】 表名;
四、複製表
1、複製表的結構
create table 表名 like 舊錶;
2、複製表的結構+資料
create table 表名
select 查詢列表 from 舊錶【where 篩選】;
資料型別
一、數值型
1、整型
tinyint、smallint、mediumint、int/integer、bigint
1 2 3 4 8
特點:
①都可以設定無符號和有符號,預設有符號,通過unsigned設定無符號
②如果超出了範圍,會報out or range異常,插入臨界值
③長度可以不指定,預設會有一個長度
長度代表顯示的最大寬度,如果不夠則左邊用0填充,但需要搭配zerofill,並且預設變為無符號整型
2、浮點型
定點數:decimal(M,D)
浮點數:
float(M,D) 4
double(M,D) 8
特點:
①M代表整數部位+小數部位的個數,D代表小數部位
②如果超出範圍,則報out or range異常,並且插入臨界值
③M和D都可以省略,但對於定點數,M預設為10,D預設為0
④如果精度要求較高,則優先考慮使用定點數
二、字元型
char、varchar、binary、varbinary、enum、set、text、blob
char:固定長度的字元,寫法為char(M),最大長度不能超過M,其中M可以省略,預設為1
varchar:可變長度的字元,寫法為varchar(M),最大長度不能超過M,其中M不可以省略
三、日期型
year年
date日期
time時間
datetime 日期+時間 8
timestamp 日期+時間 4 比較容易受時區、語法模式、版本的影響,更能反映當前時區的真實時間
常見的約束
一、常見的約束
NOT NULL:非空,該欄位的值必填
UNIQUE:唯一,該欄位的值不可重複
DEFAULT:預設,該欄位的值不用手動插入有預設值
CHECK:檢查,mysql不支援
PRIMARY KEY:主鍵,該欄位的值不可重複並且非空 unique+not null
FOREIGN KEY:外來鍵,該欄位的值引用了另外的表的欄位
主鍵和唯一
1、區別:
①、一個表至多有一個主鍵,但可以有多個唯一
②、主鍵不允許為空,唯一可以為空
2、相同點
都具有唯一性
都支援組合鍵,但不推薦
外來鍵:
1、用於限制兩個表的關係,從表的欄位值引用了主表的某欄位值
2、外來鍵列和主表的被引用列要求型別一致,意義一樣,名稱無要求
3、主表的被引用列要求是一個key(一般就是主鍵)
4、插入資料,先插入主表
刪除資料,先刪除從表
可以通過以下兩種方式來刪除主表的記錄
方式一:級聯刪除
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
方式二:級聯置空
ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL;
二、建立表時新增約束
create table 表名(
欄位名 欄位型別 not null,#非空
欄位名 欄位型別 primary key,#主鍵
欄位名 欄位型別 unique,#唯一
欄位名 欄位型別 default 值,#預設
constraint 約束名 foreign key(欄位名) references 主表(被引用列)
)
注意:
支援型別 可以起約束名
列級約束 除了外來鍵 不可以
表級約束 除了非空和預設 可以,但對主鍵無效
列級約束可以在一個欄位上追加多個,中間用空格隔開,沒有順序要求
三、修改表時新增或刪除約束
1、非空
新增非空
alter table 表名 modify column 欄位名 欄位型別 not null;
刪除非空
alter table 表名 modify column 欄位名 欄位型別 ;
2、預設
新增預設
alter table 表名 modify column 欄位名 欄位型別 default 值;
刪除預設
alter table 表名 modify column 欄位名 欄位型別 ;
3、主鍵
新增主鍵
alter table 表名 add【 constraint 約束名】 primary key(欄位名);
刪除主鍵
alter table 表名 drop primary key;
4、唯一
新增唯一
alter table 表名 add【 constraint 約束名】 unique(欄位名);
刪除唯一
alter table 表名 drop index 索引名;
5、外來鍵
新增外來鍵
alter table 表名 add【 constraint 約束名】 foreign key(欄位名) references 主表(被引用列);
刪除外來鍵
alter table 表名 drop foreign key 約束名;
四、自增長列
特點:
1、不用手動插入值,可以自動提供序列值,預設從1開始,步長為1
auto_increment_increment
如果要更改起始值:手動插入值
如果要更改步長:更改系統變數
set auto_increment_increment=值;
2、一個表至多有一個自增長列
3、自增長列只能支援數值型
4、自增長列必須為一個key
一、建立表時設定自增長列
create table 表(
欄位名 欄位型別 約束 auto_increment
)
二、修改表時設定自增長列
alter table 表 modify column 欄位名 欄位型別 約束 auto_increment
三、刪除自增長列
alter table 表 modify column 欄位名 欄位型別 約束
TCL語言
事務
一、含義
事務:一條或多條sql語句組成一個執行單位,一組sql語句要麼都執行要麼都不執行
二、特點(ACID)
A 原子性:一個事務是不可再分割的整體,要麼都執行要麼都不執行
C 一致性:一個事務可以使資料從一個一致狀態切換到另外一個一致的狀態
I 隔離性:一個事務不受其他事務的干擾,多個事務互相隔離的
D 永續性:一個事務一旦提交了,則永久的持久化到本地
三、事務的使用步驟 ★
瞭解:
隱式(自動)事務:沒有明顯的開啟和結束,本身就是一條事務可以自動提交,比如insert、update、delete
顯式事務:具有明顯的開啟和結束
使用顯式事務:
①開啟事務
set autocommit=0;
start transaction;#可以省略
②編寫一組邏輯sql語句
注意:sql語句支援的是insert、update、delete
設定回滾點:
savepoint 回滾點名;
③結束事務
提交:commit;
回滾:rollback;
回滾到指定的地方:rollback to 回滾點名;
四、併發事務
1、事務的併發問題是如何發生的?
多個事務 同時 操作 同一個資料庫的相同資料時
2、併發問題都有哪些?
髒讀:一個事務讀取了其他事務還沒有提交的資料,讀到的是其他事務“更新”的資料
不可重複讀:一個事務多次讀取,結果不一樣
幻讀:一個事務讀取了其他事務還沒有提交的資料,只是讀到的是 其他事務“插入”的資料
3、如何解決併發問題
通過設定隔離級別來解決併發問題
4、隔離級別
髒讀 不可重複讀 幻讀
read uncommitted:讀未提交 × × ×
read committed:讀已提交 √ × ×
repeatable read:可重複讀 √ √ ×
serializable:序列化 √ √ √
其他
檢視
一、含義
mysql5.1版本出現的新特性,本身是一個虛擬表,它的資料來自於表,通過執行時動態生成。
好處:
1、簡化sql語句
2、提高了sql的重用性
3、保護基表的資料,提高了安全性
二、建立
create view 檢視名
as
查詢語句;
三、修改
方式一:
create or replace view 檢視名
as
查詢語句;
方式二:
alter view 檢視名
as
查詢語句
四、刪除
drop view 檢視1,檢視2,...;
五、檢視
desc 檢視名;
show create view 檢視名;
六、使用
1.插入
insert
2.修改
update
3.刪除
delete
4.檢視
select
注意:檢視一般用於查詢的,而不是更新的,所以具備以下特點的檢視都不允許更新
①包含分組函式、group by、distinct、having、union、
②join
③常量檢視
④where後的子查詢用到了from中的表
⑤用到了不可更新的檢視
七、檢視和表的對比
關鍵字 是否佔用物理空間 使用
檢視 view 佔用較小,只儲存sql邏輯 一般用於查詢
表 table 儲存實際的資料 增刪改查
變數
一、系統變數
說明:變數由系統提供的,不用自定義
語法:
①檢視系統變數
show 【global|session 】variables like ''; 如果沒有顯式宣告global還是session,則預設是session
②檢視指定的系統變數的值
select @@【global|session】.變數名; 如果沒有顯式宣告global還是session,則預設是session
③為系統變數賦值
方式一:
set 【global|session 】 變數名=值; 如果沒有顯式宣告global還是session,則預設是session
方式二:
set @@global.變數名=值;
set @@變數名=值;
1、全域性變數
伺服器層面上的,必須擁有super許可權才能為系統變數賦值,作用域為整個伺服器,也就是針對於所有連線(會話)有效
2、會話變數
伺服器為每一個連線的客戶端都提供了系統變數,作用域為當前的連線(會話)
二、自定義變數
說明:
1、使用者變數
作用域:針對於當前連線(會話)生效
位置:begin end裡面,也可以放在外面
使用:
①宣告並賦值:
set @變數名=值;或
set @變數名:=值;或
select @變數名:=值;
②更新值
方式一:
set @變數名=值;或
set @變數名:=值;或
select @變數名:=值;
方式二:
select xx into @變數名 from 表;
③使用
select @變數名;
2、區域性變數
作用域:僅僅在定義它的begin end中有效
位置:只能放在begin end中,而且只能放在第一句
使用:
①宣告
declare 變數名 型別 【default 值】;
②賦值或更新
方式一:
set 變數名=值;或
set 變數名:=值;或
select @變數名:=值;
方式二:
select xx into 變數名 from 表;
③使用
select 變數名;
儲存過程和函式
說明:都類似於java中的方法,將一組完成特定功能的邏輯語句包裝起來,對外暴露名字
好處:
1、提高重用性
2、sql語句簡單
3、減少了和資料庫伺服器連線的次數,提高了效率
儲存過程
一、建立 ★
create procedure 儲存過程名(引數模式 引數名 引數型別)
begin
儲存過程體
end
注意:
1.引數模式:in、out、inout,其中in可以省略
2.儲存過程體的每一條sql語句都需要用分號結尾
二、呼叫
call 儲存過程名(實參列表)
舉例:
呼叫in模式的引數:call sp1(‘值’);
呼叫out模式的引數:set @name; call sp1(@name);select @name;
呼叫inout模式的引數:set @name=值; call sp1(@name); select @name;
三、檢視
show create procedure 儲存過程名;
四、刪除
drop procedure 儲存過程名;
函式
一、建立
create function 函式名(引數名 引數型別) returns 返回型別
begin
函式體
end
注意:函式體中肯定需要有return語句
二、呼叫
select 函式名(實參列表);
三、檢視
show create function 函式名;
四、刪除
drop function 函式名;
流程控制結構
說明:
順序結構:程式從上往下依次執行
分支結構:程式按條件進行選擇執行,從兩條或多條路徑中選擇一條執行
迴圈結構:程式滿足一定條件下,重複執行一組語句
分支結構
特點:
1、if函式
功能:實現簡單雙分支
語法:
if(條件,值1,值2)
位置:
可以作為表示式放在任何位置
2、case結構
功能:實現多分支
語法1:
case 表示式或欄位
when 值1 then 語句1;
when 值2 then 語句2;
..
else 語句n;
end [case];
語法2:
case
when 條件1 then 語句1;
when 條件2 then 語句2;
..
else 語句n;
end [case];
位置:
可以放在任何位置,
如果放在begin end 外面,作為表示式結合著其他語句使用
如果放在begin end 裡面,一般作為獨立的語句使用
3、if結構
功能:實現多分支
語法:
if 條件1 then 語句1;
elseif 條件2 then 語句2;
...
else 語句n;
end if;
位置:
只能放在begin end中
迴圈結構
位置:
只能放在begin end中
特點:都能實現迴圈結構
對比:
①這三種迴圈都可以省略名稱,但如果迴圈中添加了迴圈控制語句(leave或iterate)則必須新增名稱
②
loop 一般用於實現簡單的死迴圈
while 先判斷後執行
repeat 先執行後判斷,無條件至少執行一次
1、while
語法:
【名稱:】while 迴圈條件 do
迴圈體
end while 【名稱】;
2、loop
語法:
【名稱:】loop
迴圈體
end loop 【名稱】;
3、repeat
語法:
【名稱:】repeat
迴圈體
until 結束條件
end repeat 【名稱】;
二、迴圈控制語句
leave:類似於break,用於跳出所在的迴圈
iterate:類似於continue,用於結束本次迴圈,繼續下一次