MySQL学习记录(7)

学习内容:MySQL编程基础


一、MySQL语言编程

MySQL编程语言按功能划分,可分为四类

1.数据定义语言(DDL)

最基础,用来执行数据库的任务,如创建、修改或删除数据库对象。这些数据库对象包括数据库、表、触发器、索引、视图、函数、类型以及用户等。
常见的数据定义语言有CREATE 语句、ALTER语句、DROP语句。

2.数据操作语言(DML)

用于操作数据库各种对象,检索和修改数据等。
常见的数据操作语言有SELECT语句、INSERT语句、UPDATE语句、DELETE语句。

3.数据控制语言(DCL)

用于安全管理,确定用户权限。默认情况下,只有sysadmin、dbcreator、db_owner等角色的用户成员才有权限执行数据控制语句。
常见的数据控制语言有:

  • GRANT:授予权限,将语句权限或者对象权限授予其他用户或角色。
  • REVOKE:删除权限。
  • DENY:用于拒绝给当前数据库内的用户或角色授予权限,并防止用户或角色通过组或角色成员继承权限。

4.MySQL增加的语言元素

不是SQL标准所包含的内容,而是为了用户编程的方便增加的语言元素,如常量、变量、运算符等。

二、认识常量和变量

1.常量

  • 字符串常量
    括在单引号内,包含字母和数字字符以及特殊字符,如!、@、#。
    若单引号的字符串包含一个嵌入的引号,可以用两个单引号表示嵌入的单引号。

  • 数值常量
    包括整数和小数,不需要用单引号括上。

  • 十六进制常量
    默认类型为字符串。可以写成如 X’41’ 或 0x41。
    若需将字符串作为数字处理,可以使用cast(ASUNSIGNED)函数来转换。若要将一个字符串或数字转换成十六进制格式的字符串,可以使用hex()函数来转换。

  • 日期和时间常量
    要用单引号括起来。在MySQL中,日期是按照年-月-日的顺序来表示的,中间的间隔符“-”也可以使用 “\” “@” “%”等特殊符号。

  • 布尔值
    TRUE,其数字值为1;FALSE,其数字值为0。

  • NULL值
    常用来表示“没有值” “无数据”等意义,并且不同于数字类型的“0”或字符串类型的空字符串。

2.变量

分为用户变量和系统变量。
(1)用户变量
用户可自定义的变量,作用范围仅在程序内部。用DECLARE 关键字来定义变量。
语法格式

DECLARE var_name[,···] type [DEFAULT value]

var_name:变量的名称,可同时定义多个变量。
type:指定变量类型。
DEFAULT value:为变量提供一个默认值,可以是常数或表达式。若未指定默认值,初始值为NULL。

变量赋值:SET语句 和 SELECT···INTO语句。
若要设置局部变量的值,可以用SET语句为变量赋值,语法格式

SET var_name=expr [,varchar_name2=expr]···

SET:可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。@符号必须放在用户变量的前面,以便将它和列名区分开。

DECLARE v1,v2 int;
DECLARE v3 char(50);
Set @v1=66,@v2=88,@v3=’自定义变量’;

SELECT ···INTO语句:实现将SELECT选定的列值直接存储在对应位置的变量中。

SELECT clo_name[,···] INTO var_name[,···]
FROM table_name WHERE condition;

(2)系统变量
MySQL系统提供的内部使用的变量,无需用户定义,可直接使用,任何程序均可随时调用。引用时一般以标记符“@@”开头。

select @@version as 'MySQL版本';
--返回当前MySQL版本信息

三、常用运算符及优先级

1.算数运算符

               + ,-,*,/,%

2.比较运算符

  = ,<=> 完全等于(可以比较NULL),
  <> 不等于, <= , >= , < , >
  IS NULL , IS NOT NULL
  LEAST 在有两个或多个参数时,返回最小值
  GREATEST 当有两个或多个参数时,返回最大值
  BETWEEN AND 判断一个值是否落在两个值之间
  IN 判断一个值是IN列表中的任意一值
  NOT IN 判断一个值不是IN列表中的任意一值
  LIKE 通配符匹配
  REGEXP 正则表达式匹配   

