mysql笔记

这篇博客详细介绍了MySQL的下载、安装、卸载流程,并深入探讨了SQL语句的概念、通用语法和分类。此外,还涵盖了常用SQL命令、函数、连接查询、子查询、分页查询、联合查询等内容,以及数据类型、事务处理和视图等关键概念。通过阅读,读者可以全面了解MySQL数据库的基本操作和高级特性。
摘要由CSDN通过智能技术生成

一、下载

https://downloads.mysql.com/archives/community/

二、安装

1.将下载的mysql的zip文件解压;

2.配置环境变量

在这里插入图片描述
3.在mysql文件夹下创建my.ini文件(注意替换路径位置)

[mysqld]
basedir=D:\mysql\mysql-8.0.22-winx64\
datadir=D:\mysql\mysql-8.0.22-winx64\data
port=3306
#skip-grant-tables

4.管理员身份打开cmd窗口,并进入安装mysql的bin文件夹

cd /d D:\mysql\mysql-8.0.22-winx64\bin	
mysqld -install					#安装mysql
mysqld --initialize-insecure --user=mysql		#初始化数据文件
net start mysql					#启动mysql服务
mysql -u root -p				#登录mysql(初始账号root,无密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';		#修改密码为123456
exit							#退出
net stop mysql					#停止mysql服务

三、卸载

1.去mysql的安装目录找到my.ini文件,找到datadir=F:\mysql\mysql-8.0.22-winx64\data

2.控制面板->程序->程序和功能->卸载或更改程序->卸载mysql

3.删除F:\目录下的mysql文件夹

四、SQL语句

1.概念

Structured Query Language 结构化查询语言

其实就是定义了操作所有关系型数据库的规则,每一种数据库操作的方式存在不一样的地方,称为’方言’。

2.SQL通用语法
  1. SQL语句可以单行或多行书写,以分号结尾;

  2. 可使用空格和缩进来增强语句的可读性;

  3. MySQL数据库的SQL语句不分大小写,关键字建议使用大写;

  4. 注释:

    单行注释-- 注释内容(必须有空格)或者#注释内容(mysql特有)

    多行注释/*注释*/

3.SQL分类

在这里插入图片描述

五、常用SQL命令

#服务启动和停止
net start mysql								#启动mysql服务
net stop mysql								#停止mysql服务
#登录
mysql -uroot -p123456						#登录mysql
#系统查询命令
select now();								#查询当前时间
select version();							#查询mysql版本
select user();								#查询当前用户
show engines;								#查看所有的存储引擎
set names 字符集名称;						#修改字符集
##数据库相关操作
show databases;								#查询所有的数据库名称
use 数据库名称;								 #使用某个数据库
show tables from 数据库名称;					 #查询其它数据库中的所有数据表
alter database 库名称 character set gbk;     #修改库字符集
show tables;								#查看的那个库的所有数据表
select database();							#查看当前使用的数据库
rename database 库名称 to 新库名称;			#修改库名称,不够安全,已启用
drop database 库名称;						   #删除数据库
#数据表相关操作
desc 表名;								   #查看表结构
alter table 表名 rename 新表明;				 #修改表名
alter table 表名 add column 列名 列描述;		#添加列
alter table 表名 change column 原列名 新列名 列类型;	#修改列名
alter table 表名 drop column 列名;			   #删除列
alter table 表名 modify 列名 列类型;			 #修改列类型
alter table 表名 change 原列名 新列名 列类型;		
drop table 表名;								#删除表
create table 表1名称 like 表2名称;			#复制表2的表结构并创建表1
create table 表1名称 select * from 表2名称;	#复制表我所有数据到表1
create table 表1名称 select 部分列 from 表2名称 where 条件; #复制表2的部分列部分数据到表1
show index from 表名							#显示索引

DISTINCT去除重复元素

条件运算符:< > = !=(或者<>) 不等于 >= <=)

逻辑运算符:and or not 或者 && || !

模糊查询:like between and in is null

通配符:% 任意多个字符,包含0个字符 _ 任意单个字符

转义:escape '$' 指定$为转义符

