Mysql
Mysql
库
CREATE DATABASE myschool; #创建数据库 SHOW DATABASES; #查看数据库
表
# 创建表 DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `deptid` int(11) NOT NULL AUTO_INCREMENT, `deptname` varchar(50) DEFAULT NULL, `deptnum` int(11) DEFAULT NULL, `deptdesc` varchar(50) DEFAULT NULL, PRIMARY KEY (`deptid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; # 删除表 DROP TABLE IF EXISTS `emp`; CREATE TABLE `emp` ( `empid` int(11) NOT NULL AUTO_INCREMENT, `empname` varchar(255) DEFAULT NULL, `empsex` varchar(255) DEFAULT NULL, `empage` int(255) DEFAULT NULL, `empphone` varchar(255) DEFAULT NULL, `empaddress` varchar(255) DEFAULT NULL, `empdate` datetime DEFAULT NULL, `deptid` int(11) DEFAULT NULL, PRIMARY KEY (`empid`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; # 修改表 # ALTER TABLE 表名称 RENAME [TO] 新表名称 #判断表是否存在 DROP TABLE IF EXISTS demo01; CREATE TABLE demo01( id INT(4) Not NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10) NOt NULL ); ALTER TABLE demo01 RENAME demo02 #添加字段 # ALTER TABLE 表名称 ADD 字段名 数据类型 [属性] ALTER TABLE demo02 ADD `password` VARCHAR(20) NOT NULL; #修改字段 # ALTER TABLE 表名称 CHANGE 原字段名称 新字段名称 数据类型【属性】 ALTER TABLE demo02 CHANGE `name` username VARCHAR(10) NOT NULL #删除字段 # ALTER TABLE 表名称 DROP 字段名称 ALTER TABLE demo02 DROP `password` #添加主键 # ALTER TABLE 表名称 ADD CONSTRAINT 主键名 PRIMARY KEY(主键字段名称) ALTER TABLE demo02 ADD CONSTRAINT PK_id PRIMARY KEY(id) #添加外键 # ALTER TABLE 表名称 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 关联表名称(关联字段) ALTER TABLE emp ADD CONSISTENT FK_deptid FOREIGN KEY(deptid) REFERENCES dept(deptid)
新增
# 新增 # INSERT INTO 表名(列名) values(字段值) INSERT INTO dept ( `deptname`, `deptnum`, `deptdesc`) VALUES (‘财务部‘, 3, ‘财务‘); INSERT INTO dept VALUES (null, ‘行政部‘, 2, ‘行政‘); INSERT INTO emp (`empid`, `empname`, `empsex`, `empage`, `empphone`, `empaddress`, `empdate`, `deptid`) VALUES (null, ‘曾小贤‘, ‘男‘, 22, ‘133346122834‘, ‘上海‘, "2012-5-1 16:15:32", 2); INSERT INTO emp (`empid`, `empname`, `empsex`, `empage`, `empphone`, `empaddress`, `empdate`, `deptid`) VALUES (null, ‘吕子乔‘, ‘男‘, 24, ‘13973627234‘, ‘上海‘, "2012-4-1 16:16:53", 2); INSERT INTO emp (`empid`, `empname`, `empsex`, `empage`, `empphone`, `empaddress`, `empdate`, `deptid`) VALUES (null, ‘美嘉‘, ‘女‘, 21, ‘13323456734‘, ‘杭州‘, "2012-6-5 12:48:40", 1); INSERT INTO emp (`empid`, `empname`, `empsex`, `empage`, `empphone`, `empaddress`, `empdate`, `deptid`) VALUES (null, ‘胡一菲‘, ‘女‘, 20, ‘13823452346‘, ‘杭州‘, "2012-6-19 12:49:37", 1), (null, ‘李婉钰‘, ‘女‘, 23, ‘13823458761‘, ‘上海‘, "2012-6-5 14:19:24",null), (null, ‘展博‘, ‘男‘, 23, ‘13627348238‘, ‘南京‘, "2012-4-8 17:06:46", 3), (null, ‘关谷神奇‘, ‘男‘, 23, ‘138234?15672‘, ‘北京‘, "2012-4-1 17:08:28", 4);
修改
# 修改 # UPDATE 表名 SET 字段名称 = 字段值, .. where ...
简单查询
#简单查询 # SELECT */列名 别名 FROM 表名 #查询全部 SELECT * FROM dept; #查询返回指定的列 SELECT deptid, deptname FROM dept #查询带别名 SELECT deptid 部门编号, deptname 部门名称 FROM dept; SELECT deptid AS ‘部门编号‘, deptname AS ‘部门名称‘ FROM dept; # 查询去掉重复项 SELECT DISTINCT deptnum FROM dept;
限定查询
#限定查询 #查询员工年龄大于23岁的雇员 SELECT * FROM emp where empage > 23 #查询没有员工地址的雇员信息 SELECT * FROM emp where empaddress = ‘‘; #曾经存在后来删除,存储的是empty UPDATE emp set empaddress = null where empid = 4; SELECT * FROM emp where empaddress = NULL; # 查询不出来,需要使用is SELECT * FROM emp where empaddress is NULL #查询年龄大于20,同时员工地址为上海的雇员信息 SELECT * FROM emp where empage > 20 and empaddress = ‘上海‘ #查询年龄不大于20,且员工地址不为上海的雇员信息 SELECT * FROM emp where empage <= 20 and empaddress != ‘上海‘ SELECT * FROM emp where NOT (empage > 20 OR empaddress = ‘上海‘) #查询年龄大于24,或员工地址为上海的雇员信息 SELECT * FROM emp where empage >= 24 OR empaddress = ‘上海‘ #查询年龄在20岁到23岁之间的雇员信息 SELECT * FROM emp where empage BETWEEN 20 AND 23 SELECT * FROM emp where empage >= 20 and empage <= 23 #查询入职日期在2012-3-1日之后的元素 SELECT * FROM emp where empdate >= ‘2012-4-8‘ #查询员工编号为1,2,3号的员工 SELECT * FROM emp where empid in(1,2,3) #查询员工编号不为1,2,3号的员工 SELECT * FROM emp where empid not in(1,2,3) #查询员工姓名为曾小贤,胡一菲的两名员工信息 SELECT * FROM emp where empname in(‘曾小贤‘,‘胡一菲‘) #查询所有员工中姓名带“小”的 SELECT * from emp where empname like ‘%小‘ #以小结尾 SELECT * from emp where empname like ‘曾%‘ #以曾开头 SELECT * from emp where empname like ‘%小%‘ #含小就行 #查询姓名中第二个字为“一”的员工信息 SELECT * from emp where empname like ‘_一%‘ #查询2012年入职的员工 SELECT * from emp where empdate like ‘2012%‘ #在操作条件中还可以使用 >、>=、<、<= 等条件符号 #不等于在sql中可有两种形式:”<>”、“!=” select * from emp where empid != 1
查询结果排序
#对查询结果进行排序 #要求员工年龄由低到高排序 SELECT * FROM emp ORDER BY empage SELECT * FROM emp ORDER BY empage ASC #要求员工年龄由高到低排序 SELECT * FROM emp ORDER BY empage DESC #要求查询出2012-04之后入职的员工, #查询信息按员工年龄由高到低,如年龄相等,按雇员编号的降序排列 SELECT * FROM emp where empdate > ‘2012-04-08‘ ORDER BY empage DESC, empid DESC
关联查询
#表之间的关联关系 /** 学生表: student 商品 --- 订单 --- 会员 课程表: subject 员工(多) --- 部门(一) 成绩表: result 年级表 grade 关系型数据中的3种关系 一对一:学生表 --- 学生详情 一对多/多对一: grade(一) --- student(多) / 一(会员) --- 多(订单) 多对多 : student(多) --- subject(多) / 多(商品) --- 多(订单) 表中如何确定唯一条记录? 通过主键的设计 表如何表达关联关系? 1.通过表中设计外键,也就是说外键就是表达关联关系的字段. 2.一般在多方设置外键。在多方表添加一个字段,表达关联关系。 3.外键列名称 = 关联表主键列名称 4. 一个表可以有多个外键,也可以有多个主键(双主键) 作用: 关系是为了保证数据库中数据的完整性 */ # 多表查询 #同时查询部门和员工表 SELECT * FROM dept, emp; #24 4部门 * 6员工 #查询dept/emp数量 SELECT count(*) FROM dept; #4 select count(*) from emp; #6 #掉笛卡尔乘积的查询 select * from dept, emp where dept.deptid = emp.deptid; #查询员工编号,员工姓名,员工性别,员工年龄,员工地址,所属部门名称 select B.empid as 员工编号, B.empname as 员工姓名, B.empsex as 员工性别, B.empage as 员工年龄, B.empaddress as 员工地址,A.deptname as 所属部门名称 from dept as A, emp as B where A.deptid = B.deptid #内连接、左连接、右连接 #内连接 select emp.*, dept.deptname from dept INNER JOIN emp ON dept.deptid = emp.deptid; #左连接 --- 以左边表为主,关联与否都查 select * from dept LEFT JOIN emp ON dept.deptid = emp.deptid; #右连接 --- 以右边表为主,关联与否都查 select * from dept RIGHT JOIN emp ON dept.deptid = emp.deptid; #子查询 #子查询是一个嵌套在select insert update delete语句中的查询语句 #查询技术部下所有员工信息 select * from dept, emp where dept.deptid = emp.deptid and dept.deptname = ‘技术部‘ #使用子查询 select * from emp where deptid = (select deptid from dept where deptname = ‘技术部‘) #=号下不能出现多个值 select * from emp where deptid = (select deptid from dept where deptname like ‘%部‘) #查询已经分配部门信息的所有员工 #使用关联 select * from dept INNER JOIN emp on dept.deptid = emp.deptid #使用子查询 select * from emp where true; select * from emp where 1=1; #使用exists select * from emp where EXISTS(select deptid from dept where dept.deptid = emp.deptid) #查询未分配部门信息的所有员工 select * from emp where NOT EXISTS(select deptid from dept where dept.deptid = emp.deptid) #分组,统计 #查询“男”,"女"员工的个数 #以性别为标准进行分组 --- 以什么进行分组,查询就需要展示什么 select empsex from emp GROUP BY empsex #全部记录数 select count(*) from emp; select count(1) from emp; #max最大值 select MAX(empage) from emp; #min最小值 select MIN(empage) from emp; #avg平均值 select avg(empage) from emp; #sum 总 select sum(empage) from emp; #查询“男”,"女"员工的个数 select empsex as 性别, count(1) as 人数 from emp GROUP BY empsex; #查询每个部门下的员工人数 select deptid as 部门编号, count(1) as 部门人数 from emp GROUP BY deptid; select dept.deptname, count(emp.empid) from dept LEFT JOIN emp on dept.deptid = emp.deptid GROUP BY dept.deptname; #查询每个部门下的平均年龄 select dept.deptname, avg(emp.empage) from dept LEFT JOIN emp on dept.deptid = emp.deptid GROUP BY dept.deptname; #HAVING ---在分组的基础上过滤 #查询员工平均年龄在23之上的所有部门 select dept.deptname, avg(emp.empage) from dept LEFT JOIN emp on dept.deptid = emp.deptid GROUP BY dept.deptname HAVING avg(emp.empage) >= 23 #分页 --- limit 排除的记录数, 一次显示的记录数 select * from emp ORDER BY empid LIMIT 0, 2 #1 (1-1)*2,2 select * from emp ORDER BY empid LIMIT 2, 2 #2 (2-1)*2, 2 select * from emp ORDER BY empid LIMIT 4, 2 #3 (3-1)*2, 2 # LIMIT (当前页 - 1) * 分页标准, 分页标准
子查询
#子查询 #子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询 #一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询在外面的查询语句,称为主查询或外查询 #语法:SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询)
子查询特点
1、子查询都放在小括号内 2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧 3、子查询优先于主查询执行,主查询使用了子查询的执行结果 4、子查询根据查询结果的行数不同分为以下两类: ① 单行子查询 结果集只有一行 一般搭配单行操作符使用:> < = <> >= <= 非法使用子查询的情况: a、子查询的结果为一组值 b、子查询的结果为空 ② 多行子查询 结果集有多行 一般搭配多行操作符使用:any、all、in、not in in: 属于子查询结果中的任意一个就行 any和all往往可以用其他查询代替
#查询技术部下的所有员工信息 SELECT emp.*,dept.deptname FROM emp, dept WHERE emp.deptid = dept.deptid and dept.deptname = ‘技术部‘ #使用子查询 SELECT * FROM emp where deptid = (select deptid from dept where deptname = ‘技术部‘) #=号下不能出现多个值 SELECT * FROM emp where deptid = (select deptid from dept where deptname like ‘%部‘) #不能执行 #查询已经分配部门信息系的所有员工 #使用关联查询 SELECT emp.* from dept INNER JOIN emp on dept.deptid = emp.deptid #使用子查询 SELECT * from emp where true; SELECT * from emp where 1=1 SELECT * from emp where false; #使用exists SELECT * from emp where EXISTS(select deptid from dept WHERE dept.deptid = emp.deptid); #查询没有分配部门信息系的员工 SELECT * from emp where not EXISTS(select deptid from dept WHERE dept.deptid = emp.deptid); #any 是任意一个, any表示有任何一个满足就返回true #查询技术部中,年龄大于销售部下任意一位的员工(比最小的还要大) select * FROM emp WHERE deptid = 1 and empage > ANY(select empage from emp where deptid = 2) #相当于 select * from emp where deptid = 1 and empage > ANY(select MIN(empage) from emp where deptid = 2) # all 是所有, all表示全部都满足才返回true #查询技术部中,年龄大于销售部下所有人的员工(比最大的还要大) select * from emp where deptid = 1 and empage > all(select empage from emp where deptid = 2) #相当于: select * from emp where deptid = 1 and empage > all(select max(empage) from emp where deptid = 2)
视图
# 视图 # 含义:可以理解为一张虚拟的表 # 区别: # 1. 视图不占用物理空间,仅仅保存的是sql语句(逻辑) # 相同点: # 使用方式相同 select * from 视图名 # 好处: # 1.sql语句提高重用性,效率高 # 2.提高安全性 #视图创建 #语法 CREATE VIEW 视图名 # AS # 查询语句; #演示 --- 查询员工信息和隶属部门名称 CREATE VIEW my_v1 AS SELECT emp.*, dept.deptname FROM dept, emp where dept.deptid = emp.deptid #使用视图 select * from my_v1; #删除视图 #DROP VIEW 视图名 #查看视图 # DESC 视图名 # SHOW CREATE VIEW 视图名 DESC my_v1;
事务
#事务:数据库事务(Transaction) #事务:通过一组逻辑操作单元(一组DML语句),将数据从一种状态切换到另一种状态 #目的:保证数据的完整性 /** 案例:转账 张三1000 转账给 李四 200 步骤1: update 表名 set 张三余额 = 张三余额-200 where name = ‘张三‘ 出错 步骤2: update 表名 set 李四余额 = 李四余额+200 where name = ‘李四‘ 事务的特点: 1、原子性:不可分割,要么都执行,要么都回滚 2、一致性:保证数据的操作状态在前后一致 3、隔离型:多个事务同时操作数据库中同一个表的数据,一个事务的执行不受另一事务的影响或干扰。 4、持久性:一个事务一旦被提交 ,则数据库被持久化到本地,除非其他事务进行修改 mysql使用事务 ---》jdbc操作事务 ---》持久化框架(hibernate、mybatis,JPA)操作事务 --->spring操作事务(AOP\oop) 使用事务步骤: 1、开启事务 2、编写事务的一组逻辑执行单元.(多条SQL语句insert、update、delete) 3、提交或回滚事务 事务分类: 1、隐式事务:没有明显的开启和结束事务标志 insert、update、delete本身就是一个事务 2、显示事务: |- 开启事务: set autocomit = 0 (取消自动提交的功能) |- 编写事务的一组逻辑操作单元: SQL(增、删、改) |- 提交或回滚: COMMIT 、ROLLBACK **/ #演示事务操作步骤 #1、开启事务 SET AUTOCOMMIT = 0; #2、编写SQL语句 DELETE from emp where empid in (3,4,6); UPDATE dept set deptnum = deptnum - 2 where deptid = 1; UPDATE dep set deptnum = deptnum - 1 where deptid = 3; #3、提交或回滚 #ROLLBACK; COMMIT; #一组逻辑操作单元中,只有全部执行成功,才会commit,否则回滚 #演示操作2 BEGIN; DELETE FROM emp where empid = 7; update dept set deptnum = deptnum - 1 where deptid = 4; #ROLLBACK; #commit; set autocommit=0; start transaction; commit; rollback; savepoint 断点 commit to 断点 rollback to 断点
事务隔离
# 事务的隔离级别 # 事务并发问题如何发生? # 多个事务同时操作同一个数据库的相同数据 # 事务的并发问题有哪些? # 脏读: 一个事务读取了另一事务未提交的数据 # 不可重复读:同一事务中,多次读取的数据不一致 # 幻读:一个事务读取数据时,另一个事务进行更新,导致第一个事务读取到了没有更新的数据 # 如何避免事务并发问题? # 通过设置事务的隔离级别 # 1. READ UNCOMMITTED # 2. READ COMMITTED :可以避免脏读 # 3. REPEATABLE READ : 可以避免脏读,不可重复读和一部分幻读 # 4. SERIALIZABLE : 可以避免脏读,不可重复读,幻读 # 设置隔离级别 # set session | GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别名 # 查看隔离级别 # SELECT @@tx_isolation; # 后期学习spring事务用到
变量、存储过程&函数
#变量 /** 1、系统变量:系统提供的,有服务器提供 -- 全局变量、会话变量 2、自定义变量 -- 用户变量、局部变量 **/ #查看系统变量 # 语法:show GLOBAL | SESSION VARIABLES SHOW GLOBAL VARIABLES; #查询满足条件的部分系统变量 #语法:show GLOBAL | SESSION VARIABLES LIKE ‘%char%‘ SHOW GLOBAL VARIABLES LIKE ‘%char%‘ #自定义变量 /** 用户变量:(针对当前连接/会话有效) 使用步骤:1、声明 2、赋值 3、使用 赋值操作符:=或:= 1、声明并初始化: SET @用户变量名=值; SET @用户变量名:=值; SELECT @用户变量名:=值; 2、赋值(更改初始值) 方式一: SET @用户变量名=值; SET @用户变量名:=值; SELECT @用户变量名:=值; 方式二: SELECT 字段 into @变量名 FROM 表名 3、查看变量值 SELECT @变量名 **/ #赋值、方式一: SET @name = ‘admin‘; #声明并初始化 SET @name = 100; #(类型不限制) #方式二: SELECT count(1) into @count from emp; #查看变量值 SELECT @name; SELECT @count; #局部变量 : 仅仅在BEGIN END中有效,并且是第一句话 #声明:限定类型 # DECLARE 变量名 类型 # DECLARE 变量名 类型 DEFAULT 值 #赋值 # 方式一: # SET 变量名=值 # SET 变量名:=值 # SELECT @用户变量名:=值 # 方式二: # SELECT 字段 into @变量名 FROM 表名 #使用 # SELECT 变量名 #存储过程(Stored PROCEDURE) # 存储过程是数据库中存储复杂程序,以便外部程序调用的一种数据库对象 # 存储过程就是具有名字的一段代码,用来完成特定的功能(类型与java中方法) #1、创建存储过程 # CREATE PROCEDURE 存储过程名称(参数列表) # BEGIN #存储过程体(一组合法的SQL语句) # END; #参数说明 # 1、参数由三部分构造 # 参数模式、参数名称、参数类型 # 举例: IN stuName VARCHAR(20) #参数模式说明: #IN: 输入模式--- 该参数可以作为输入,调用时需要传入值 #OUT: 输出模式 --- 该参数可以作为输出,参数可以作为返回值 #INOUT: 该参数可以作为输入也可以作为输出,即可以输入值,也返回值 # 如果存储过程仅仅有一句话,则BEGIN END可以省略 # 存储过程的每一条SQL语句的结尾必须添加分号 #2、调用存储过程 # CALL 存储过程名称(实参列表) #演示: # 1、空参列表(添加多条记录) CREATE PROCEDURE my_f1() BEGIN INSERT INTO dept values(null,‘人事部‘,20,‘为人民服务‘); INSERT INTO dept values(null,‘中组部‘,20,‘为人民服务‘); END; #调用 CALL my_f1(); #2、创建带IN参数的存储过程(根据员工姓名查询员工信息) CREATE PROCEDURE my_p2(IN emp_name VARCHAR(20)) BEGIN SELECT * FROM emp where empname = emp_name; END; #调用 CALL my_p2(‘曾小贤‘) # 3、创建带OUT的存储过程(根据部门名称返回员工个数) CREATE PROCEDURE my_p3(IN dept_name VARCHAR(20), OUT empCount INT) BEGIN SELECT count(1) INTO empCount FROM dept INNER JOIN emp WHERE dept.deptid = emp.deptid AND dept.deptname = dept_name; END; #调用 SET @emp_name = ‘财务部‘; SET @empCount = 0; CALL my_p3(@emp_name, @empCount); #输出 SELECT @empCount; #4、带INOUT模式的存储过程(输入A和B两个值,最后A和B翻倍并返回) CREATE PROCEDURE my_p4(INOUT a INT, INOUT b INT) BEGIN SET a = a * 2; SET b = b * 2; END; #使用 SET @n = 10; SET @m = 20; CALL my_p4(@n,@m); SELECT @n, @m # 3、删除存储过程 # DROP PROCEDURE 存储过程名 DROP PROCEDURE my_p4 #4、查看存储过程 # SHOW CREATE PROCEDURE 存储过程名称 SHOW CREATE PROCEDURE my_p3 #函数 # 函数和存储过程基本类似,区别为: # 1、存储过程可以有0个或多个返回值,适合做批量的更新和添加 # 2、函数有且仅有一个返回值 #1、创建函数 # CREATE FUNCTION 函数名(参数列表) RETURNS 返回值类型 # BEGIN # # END; #说明:参数列表包含两部分:参数名、参数类型 # 函数体一定有return语句,没有则报错 # 2、调用函数 # SELECT 函数名(参数列表) #1、创建没有返回值的函数(返回员工人数) CREATE FUNCTION my_f1()RETURNS INT BEGIN #定义变量 DECLARE c INT DEFAULT 0; #赋值 SELECT count(1) INTO c FROM emp; #返回 RETURN c; END; #调用 SELECT my_f1(); #2、有参数由返回值(根据员工姓名返回员工年龄) CREATE FUNCTION my_f2(emp_name VARCHAR(20))RETURNS INT BEGIN #定义变量 SET @empage = 18; #赋值 SELECT empage INTO @empage FROM emp WHERE empname = emp_name; #返回 RETURN @empage; END; #调用 SELECT my_f2(‘吕子乔‘) #查看函数 SHOW CREATE FUNCTION 函数名 #删除函数 DROP FUNCTION 函数名
流程控制
# 流程控制 # 顺序结构、选择结构、循环结构 #选择结构(分支结构) #一、if函数 #语法: `IF`(条件,值1,值2): 特点:可以在任意位置 SELECT IF(5 < 3,‘true‘,‘false‘); #二、case语句 #语法: #情况一: 类似于switch # CASE 表达式 # WHEN 值1 THEN 语句1; # WHEN 值2 THEN 语句2; # ... # ELSE 语句n; # END CASE; # 情况二: 类似于多重if # CASE # WHEN 条件1 THEN 语句1; # WHEN 条件2 THEN 语句2; # ... # ELSE 语句n # END CASE; #演示:创建存储过程,根据传入的成绩,来显示等级90-100 A 80-90 B 60-80 C 否则 D CREATE PROCEDURE test_case(IN score INT) BEGIN CASE WHEN score >= 90 AND score <= 100 THEN SELECT ‘A‘; WHEN score >= 80 AND score < 90 THEN SELECT ‘B‘; WHEN score >= 60 AND score < 80 THEN SELECT ‘C‘; ELSE SELECT ‘D‘; END CASE; END; #调用 CALL test_case(100); #三、 if ELSEIF 语句 #语法: # IF 条件1 THEN 语句1; # ELSEIF 条件2 THEN 语句2; # ... # ELSE 语句n # END IF; #演示: 创建函数过程,根据传入的值,返回等级90-100 A 80-90 B 60-80 C 否则 D CREATE FUNCTION test_if(score INT)RETURNS CHAR BEGIN IF score >= 90 AND score <= 100 THEN RETURN ‘A‘; ELSEIF score >= 80 AND score < 90 THEN RETURN ‘B‘; ELSEIF score >= 60 AND score < 80 THEN RETURN ‘C‘; ELSE RETURN ‘D‘; END IF; END; #DROP FUNCTION test_if; #调用 SELECT test_if(70) # 循环 # WHILE # 语法: # [标签:] WHILE 循环条件 DO # 循环体 # END WHILE[标签]; # 循环控制: # ITERATE 类似于 CONTINUE 结束本次循环,继续下一次循环 # LEAVE 类似于 break; 跳出循环,结束当前循环 # 演示:创建存储过程,根据次数循环添加记录(没有添加循环控制) CREATE PROCEDURE pro_while(IN insert_count INT) BEGIN #声明变量 DECLARE i INT DEFAULT 1; #循环添加 WHILE i <= insert_count DO #循环结束条件 INSERT INTO dept values(null, CONCAT(‘测试部‘,i), 10, ‘测试‘); #循环体 SET i = i + 1; #累加 END WHILE; #循环结束 END; #调用 CALL pro_while(3); #演示:创建存储过程,根据次数添加记录,如果次数大于10 则停止(循环控制) CREATE PROCEDURE pro_while2(IN insert_count INT) BEGIN #声明变量 DECLARE i INT DEFAULT 1; #循环添加 a:WHILE i <= insert_count DO #循环结束条件 INSERT INTO dept values(null, CONCAT(‘测试部‘,i), 10, ‘测试‘); #循环体 IF i >= 10 THEN LEAVE a; #判断结束循环 END IF; SET i = i + 1; #累加 END WHILE a; #循环结束 END; #调动 CALL pro_while2(100); #演示循环控制()根据次数插入到dept表中的多条记录,直插入偶数数据 #Int I = 0; #While(i< insertCount){ #i++; #if(i % 2 == 0){ # continue; # } # 插入 # } CREATE PROCEDURE pro_while3(IN insert_count INT) BEGIN DECLARE i INT DEFAULT 0; a:WHILE i<=insert_count DO SET i=i+1; #IF MOD(i,2)!=0 THEN ITERATE a; IF i%2=0 THEN ITERATE a; END IF; INSERT INTO dept values(null, CONCAT("测试部",i), i, "测试"); END WHILE a; END CALL pro_while3(10)
相关推荐
好记忆也需烂 2020-07-28
勇往直前 2020-06-01
世樹 2020-11-11
SCNUHB 2020-11-10
bleach00 2020-11-10
FellowYourHeart 2020-10-05
momode 2020-09-11
思君夜未眠 2020-09-04
jessieHJ 2020-08-19
行吟阁 2020-08-09
表格的现在还是较为常用的一种标签,但不是用来布局,常见处理、显示表格式数据。在HTML网页中,要想创建表格,就需要使用表格相关的标签。<table> <tr> <td>单元格内的文字</td> ...
gufudhn 2020-08-09
末点 2020-08-03
nimeijian 2020-07-30
zlsdmx 2020-07-05
tomson 2020-07-05
tianqi 2020-07-05
onlykg 2020-07-04