“=” 比较规则:

  • 若一个或两个参数为NULL,则比较运算的结果为NULL。
  • 若一个字符串和一个数字进行相等判断,则MySQL可以自动将字符串转换成数字。

“<=>"比较规则:

  • 可以用来判断NULL值。若两个操作数均为NULL,则返回值为1;当其中一个操作数为NULL时,其返回值为0。

3.逻辑运算符

作用运算符
逻辑非NOT 或者 !
逻辑与AND 或者 &&
逻辑或OR 或者 ||
逻辑异或XOR

(1)NOT 或者 !
操作数为0时,返回值为1;操作数为NULL时,返回值为NULL;否则返回值为0。
注意: “NOT 7+7” 与 “! 7+7” 结果不同,因为NOT与 “ !”的优先级不同。
“NOT 7+7” 先计算7+7,再进行逻辑非运算,最后返回值为0; “! 7+7” 先进行逻辑非运算“!7”结果为0,再加法运算,最后返回值为7。
(2)AND 或者 &&
当所有操作数均为非零值、并且不为NULL时,返回值为1;当一个或多个操作数为0时,返回值为0;其余返回值为NULL。
(3)OR 或者 ||
当两个操作数均为非NULL值,且其中一个操作数为非零值时,结果为1,否则结果为0;当有一个操作数为NULL,且另一个操作数为非零值时,则结果为1,否则结果为NULL;当两个操作数均为NULL,则所得结果为NULL。
(4)XOR
当任意一个操作数为NULL时,返回值为NULL;对于非NULL的操作数,如果两个都是非0或都为0,则返回值为0;如果一个为0,另一个为非0,返回值为1。

4.位运算符

运算符作用
|位或
&位与
^位异或
<<位左移
>>位右移
~位取反

四、流程控制语言

IF, CASE ,LOOP, LEAVE , ITERATE ,REPEAT ,WHILE 语句。

1.IF 语句

语法格式

IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]···
[ELSE statement_list]
END IF
  • search_condition:条件判断语句。
  • statement_list:表示不同条件的执行语句,可以包含一条或多条语句。

2.CASE语句

语法格式

CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]···
[ELSE statement_list]
END CASE
  • case_value:表示条件判断的表达式
  • when_value:表达式可能的取值。

另一种语法格式:

CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list]···
[ELSE statement_list]
END CASE

3.LOOP语句

LOOP语句本身并不进行条件判断,没有停止循环的语句,必须使用LEAVE语句才能跳出循环。
语法格式

[begin_label:]LOOP
statement_list
END LOOP[end_label]

statement_list:表示需要循环执行的语句。
例如:

DECLARE aa int default 0;
add_sum:LOOP
SET aa=aa+1;
END LOOP add_sum;
--执行的是aa加1的操作,没有跳出循环语句,所以为死循环。

4.LEAVE语句

跳出任何被标注的流程控制语句。LEAVE label

DECLARE aa int default 0;
add_sum:LOOP
SET aa=aa+1;
IF aa>50 EHEN LEAVE add_sum;
END IF;
END LOOP add_sum;

5.ITERATE语句

ITERATE 语句也是用来跳出循环的语句。但ITERATE 只可以出现在LOOP、REPEAT 和WHILE 语句内。跳出本次循环,然后直接进入下一次循环。ITERATE label

CREATE PROCEDURE pp (a INT)
BEGIN 
la:LOOP
SET a=a+1;
IF a<10 THEN ITERATE la;
END IF;
LEAVE la;
END LOOP la;
SET @x=a;
END

6.REPEAT 语句

带条件判断的循环过程。循环语句每次执行完都会对表达式进行判断,若表达式为真,则结束循环,否则再次重复执行循环中的语句。相当于do while
语法格式

[begin_label:]REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]

7.WHILE 语句

WHILE 在执行语句前,先对条件表达式进行判断,若为真,则执行循环内的语句。
语法格式

[begin_label:]WHILE search_condition DO
statement_list
END WHILE [end_label]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值