安全等于:<=> 可以判断null值

IFNULL(列名,默认值) 如果列名为空,则列名为默认值

六、常见函数

1.单行函数
1.1 字符函数

length 获取参数值的字节个数(不同的字符集返回值不同)

length('')

concat 拼接字符串

concat('','','',...)

upper、lower 大小写转换

upper('')		lower('')

substr、substring 截取字符

substr('',startIndex) 	#从startIndex开始截取
substr('',startIndex,length)	#截取从startIndex开始,长度为length的字符串

注意:数据库中的索引是从1开始的

instr 返回指定字符串在原字符串中出现的索引,如果找不到返回0

instr('','')

trim 去除前后空格

trim('')						#去除前后空格
trim('' from '')				#去除第二个参数中前后所有的第一个参数的字符串

lpad、rpad 用指定的字符实现左、右填充指定的长度

lpad('',length,'')		rpad('',length,'')

replace 替换

replace)('str','from_str','to_str')
1.2 数学函数

round 四舍五入

round(1.65)							#2
round(4.567,2)						#小数点后保留两位		4.57

ceil 向上取整,返回>=改参数的最小整数

ceil(4.01)							#5
ceil(-1.02)							#-1

floor 向下取整

floor(9.99)							#9
floor(-3.01)						#-4

truncate 截断

truncate(1.999,1)					#1.9

mod 取余

mod(10,3)							#1
1.3 日期函数

now 查询当前系统日期+时间

now()

curdate 返回当前系统日期,不包含时间

curdate()

curtime 返回当前系统时间,不包含日期

curtime()

year,month,day 获取日期指定部分

year(now())						#年
month(now())					#月
monthname(now())				#月的英文名称
day(now())						#日

str_to_date 将日期格式的字符转换成指定格式的日期

str_to_date('9-13-1999','%m-%d-%Y')				#1999-09-13

date_format 将日期转换成字符串

date_format('2018/6/6','%Y年%m月%d日')				#2018年06月06日
1.4 其他函数

version 查看当前版本

database 查看当前数据库

user 查看当前用户

1.5 流程控制函数

if 实现if else的效果

select if(10>5,'大','小')

case

case 要判断的字段或表达式 	
when 常量1 then 要显示的值1或语句1		#如果是语句需要加分号
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
case								#类似多重if
when 条件1 then 要显示的值1或语句1		#如果是语句需要加分号
when 条件1 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
2.分组函数

功能:用作统计使用,又称聚合函数或统计函数或组函数。

分类:sum求和、avg平均值、max最大值、min最小值、count计算个数

参数类型:

  1. sum、avg一般用于处理数值型,max、min、count可以处理任何类型;
  2. 以上分组函数都忽略null值;
  3. 可以和distinct搭配,实现去重的运算;
  4. count(*),count(1)统计多少行;
  5. 和分组函数一同查询的字段要求是group by后的字段;
  6. 分组函数做条件肯定是放在having子句中的,能用分组前筛选的,就优先考虑分组前筛选。

七、连接查询(又称多表查询)

1.分类

按年代分类:

  • sql92标椎:仅仅支持内连接
  • sql99标椎(推荐):支持内连接+外连接(左外和右外)+交叉连接

按功能分类:

  • 内连接(inner)(交集)(inner可以省略)

    ​ 等值连接

    ​ 1.多表等值连接的结果为多表的交集部分

    ​ 2.n表连接,至少需要n-1个连接条件

    ​ 3.多表的顺序没有要求

    ​ 4.一般需要为表起别名

    ​ 5.可以搭配前面介绍的所有子句使用,比如排序、分组等

    ​ 非等值连接

    ​ 自连接

  • 外连接

    ​ 左外连接(left [outer])

    ​ 右外连接(right [outer])

    ​ 全外连接(full [outer])

  • 交叉连接(cross join)

八、子查询

1.定义:

出现在其它语句中的select语句称为子查询或内查询。外部的查询语句称为主查询或外查询。

2.分类:

按子查询出现的位置:

