1. 程式人生 > 其它 >Anaconda虛擬環境

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,用於結束本次迴圈,繼續下一次