MYSQL学习笔记(个人)(第十三天)
创建了一个Student的数据库进行学习,里面有两个基础表——Student和Score:常量即在程序运行过程中恒定不变的值,分为字符串常量、数值常量、日期时间常量和布尔常量等。和c++差不多,字符串就是“hello”,“He said: \"hello.\" ”,(ts:\" 为转义字符,表示冒号里的”)。数值就是整数类型和浮点数类型。日期是DATA(“年-月-日”),时间为TIME类型(“8:
自学《数据库系统原理与应用》——— 黄宝贵、马春梅、禹继国 —— 清华大学出版社
创建了一个Student的数据库进行学习,里面有两个基础表——Student和Score:
SQL基础编程
常量:
常量即在程序运行过程中恒定不变的值,分为字符串常量、数值常量、日期时间常量和布尔常量等。和c++差不多,字符串就是“hello”,“He said: \"hello.\" ”,(ts:\" 为转义字符,表示冒号里的”)。数值就是整数类型和浮点数类型。日期是DATA(“年-月-日”),时间为TIME类型(“8:10:20),如果时间和日期混用,类型就为DATETIME。
变量:
和上面的常量相对,为可以变化的数据,分为系统变量、用户变量和局部变量三种。
系统变量:
系统变量一般以@@开头,如@@VERSION为系统版本号。系统变量也分为全局变量和会话变量,前者改变会影响服务器,后者只影响当前会话。
查看系统变量的语句为:
SHOW [GLOBAL | SESSION] VARIABLES [LIKE‘字符串’];
其中:
(1) GLOBAL表示全局变量,SESSION表示会话变量。若都省略,则默认为会话变量。
(2)“LIKE '字符串‘”一般是含有通配符的变量名,若省略该项,则表示查看所有变量。
如:SHOW GLOBAL VARIABLES;查看所有全局变量
也可以使用以下语句:
SELECT @@[GLOBAL. | SESSION. ]变量名1 [, @@ [GLOBAL. | SESSION.]変量名2, ...];
如查看全局系统变量sort_buffer_size : SELECT @@GLOBAL.sort_buffer_size;
查看会话变量就是把GLOBAL 换成 SESSION 即可。
给系统变量赋值语句为:
SET [GLOBAL | SESSION] 系统变量名 = 表达式。
SET @@[GLOBAL. | SESSION.] 系统变量名 = 表达式。
用户变量:
用户自己定义的变量称为用户变量。一般以一个@开头,如@sname,该变量无法被其他客户端使用,断开连接后也会自动销毁。
定义和初始化的方法有三种:
SET @用户变量 = 表达式;
SET @用户变量:= 表达式;
SELECT @用户变量:= 表达式;
如,SET @username = ‘舟舟’;
SET @sex:= '女';
SELECT @id:= '123456';
SELLECT @username,@sex,@id;
使用用户变量查询Score表中id为01的学生平均成绩:
SET @score = (SELECT AVG(score) FROM Score WHERE id = '01');
(st:AVG()是平均值函数)
局部变量:
使用DECLARE声明,该命令执行完后就会自动释放。作用范围在BEGIN········END之间。
声明局部变量方法:
DECLARE 变量名列表 类型 [DEFAULT 值]
如:
DECLARE num INT DEFAULT 10;把10作为默认值赋给num变量。
局部变量赋值:
SET 变量名 = 表达式;
SELECT 字段表达式 INTO 局部变量列表 FROM 表名 [WHERE <条件>];
如:
SELECT sname(*) INTO num FROM Student WHERE sex = ‘男’;
SQL流程控制语句:
1.分支结构:
1.if语句:
IF条件表达式 1 THEN 语句序列1;
[ELSEIF条件表达式2 THEN语句序列2;]
...
[ELSE语句序列n; ]
END IF;
如计算学号为01的学生的成绩平均分,大于80为“良好”,小于80但大于60为及格,小于60为不及格:
BEGIN
DECLARE co FLOAT;
SELECT ROUND(AVG(score),2) INTO co FROM Score WHERE id = '01';
IF(co >= 80.0) THEN
SELECT '良好';
ELSE IF(co >= 60) THEN
SELECT '及格';
ELSE SELECT '不及格';
END IF;
END;
没法之间写,要在后面的存储过程和函数中参能写,所以不提供例子。
2.case语句:
CASE选择变量名
WHEN表达式1 THEN语句序列 1;
WHEN表达式2 THEN语句序列 2;
·······
WHEN表达式n THEN语句序列 n;
ELSE语句序列 n+1;
END CASE;
与if相比,这个只能用整数,与c++的使用方式类似。
还有一个方法:
CASE 变量名
WHEN 条件表达式1 THEN 语句序列 1;
WHEN 条件表达式2 THEN 语句序列 2;
·······
WHEN 条件表达式n THEN 语句序列n;
ELSE 语句序列n+ 1;
END CASE;
2.循环结构:
1.while循环:
WHILE 条件表达式 DO
循环体语句;
END WHILE;
如计算1~100的和:
BEGIN
DECLARE V_C,V_SUM INTO DEFAULT 0;
WHILE V_C < 100 DO
SET V_C = V_C + 1;
SET V_SUM = V_SUM + V_C;
END WHILE;
SELECT V_SUM AS 1 到 100的和;
END;
AS 表示以左边的字符串或参数作为右边数据的表格上标。
2.REPEAT循环:
属于无条件循环
REPEAT
循环体语句;
UNTIL条件表达式
END REPEAT;
类似c++的do while
还是上面的计算1~100:
BEGIN
DECLARE V_C,V_SUM INTO DEFAULT 0;
REPEAT
SET V_C = V_C + 1;
SET V_SUM = V_SUM + V_C;
UNTIL V_C >=100
END REPEAT;
SELECT V_SUM AS 1 到 100的和;
END;
3.LOOP循环:
[语句标号:]LOOP
循环体语句;
LEAVE语句标号;
END LOOP [语句标号];
BEGIN
DECLARE V_C,V_SUM INT DEFAULT 0;
labell: LOOP
SET V_C=V_C+ 1;
SET V_SUM = V_SUM + V_C;
IF V_C = 100 THEN
LEAVE labell;
END IF;
END LOOP labell;
SELECT V_SUM AS 1 到 100的和;
END;
使用if语句调控,到达临界,用 LEAVE 语句离开循环。
异常处理:
DECLARE handle_action HANDLER FOR condition_value statement
当condition_valuve 条件满足时,发生异常,则先执行satemert处理语句,再执行handle_ action 动作。
condition_ value的取值有以下几种情况:
①mysql error_ code: MySQL的错误码,为整数类型。例如,错误码1602表示重复键值。②SQLSTATE sqlstate_ value: 用五个字符表示的SQLSTATE值。例如,SQLSTATE'23000'也表示重复键值。
③condition_ name:处理条件的名称。
④NOT FOUND:所有以02开头的SQLSTATE代码的速记。
⑤SQLWARNING:所有以01开头的SQLSTATE代码的运记。
⑥SQLEXCEPTION:所有不以00、01、02开头的SQLSTATE代码的运记。
原本想把存储结构和函数游标一起写的,时间不是很够,明天补。
更多推荐
所有评论(0)