相关子查询 select后面(仅仅支持标量子查询)、from后面(支持表子查询)、where或having后面(支持标量子查询、列子查询、行子查询)、exists后面(相关子查询)(结果只为1或0,表示是否存在)

按结果集的行列数不同:

​ 标量子查询(结果集只有一行一列)

​ 列子查询(结果集只有一列多行)

​ 行子查询(结果集只有一行多列)

​ 表字查询(结果及一般为多行多列)

多行比较操作符

操作符含义
IN / NOT IN等于列表中的任意一个
ANY | SOME和子查询返回的某一个值比较(大于最小的)
ALL和子查询返回的所有值比较(大于最大的)

九、分页查询

1.语法
limit  offset,size;		#offset要显示条目的起始索引(起始索引从0开始),size每页显示的数目

limit语句放在查询语句的最后

limit (page-1) * size,size

十、联合查询(union)

union:联合 合并:将多条查询语句的结果合并成一个结果

SELECT * FROM student WHERE id=1
UNION
SELECT * FROM student WHERE id=2
UNION
SELECT * FROM student WHERE id=3;

特点:

  • 要求多条查询语句的查询列数是一致的;
  • 要求多条查询语句的每一列的类型和顺序最好一致;
  • union默认去重,使用union all可以包含重复项。

十一、插入语句

#方式一  支持插入多行,支持子查询
insert into 表名 (字段1、字段2、...) values (值1、值2、...)
#方式二  不支持插入多行
insert into 表名 set 字段1=值1,字段2=值2,...
#删除表
truncate table 表名;				 #清空表包括自增长列,不能加where条件
delete from 表名 where 条件;	    #truncate删除没有返回值,delete有返回值
							☆☆  #truncate删除不能回滚,delete删除可以回滚

十二、数据类型

1.数值类型
1.1 整数类型

特点:

  • 默认有符号(使用unsigned设置无符号)
  • 插入的数值超出了整型的范围,回报out of range异常,并且插入临界值
  • 如果不设置长度,会有默认的长度,,长度代表显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用
1.2 小数类型

浮点型:

float(M,D)

double(M,D)

定点型:

decimal(M,D)

特点:

  • M代表整数部位+小数部位,D代表小数部位
  • M和D都可以省略,如果是decimal,则默认decimal(10,0),如果是float和double,则会根据插入的数值的精度来决定
  • 定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WFVDbu8y-1622101622943)(数值类型.png)]

2.字符串类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gdAPxEYU-1622101622945)(字符串类型.png)]

enum、set、binary、varbinary扩展

enum							#枚举  如果插入的值不存在枚举列,则插入空字符串
create table test(
	sex enum('男','女')
);
insert into test values('男');
set			#和enum类似,可以保存0~64个成员,但set一次可以选取多个成员,而枚举只能选一个
create table season(
	sex set('春','夏','秋','东')
);
insert into season values('春,夏');

#BINARY 保存较短的二进制
#BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
3.日期类型

datetime和timestamp比较

字节范围(年)时区的影响
datetime81000-9999
timestamp41970-2038

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e0zdLFJm-1622101622946)(日期时间类型.png)]

十三、常见约束

1.分类
1.1 not null

​ 非空约束,用于保证该字段的值不能为空

​ 修改表时添加:alter table 表名 modify column 列名 列类型 not null;

​ 修改表时删除:alter table 表名 modify column 列名 列类型 null;

1.2 default

​ 保证该字段有默认值

​ 修改表时添加:alter table 表名 modify column 列名 列类型 default 默认值;

​ 修改表时删除:alter table 表名 modify column 列名 列类型;

1.3 primary key主键

​ 用于保证该字段的值具有唯一性,并且非空

​ 修改表时添加:alter table 表名 modify column 列名 列类型 primary key;

或者:alter table 表名 add primary key(列名);

​ 修改表时删除:alter table 表名 modify column 列名 列类型;

或者:alter table 表名 drop primary key;

1.4 unique唯一

​ 保证该字段具有唯一性,可以为空

​ 修改表时添加:alter table 表名 modify column 列名 列类型 unique;

