WEB数据库应用
任务引入2分钟]
任务分析[10分钟]
MySQL语言结构
在深入学习MySQL之前,我们要了解MySQL的语言结构。
MySQL支持SQL数据库语言的关系数据库服务器。在MySQL数据库中存储、查询及更新数据的语言是遵守SQL标准的,但MySQL也对它进行了相应的扩展。
在MySQL数据库中,SQL语言由以下几部分组成。
(1)数据定义语言(DDL)。用于执行数据库的任务,对数据库及数据库中的各种对象进行创建、删除、修改等操作。如前所述,数据库对象主要包括:表、默认约束、规则、视图、触发器、存储过程等。DDL包括的主要语句及功能如表6.1所示。
表6.1 DDL主要语句及功能
(2)数据操纵语言(DML)。用于操纵数据库中各种对象,检索和修改数据。DML包括的主要语句及功能如表6.2所示。
表6.2 DML主要语句及功能
讲解相关知识[25分钟]
(3)数据控制语言(DCL)。用于安全管理,确定哪些用户可以查看或修改数据库中的数据,DCL包括的主要语句及功能如表6.3所示。
表6.3 DCL主要语句及功能
(4)MySQL增加的语言元素。这部分不是SQL标准所包含的内容,而是为了用户编程的方便增加的语言元素。这些语言元素包括常量、变量、运算符、函数、流程控制语句和注解等。本章将具体讨论使用MySQL这部分增加的语言元素。
每个SQL语句都以分号结束,并且SQL处理器忽略空格、制表符和回车符。
一、常量和变量
(一)常量
1. 字符串常量
字符串是指用单引号或双引号括起来的字符序列,分为ASCII字符串常量和Unicode 字符串常量。
ASCII字符串常量是用单引号括起来的,由ASCII字符构成的符号串。
举例:‘hello’‘How are you!’
Unicode 字符串常量与ASCII字符串常量相似,但它前面有一个N 标志符(N代表SQL-92标准中的国际语言(National Language))。N前缀必须为大写。只能用单引号括起字符串。
举例:N‘hello’N‘How are you!’
Unicode 数据中的每个字符用两个字节存储,而每个ASCII字符用一个字节存储。
在字符串中不仅可以使用普通的字符,也可使用几个转义序列,它们用来表示特殊的字符,见表 6.4。每个转义序列以一个反斜杠(“\”)开始,指出后面的字符使用转义字符来解释,而不是普通字符。注意NUL 字节与NULL 值不同,NUL 为一个零值字节,而NULL 代表没有值。
【例6.1】执行如下语句:
SELECT 'This\nIs\nFour\nLines';
结果为:
(二)变量
1.用户变量
用户可以在表达式中使用自己定义的变量,这样的变量叫做用户变量。
用户可以先在用户变量中保存值,然后在以后引用它,这样可以将值从一个语句传递到另一个语句。在使用用户变量前必须定义和初始化。如果使用没有初始化的变量,它的值为NULL。
用户变量与连接有关。也就是说,一个客户端定义的变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有变量将自动释放。
定义和初始化一个变量可以使用SET语句,语法格式为:
SET @user_variable1=expression1 [,user_variable2= expression2 , …]
其中,user_variable1、user_variable2为用户变量名,变量名可以由当前字符集的文字数字字符、“.”、“_”和“$”组成。当变量名中需要包含了一些特殊符号(如空格、#等)时,可以使用双引号或单引号将整个变量括起来。
expression1、expression2为要给变量赋的值,可以是常量、变量或表达式。
【例6.7】创建用户变量name并赋值为“王林”。
SET @name='王林';
2.系统变量
MySQL有一些特定的设置,当MySQL数据库服务器启动的时候,这些设置被读取来决定下一步骤。例如,有些设置定义了数据如何被存储,
有些设置则影响到处理速度,还有些与日期有关,这些设置就是系统变量。和用户变量一样,系统变量也是一个值和一个数据类型,但不同的是,系统变量在MySQL服务器启动时就被引入并初始化为默认值。附录G中列出了绝大多数的系统变量。
【例6.14】获得现在使用的MySQL版本。
SELECT @@VERSION ;
结果为:
二、运算符与表达式
1.算术运算符
算术运算符在两个表达式上执行数学运算,这两个表达式可以是任何数字数据类型。算术运算符有:+(加)、 (减)、*(乘)、/(除)和%(求模)5种运算。
2.比较运算符
比较运算符(关系运算符),用于比较两个表达式的值,其运算结果为逻辑值,可以为三种之一:1(真)、0(假)、NULL(不能确定)。
表6.5 比较运算符
3.逻辑运算符
逻辑运算符用于对某个条件进行测试,运算结果为TRUE(1)或FALSE(0)。MySQL提供的逻辑运算符如表6.6所示。
表6.6 逻辑运算符
任务实施[40分钟]
4.位运算符
位运算符在两个表达式之间执行二进制位操作,这两个表达式的类型可为整型或与整型兼容的数据类型(如字符型,但不能为image类型),位运算符如表6.7所示。
表6.7 位运算符
5.运算符优先等级
表6.8 运算符优先级
6.表达式
表达式就是常量、变量、列名、复杂计算、运算符和函数的组合。一个表达式通常可以得到一个值。与常量和变量一样,表达式的值也具有某种数据类型,可能的数据类型有字符类型、数值类型、日期时间类型。这样,根据表达式的值的类型,表达式可分为字符型表达式、数值型表达式和日期表达式。
【例6.2】执行下面的语句:
展示评价(10分钟)小结作业[3分钟]
SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
【例6.3】执行如下语句:
SELECT 0x41, CAST(0x41 AS UNSIGNED);
【例6.4】将字符串CAT转换为16进制。
SELECT HEX('CAT');
【例6.5】执行下列语句:
SELECT BIN(b'111101'+0), OCT(b'111101'+0);
【例6.6】获取TRUE和FALSE的值。
SELECT TRUE, FALSE;
【例6.8】创建用户变量user1并赋值为1,user2赋值为2,user3赋值为3。
SET @user1=1, @user2=2, @user3=3;
定义用户变量时变量值可以是一个表达式。
【例6.9】创建用户变量user4,它的值为user3的值加1。
SET @user4=@user3+1;
在一个用户变量被创建后,它可以以一种特殊形式的表达式用于其他SQL语句中。变量名前面也必须加上符号@。
【例6.10】查询例6.7中创建的变量name的值。
SELECT @name;
【例6.11】使用查询给变量赋值。
USE XSCJ
SET @student=(SELECT 姓名FROM XS WHERE 学号='081101');
【例6.12】查询表XS中名字等于例6.11中student值的学生信息。
SELECT 学号, 姓名, 专业名, 出生日期
FROM XS
WHERE 姓名=@student;
各组派代表展示结果,各小组互评结果。
本次课我们熟悉了MySQL的语言结构,对常量、变量、运算符、表达式有了一定了解,为后面的学习奠定了基础。
作业:熟悉常用的运算符