首页 理论教育 MySQL数据库应用教程

MySQL数据库应用教程

时间:2026-01-27 理论教育 可欣 版权反馈
【摘要】:MySQL程序设计结构是在SQL标准的基础上增加了一些程序设计语言的元素,其中包括常量、变量、运算符、表达式、流程控制以及函数等。0x4D7953514C表示字符串MySQL。关于局部变量的其他说明:在MySQL数据库中,由于局部变量涉及begin-end语句块、函数、存储过程等知识,局部变量的具体使用方法将结合这些知识稍后进行讲解。

MySQL程序设计结构是在SQL标准的基础上增加了一些程序设计语言的元素,其中包括常量、变量、运算符、表达式、流程控制以及函数等。

6.1.1 常 量

按照MySQL的数据类型进行划分,可以将常量划分为字符串常量、数值常量、十六进制常量、日期时间常量、二进制常量以及NULL。

1.字符串常量

字符串常量是指用单引号或双引号括起来的字符序列。select 'I\'m a \teacher' as col1,"you're a stude\nt" as col2;

由于大多编程语言(例如Java、C等)使用双引号表示字符串,为了便于区分,在MySQL数据库中推荐使用单引号表示字符串。

2.数值常量

数值常量可以分为整数常量(如2013)和小数常量(如5.26、101.5E5),这里不再赘述。

3.日期时间常量

日期时间常量是一个符合特殊格式的字符串。例如'14:30:24'是一个时间常量,'2008-05-12 14:28:24'是一个日期时间常量。日期时间常量的值必须符合日期、时间标准,例如'1996-02-31'是一个错误的日期常量。

4.布尔值

布尔值只包含两个可能的值:true和false。

说明:使用select语句显示布尔值true或者false时,会将其转换为字符串“0”或者字符串“1”。

5.二进制常量

二进制常量由数字“0”和“1”组成。二进制常量的表示方法为:前缀为“b”,后面紧跟一个“二进制”字符串。例如,下面的select语句输出三个字符:其中b‘111101’表示“等号”,b‘1’表示“笑脸”,b‘11’表示“心”。

select b'111101',b'1',b'11';

6.十六进制常量

十六进制常量由数字“0”到“9”及字母“a”到“f ”或“A”到“F”组成(字母不区分大小写)。十六进制常量有两种表示方法:

第一种表示方法:前缀为大写字母“X”或小写字母“x”,后面紧跟一个“十六进制”字符串。

例如,select X'41',x'4D7953514C';其中X'41'表示大写字母A。x'4D7953514C'表示字符串MySQL。

第二种表示方法:前缀为“0x”,后面紧跟一个“十六进制数”(不用引号)。

例如,select 0x41,0x4D7953514C;

其中0x41表示大写字母A。0x4D7953514C表示字符串MySQL。

可以看到,使用select语句显示十六进制数时,会将十六进制数自动转换为“字符串”再进行显示。如果需要将一个字符串或数字转换为十六进制格式的字符串,可以用hex()函数实现。

例如,select hex('MySQL');

hex()函数将“MySQL”字符串转换为十六进制数4D7953514C。

小结:十六进制数与字符之间存在一一对应关系,利用这个特点,可以模拟实现中文全文检索。

7.NULL值

NULL值可适用于各种字段类型,它通常用来表示“值不确定”“没有值”等意义。NULL值参与算术运算、比较运算以及逻辑运算时,结果依然为NULL。

6.1.2 用户自定义变量

变量分为系统变量(以@@开头)以及用户自定义变量。

用户自定义变量分为用户会话变量(以@开头)以及局部变量(不以@开头)。

MySQL客户机1定义了会话变量,会话期间,该会话变量一直有效;MySQL客户机2不能访问MySQL客户机1定义的会话变量;MySQL客户机1关闭或者MySQL客户机1与服务器断开连接后,MySQL客户机1定义的所有会话变量将自动释放,以便节省MySQL服务器的内存空间。

用户会话变量如图6.1所示。

图示(https://www.xing528.com)

图6.1 用户会话变量

系统变量与用户会话变量的共同之处在于:变量名大小写不敏感。系统会话变量与用户会话变量的区别在于:用户会话变量一般以一个“@”开头,系统会话变量以两个“@”开头;系统会话变量无需定义可以直接使用。

1.用户会话变量的定义与赋值

(1)定义局部变量。

使用DECLARE语句声明局部变量。例如,声明一个整型变量和两个字符变量:

DECLARE num INT(4);

DECLARE str1,str2 VARCHAR(6);

说明:局部变量只能在BEGIN_END语句块中声明。

(2)局部变量赋值。

① 使用SET语句赋值。

要给局部变量赋值,可以使用SET语句。例如:

SET num=1,str1= 'hello';

说明:这条语句无法单独执行,只能在存储过程和存储函数中使用。

② SELECT...INTO语句。

格式:select 字段列表 表达式 … into 变量列表

使用SELECT…INTO语句可以把选定的列值直接存储到变量中。因此,返回的结果只能有一行。

例如:

SELECT 姓名,专业 INTO name,project

FROM XSB

WHERE 学号= '081101';

2.局部变量与用户会话变量的区别

(1)用户会话变量名以“@”开头,而局部变量名前面没有“@”符号。

(2)局部变量使用declare命令定义(存储过程参数、函数参数除外),定义时必须指定局部变量的数据类型;局部变量定义后,才可以使用set命令或者select语句为其赋值。

用户会话变量使用set命令或select语句定义并进行赋值,定义用户会话变量时无需指定数据类型。诸如“declare @student_no int;”的语句是错误语句,用户会话变量不能使用declare命令定义。

(3)用户会话变量的作用范围与生存周期大于局部变量。局部变量如果作为存储过程或者函数的参数,此时在整个存储过程中或函数内有效;如果定义在存储程序的begin-end语句块中,此时仅在当前的begin-end语句块中有效。用户会话变量在本次会话期间一直有效,直至关闭服务器连接。

(4)如果局部变量嵌入到SQL语句中,由于局部变量名前没有“@”符号,这就要求局部变量名不能与表字段名同名,否则将出现无法预期的结果。

关于局部变量的其他说明:

在MySQL数据库中,由于局部变量涉及begin-end语句块、函数、存储过程等知识,局部变量的具体使用方法将结合这些知识稍后进行讲解。

declare命令尽量写在begin-end语句块的开头,尽量写在任何其他语句的前面。

delimiter $$

select * from student where student_name like '张_'$$

delimiter;

select * from student where student_name like '张_';

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