或者:alter table 表名 add unique(列名);

​ 修改表时删除:alter table 表名 drop index 约束名;

1.5 check检查约束(mysql不支持)

​ 用于限制列中值得范围,比如年龄

1.6 foreign key外键

​ 用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值

​ 主表的关联列必须是一个key(一般是主键或唯一)

​ 修改表时添加:alter table 从表名 add [constraint 外键名称] foreign key(外键列名) references 主表名(关联id);

​ 修改表时删除:alter table 表名 drop foreign key 约束名;

列级约束:

​ 直接在字段名和类型后面追加约束类型即可,只支持默认、非空、主键、唯一

​ 修改表时添加:alter table 表名 modify column 列名 列类型 约束;

表级约束:

​ 除了非空、默认,其他的都支持

foreign key(外键列) references 外键表名(关联列名) 写在创建表的最后面

​ 修改表时添加:alter table 表名 add [constraint 约束名] 约束类型(列名) [外键的引用]

主键和唯一约束比较:

保证唯一性是否允许为空一个表中可以有多少个是否允许组合
主键×最多有一个√,但不推荐
唯一可以有多个√,但不推荐
2.标识列(自增长列)
2.1 定义(AUTO_INCREMENT)

可以不用手动的输入值,系统提供默认的序列值。

2.2 设置
set auto_increment_increment = 3;			#设置每次增长的步长为3
insert into student(id,name) values(10,'');	#手动设置起始值为10,后面的都会自动增长
2.3 特点
  • 标识列不一定和主键搭配,但要求是一个key
  • 一个表最多只能有一个标识列
  • 标识列的类型只能是数值型
2.4 修改表时设置标识列

修改表时添加标识列:

alter table 表名 modify column 列名 列类型 key类型 auto_increment

修改表时删除标识列:

alter table 表名 modify column 列名 列类型;

十四、事务

1.定义

一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全都不执行。

2.特性(ACID)
  • **原子性(Atomicity)**原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • **一致性(Consistency)**事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
  • 隔离性(lsolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
3.事务的创建
3.1 隐式事务

**定义:**事务没有明显的开启和结束的标记。比如insert、update、delete语句。

3.2 显式事务

**定义:**事务具有明显的开启和结束的标记。

**前提:**必须先设置自动提交功能为禁用。

#1.开启事务
set autocommit=0;								#禁用autocommit
show variables like 'autocommit';				#查看autocommit状态是否禁用
start transaction;								#可选
#2.编写事务中的sql语句
...
#3.结束事务
commit;											#提交事务
rollback;										#回滚事务
4.数据库的隔离级别
4.1 事务并发问题
  • 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
  • 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
  • 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

4.2 事务隔离级别
select @@tx_isolation;					#查看隔离级别(mysql5版本)
select @@transaction_isolation;			#查看隔离级别(mysql8版本)
隔离级别描述
READ UNCOMMITTED(读未提交数据)允许事务读取为被其他事务提交的变更,脏读、可重复读和幻读的问题都会出现
READ COMMITED(读已提交数据)只允许事务读取已经被其他事务提交的变更,可以避免脏读,但不可重复读和幻读问题仍然出现
REPEATABLE READ(可重复读)确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其它事务对这个字段进行更新,可以避免脏读和不可重复读,但幻读的问题仍然存在
SERIALIZABLE(串行化)确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止其它事务对该表执行插入,更新和删除操作,所有并发问题都可以避免,但性能十分低下

Oracle支持的两种事务级别:READ COMMITED,SERIALIZABLE。默认隔离级别:SERIALIZABLE

Mysql支持4中隔离级别,默认隔离级别为:REPEATABLE READ

SET GLOBAL|SESSION TRANSACTION ISOLATION LEVEL 隔离级别; #设置全局|回话隔离级别
隔离级别脏读不可重复读幻读
READ UNCOMMITTED(读未提交数据)
READ COMMITED(读已提交数据)×
REPEATABLE READ(可重复读)××
SERIALIZABLE(串行化)×××
4.3 savepoint保存点
#搭配rollback使用,只会滚到保存点,保存点之前的sql依然会执行
set autocomit=0;
start transaction;
sql语句1...;
savepoint as a;
sql语句2...;
rollback to a;

十五、视图

1.定义

MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且还是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果

2.创建与修改
#创建
CREATE VIEW <视图名> AS <SELECT语句>;			 #创建视图
CREATE OR REPLACE VIEW <视图名> AS <SELECT语句>;  #如果不存在就创建,存在就修改
#修改
ALTER VIEW <视图名> AS <SELECT语句>;				 #修改视图
#删除
DROP VIEW <视图名>,<视图名>,...					#删除视图
3.使用
select * from <视图名>;
4.特点
  • 重用sql语句
  • 简化复杂的sql操作,不必知道它的查询细节
  • 保护数据,提高安全性
5.视图数据的更新
5.1 插入
insert into 视图名 values('',...);
5.2 修改
update 视图名 set ...;
5.3 删除
delete from 视图名 where ...;

具备以下特点的视图不允许修改操作:

①包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all;

②常量视图;

③select中包含子查询;

④join;

⑤from 一个不能更新的视图;

⑥where子句的子查询引用了from子句中的表

十六、存储过程

1.变量
1.1 分类
1.1.1 系统变量

**定义:**变量是由系统提供的,不是用户定义,属于服务器层面。

语法:

show variables;								#查看所有系统变量
show global|session	variables;				#查看全局|回话变量
show global|session	variables like '';		#查看满足条件的系统变量
select @@[global|session][.]系统变量名;		 #查看某个指定的变量
set [global|session] 系统变量名 =;			#设置系统变量值
set @@[global|session][.]系统变量名 =;		#设置系统变量名
#不写作用范围,默认session
  • 全局变量

    作用域:服务器每次启动将为所有的全局变量赋初始值,针对所有的回话(连接)有效,但不能跨重启。

  • 会话变量

    作用域:仅仅针对于当前回话(连接)有效。

1.1.2 自定义变量
  • 用户变量(声明必须初始化)

    作用域:针对当前回话(连接)有效,同于回话变量的作用域

    使用:

#1.声明并初始化(三种方式)
set @用户变量名=;	
set @用户变量名 :=;
select @用户变量名 :=;  #select只支持:=赋值
#2.赋值(更新用户变量的值)
##方式1:通过set或select
set @用户变量名=;	
set @用户变量名 :=;
select @用户变量名 :=;  #select只支持:=赋值
##方式2:通过select into(select查出来的必须是一个值)
select 字段 into @用户变量名 from 表名;
#3.使用
#查看
select @用户变量名;
  • 局部变量(可以只声明,不赋值)

    作用域:仅仅在定义它的begin end中有效,且为第一句话。

    使用:

    #1.声明
    declare 变量名 类型;							#只声明
    declare 变量名 类型 default 值;		 	    #声明并赋予默认值
    #2.赋值
    ##方式1:通过set或select
    set 变量名=;	
    set 变量名 :=;
    select @变量名 :=;  #select只支持:=赋值(必须加@)
    ##方式2:通过select into(select查出来的必须是一个值)
    

select 字段 into 变量名 from 表名;
#3.使用
select 局部变量名;


#### 2.存储过程和函数

##### 2.1  存储过程

###### 2.1.1  定义

​		一组预先编译好的SQL语句的集合。

###### 2.1.2  作用

​		减少了编译次数并且减少了数据库服务器的连接次数,提高了效率。

###### 2.1.3  创建与使用:

```shell
#创建
DELIMITER $$				#设置结束标记
create procedure 存储过程名(参数列表)
begin

end$$
#参数列表包含3部门		参数模式  参数名  参数类型
#参数模式:IN  OUT  INOUT
#IN			该参数可以作为输入,也就是说改参数需要调用方法传入值
#OUT		该参数可以作为输出,也就是作为返回值
#INOUT		该参数既可以作为输入又可以作为输出

#调用
call 存储过程名(实参列表);

#删除
drop procedure [if exists] 存储过程名;

#查看存储过程的结构
show create procedure 存储过程名;
2.1.4 注意
	1.如果存储过程仅仅只有一句话,`BEGIN END` 可以省略。

	2.存储过程中的每条sql语句的结尾要求必须加分号。

	3.存储过程的结尾可以使用  `DELIMITER`  重新设置。语法:`DELIMITER   结束标记`
2.2 函数
2.2.1 定义

自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序和其他 SQL 语句调用。

2.2.2 创建与使用
#创建
DELIMITER $$				#设置结束标记
create function 函数名(参数列表) returns 返回类型
begin
	函数体
	return;
end$$

#调用
select 函数名(参数列表);

#查看函数结构
show create function 函数名;

#删除
drop function [if exists] 函数名;
2.2.3 注意
  • 参数列表包含两部分:参数名、参数类型
  • 函数体肯定会有return语句,如果没有会报错
  • 如果return语句没有放在函数体的最后也不报错,但不建议
  • 当函数体中只有一句话,则可以省略between end
  • 使用delimiter设置结束标记
2.2.4 存储过程与函数的区别
  • 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入,批量更新。
  • 函数:有且仅有一个返回,适合做处理数据后返回一个结果,不允许返回结果集。
3.流程控制结构
3.1 顺序结构:程序从上往下依次执行
3.2 分支结构
3.2.1 if函数

功能:实现简单的双分支。

语法

select if(表达式1,表达式2,表达式3);
#如果表达式1成立,则返回表达式2的值,否则返回表达式3的值
3.2.2 if结构

功能:实现多重分支。

应用:只能放在begin end中。

语法

if 条件1 then 语句1;
else if 条件2 then 语句2;
...
[else 语句n;]
end if;
3.2.3 case函数

特点:

  • 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方
  • 可以作为独立的语句去使用,只能放在begin end
#类似java中的switch语句,一般用于等值判断
case 要判断的字段或表达式 	
when 常量1 then 要显示的值1或语句1		#如果是语句需要加分号
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
#类似java中的多重if语句,一般用于实现区间判断
case								
when 条件1 then 要显示的值1或语句1		#如果是语句需要加分号
when 条件1 then 要显示的值2或语句2
...
else 要显示的值n或语句n			#可以省略,如果else省略了,且所有when都不满足,返回null
end
3.3 循环结构

分类

  • while
  • loop
  • repeat

循环控制

  • iterate类似于continue继续,结束本次循环,继续下一次
  • leave类似于 break跳出,结束当前所在循环

语法:

#while
[标签:] while 循环条件 do						#先判断再循环
		循环体;
end while [标签];
#loop
[标签:] loop								  #没有条件的死循环
		循环体;
end loob [标签];
#repeat
[标签:] repeat								#先执行再判断  类似do...while
		循环体;
until 结束循环的条件
end repeat [标签];

*:只能放在begin end中。

语法

if 条件1 then 语句1;
else if 条件2 then 语句2;
...
[else 语句n;]
end if;
3.2.3 case函数

特点:

  • 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方
  • 可以作为独立的语句去使用,只能放在begin end
#类似java中的switch语句,一般用于等值判断
case 要判断的字段或表达式 	
when 常量1 then 要显示的值1或语句1		#如果是语句需要加分号
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end
#类似java中的多重if语句,一般用于实现区间判断
case								
when 条件1 then 要显示的值1或语句1		#如果是语句需要加分号
when 条件1 then 要显示的值2或语句2
...
else 要显示的值n或语句n			#可以省略,如果else省略了,且所有when都不满足,返回null
end
3.3 循环结构

分类

  • while
  • loop
  • repeat

循环控制

  • iterate类似于continue继续,结束本次循环,继续下一次
  • leave类似于 break跳出,结束当前所在循环

语法:

#while
[标签:] while 循环条件 do						#先判断再循环
		循环体;
end while [标签];
#loop
[标签:] loop								  #没有条件的死循环
		循环体;
end loob [标签];
#repeat
[标签:] repeat								#先执行再判断  类似do...while
		循环体;
until 结束循环的条件
end repeat [标签];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值