- 浏览: 151781 次
- 性别:
- 来自: 北京
最新评论
-
pandengzhegt:
好牛!正需要!谢谢了!
JPA 2.0 中的动态类型安全查询 -
yanlp:
万分的感谢。
仿google 的输入提示框 -
huangwenji6111:
可谓良师,在此拜谢!受益匪浅!
hibernate lazy -
jwx0925:
不错!mark!
hibernate对象状态 -
leftstick:
大有裨益,谢了!
hibernate lazy
Ø function 函数
函数的作用比较大,一般多用在select查询语句和where条件语句之后。按照函数返回的结果,
可以分为:多行函数和单行函数;所谓的单行函数就是将每条数据进行独立的计算,然后每条数据得到一条结果。
如:字符串函数;而多行函数,就是多条记录同时计算,得到最终只有一条结果记录。如:sum、avg等
多行函数也称为聚集函数、分组函数,主要用于完成一些统计功能。MySQL的单行函数有如下特征:
单行函数的参数可以是变量、常量或数据列。单行函数可以接受多个参数,但返回一个值。
单行函数就是它会对每一行单独起作用,每一行(可能包含多个参数)返回一个结果。
单行函数可以改变参数的数据类型。单行函数支持嵌套使用:内层函数的返回值是外层函数的参数。
单行函数可以分为:
类型转换函数;
位函数;
流程控制语句;
加密解密函数;
信息函数
单行函数
1、 char_length字符长度
select char_length(tel) from user;
2、 sin函数
select sin(age) from user;
select sin(1.57);
3、 添加日期函数
select date_add('2010-06-21', interval 2 month);
interval是一个关键字,2 month是2个月的意思,2是数值,month是单位
select addDate('2011-05-28', 2);
在前面的日期上加上后面的天数
4、 获取当前系统时间、日期
select curdate();
select curtime();
5、 加密函数
select md5('zhangsan');
6、 Null 处理函数
select ifnull(birthday, 'is null birthday') from user;
如果birthday为null,就返回后面的字符串
select nullif(age, 245) from user;
如果age等于245就返回null,不等就返回age
select isnull(birthday) from user;
判断birthday是否为null
select if(isnull(birthday), 'birthday is null', 'birthday not is null') from user;
如果birthday为null或是0就返回birthday is null,否则就返回birthday not is null;类似于三目运算符
7、 case 流程函数
case函数是一个流程控制函数,可以接受多个参数,但最终只会返回一个结果。
select name,
age,
(case sex
when 1 then '男'
when 0 then '女'
else '火星人'
end
) sex
from user;
组函数
组函数就是多行函数,组函数是完成一行或多行结果集的运算,最后返回一个结果,而不是每条记录返回一个结果。
1、 avg平均值运算
select avg(age) from user;
select avg(distinct age) from user;
2、 count 记录条数统计
select count(*), count(age), count(distinct age) from user;
3、 max 最大值
select max(age), max(distinct age) from user;
4、 min 最小值
select min(age), min(distinct age) from user;
5、 sum 求和、聚和
select sum(age), sum(distinct age) from user;
select sum(ifnull(age, 0)) from user;
6、 group by 分组
select count(*), sex from user group by sex;
select count(*) from user group by age;
select * from user group by sex, age;
7、 having进行条件过滤
不能在where子句中过滤组,where子句仅用于过滤行。过滤group by需要having
不能在where子句中用组函数,having中才能用组函数
select count(*) from user group by sex having sex <> 2;
Ø 多表查询和子查询
数据库的查询功能最为丰富,很多时候需要用到查询完成一些事物,而且不是单纯的对一个表进行操作。而是对多个表进行联合查询,
MySQL中多表连接查询有两种规范,较早的SQL92规范支持,如下几种表连接查询:
等值连接
非等值连接
外连接
广义笛卡尔积
SQL99规则提供了可读性更好的多表连接语法,并提供了更多类型的连接查询,SQL99支持如下几种多表连接查询:
交叉连接
自然连接
使用using子句的连接
使用on子句连接
全部连接或者左右外连接
SQL92的连接查询
SQL92的连接查询语法比较简单,多将多个table放置在from关键字之后,多个table用“,”隔开;
连接的条件放在where条件之后,与查询条件直接用and逻辑运算符进行连接。如果条件中使用的是相等,
则称为等值连接,相反则称为非等值,如果没有任何条件则称为广义笛卡尔积。
广义笛卡尔积:select s.*, c.* from student s, classes c;
等值:select s.*, c.* from student s, classes c where s.cid = c.id;
非等值:select s.*, c.* from student s, classes c where s.cid <> c.id;
select s.*, c.name classes from classes c, student s where c.id = s.classes_id and s.name is not null;
SQL99连接查询
1、交叉连接cross join,类似于SQL92的笛卡尔积查询,无需条件。如:
select s.*, c.name from student s cross join classes c;
2、自然连接 natural join查询,无需条件,默认条件是将2个table中的相同字段作为连接条件,如果没有相同字段,查询的结果就是空。
select s.*, c.name from student s natural join classes c;
3、using子句连接查询:using的子句可以是一列或多列,显示的指定两个表中同名列作为连接条件。
如果用natural join的连接查询,会把所有的相同字段作为连接查询。而using可以指定相同列及个数。
select s.*, c.name from student s join classes c using(id);
4、 join … on连接查询,查询条件在on中完成,每个on语句只能指定一个条件。
select s.*, c.name from student s join classes c on s.classes_id = c.id;
5、 左右外连接:3种外连接,left [outer] join、right [outer] join,连接条件都是通过用on子句来指定,条件可以等值、非等值。
select s.*, c.name from student s left join classes c on s.classes_id = c.id;
select s.*, c.name from student s right join classes c on s.classes_id = c.id;
子查询
子查询就是指在查询语句中嵌套另一个查询,子查询可以支持多层嵌套。子查询可以出现在2个位置:
from关键字之后,被当做一个表来进行查询,这种用法被称为行内视图,因为该子查询的实质就是一个临时视图
出现在where条件之后作为过滤条件的值
子查询注意点:
子查询用括号括起来,特别情况下需要起一个临时名称
子查询当做临时表时(在from之后的子查询),可以为该子查询起别名,尤其是要作为前缀来限定数据列名时
子查询用作过滤条件时,将子查询放在比较运算符的右边,提供可读性
子查询作为过滤条件时,单行子查询使用单行运算符,多行子查询用多行运算符
将from后面的子查询当做一个table来用:
select * from (select id, name from classes) s where s.id in (1, 2);
当做条件来用:
select * from student s where s.classes_id in (select id from classes);
select * from student s where s.classes_id = any (select id from classes);
select * from student s where s.classes_id > any (select id from classes);
Ø 操作符和函数
1、 boolean只判断
select 1 is true, 0 is false, null is unknown;
select 1 is not unknown, 0 is not unknown, null is not unknown;
2、 coalesce函数,返回第一个非null的值
select coalesce(null, 1);
select coalesce(1, 1);
select coalesce(null, 1);
select coalesce(null, null);
3、 当有2个或多个参数时,返回最大的那个参数值
select greatest(2, 3);
select greatest(2, 3, 1, 9, 55, 23);
select greatest('D', 'A', 'B');
4、 Least函数,返回最小值,如果有null就返回null值
select least(2, 0);
select least(2, 0, null);
select least(2, 10, 22.2, 35.1, 1.1);
5、 控制流函数
select case 1 when 1 then 'is 1' when 2 then 'is 2' else 'none' end;
select case when 1 > 2 then 'yes' else 'no' end;
6、 ascii字符串函数
select ascii('A');
select ascii('1');
7、 二进制函数
select bin(22);
8、 返回二进制字符串长度
select bit_length(11);
9、 char将值转换成字符,小数取整四舍五入
select char(65);
select char(65.4);
select char(65.5);
select char(65.6);
select char(65, 66, 67.4, 68.5, 69.6, '55.5', '97.3');
10、 using改变字符集
select charset(char(0*65)), charset(char(0*65 using utf8));
11、 得到字符长度char_length,character_length
select char_length('abc');
select character_length('eft');
12、 compress压缩字符串、uncompress解压缩
select compress('abcedf');
select uncompress(compress('abcedf'));
13、 concat_ws分隔字符串
select concat_ws('#', 'first', 'second', 'last');
select concat_ws('#', 'first', 'second', null, 'last');
Ø 事务处理
动作
开始事务:start transaction
提交事务:commit
回滚事务:rollback
设置自动提交:set autocommit 1 | 0
atuoCommit系统默认是1立即提交模式;如果要手动控制事务,需要设置set autoCommit 0;
这样我们就可以用commit、rollback来控制事务了。
在一段语句块中禁用autocommit 而不是set autocommit
start transaction;
select @result := avg(age) from temp;
update temp set age = @result where id = 2;
select * from temp where id = 2;//值被改变
rollback;//回滚
select * from temp where id = 2;//变回来了
在此期间只有遇到commit、rollback,start Transaction的禁用autocommit才会结束。然后就恢复到原来的autocommit模式;
不能回滚的语句
有些语句不能被回滚。通常,这些语句包括数据定义语言(DDL)语句,比如创建或取消数据库的语句,
和创建、取消或更改表或存储的子程序的语句。
您在设计事务时,不应包含这类语句。如果您在事务的前部中发布了一个不能被回滚的语句,
则后部的其它语句会发生错误,在这些情况下,通过发布ROLLBACK语句不能 回滚事务的全部效果。
一些操作也会隐式的提交事务
如alter、create、drop、rename table、lock table、set autocommit、start transaction、truncate table 等等,
在事务中出现这些语句也会提交事务的
事务不能嵌套事务
事务的保存点
Savepoint pointName/Rollback to savepoint pointName
一个事务可以设置多个保存点,rollback可以回滚到指定的保存点,恢复保存点后面的操作。
如果有后面的保存点和前面的同名,则删除前面的保存点。
Release savepoint会删除一个保存点,如果在一段事务中执行commit或rollback,则事务结束,所以保存点删除。
Set Transaction设计数据库隔离级别
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
本语句用于设置事务隔离等级,用于下一个事务,或者用于当前会话。
在默认情况下,SET TRANSACTION会为下一个事务(还未开始)设置隔离等级。
如果您使用GLOBAL关键词,则语句会设置全局性的默认事务等级,
用于从该点以后创建的所有新连接。原有的连接不受影响。使用SESSION关键测可以设置默认事务等级,
用于对当前连接执行的所有将来事务。
默认的等级是REPEATABLE READ全局隔离等级。
Ø 注释
select 1+1; # 单行注释
select 1+1; -- 单行注释
select 1 /* 多行注释 */ + 1;
Ø 基本数据类型操作
字符串
select 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
select "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
\n换行
select 'This\nIs\nFour\nLines';
\转义
select 'hello \ world!';
select 'hello \world!';
select 'hello \\ world!';
select 'hello \' world!';
Ø 设置数据库mode模式
SET sql_mode='ANSI_QUOTES';
create table t(a int);
create table "tt"(a int);
create table "t""t"(a int);
craate talbe tab("a""b" int);
Ø 用户变量
set @num1 = 0, @num2 = 2, @result = 0;
select @result := (@num1 := 5) + @num2 := 3, @num1, @num2, @result;
Ø 存储过程
创建存储过程:
delimiter //
create procedure get(out result int)
begin
select max(age) into result from temp;
end//
调用存储过程:
call get(@temp);
查询结果:
select @temp;
删除存储过程:
drop procedure get;
查看存储过程创建语句:
show create procedure get;
select…into 可以完成单行记录的赋值:
create procedure getRecord(sid int)
begin
declare v_name varchar(20) default 'jason';
declare v_age int;
declare v_sex bit;
select name, age, sex into v_name, v_age, v_sex from temp where id = sid;
select v_name, v_age, v_sex;
end;
call getRecord(1);
Ø 函数
函数类似于存储过程,只是调用方式不同
例如:select max(age) from temp;
创建函数:
create function addAge(age int) returns int
return age + 5;
使用函数:
select addAge(age) from temp;
删除函数:
drop function if exists addAge;
drop function addAge;
显示创建语法:
show create function addAge;
Ø 游标
声明游标:declare cur_Name cursor for select name from temp;
打开游标:open cur_Name;
Fetch游标:fetch cur_Name into @temp;
关闭游标:close cur_Name;
示例:
CREATE PROCEDURE cur_show()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_id, v_age INT;
DECLARE v_name varchar(20);
DECLARE cur_temp CURSOR FOR SELECT id, name, age FROM temp;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur_temp;
REPEAT
FETCH cur_temp INTO v_id, v_name, v_age;
IF NOT done THEN
IF isnull(v_name) THEN
update temp set name = concat('test-json', v_id) where id = v_id;
ELSEIF isnull(v_age) THEN
update temp set age = 22 where id = v_id;
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur_temp;
END
Ø 触发器
触发器分为insert、update、delete三种触发器事件类型
还有after、before触发时间
创建触发器:
create trigger trg_temp_ins
before insert
on temp for each row
begin
insert into temp_log values(NEW.id, NEW.name);
end//
删除触发器:
drop trigger trg_temp_ins
函数的作用比较大,一般多用在select查询语句和where条件语句之后。按照函数返回的结果,
可以分为:多行函数和单行函数;所谓的单行函数就是将每条数据进行独立的计算,然后每条数据得到一条结果。
如:字符串函数;而多行函数,就是多条记录同时计算,得到最终只有一条结果记录。如:sum、avg等
多行函数也称为聚集函数、分组函数,主要用于完成一些统计功能。MySQL的单行函数有如下特征:
单行函数的参数可以是变量、常量或数据列。单行函数可以接受多个参数,但返回一个值。
单行函数就是它会对每一行单独起作用,每一行(可能包含多个参数)返回一个结果。
单行函数可以改变参数的数据类型。单行函数支持嵌套使用:内层函数的返回值是外层函数的参数。
单行函数可以分为:
类型转换函数;
位函数;
流程控制语句;
加密解密函数;
信息函数
单行函数
1、 char_length字符长度
select char_length(tel) from user;
2、 sin函数
select sin(age) from user;
select sin(1.57);
3、 添加日期函数
select date_add('2010-06-21', interval 2 month);
interval是一个关键字,2 month是2个月的意思,2是数值,month是单位
select addDate('2011-05-28', 2);
在前面的日期上加上后面的天数
4、 获取当前系统时间、日期
select curdate();
select curtime();
5、 加密函数
select md5('zhangsan');
6、 Null 处理函数
select ifnull(birthday, 'is null birthday') from user;
如果birthday为null,就返回后面的字符串
select nullif(age, 245) from user;
如果age等于245就返回null,不等就返回age
select isnull(birthday) from user;
判断birthday是否为null
select if(isnull(birthday), 'birthday is null', 'birthday not is null') from user;
如果birthday为null或是0就返回birthday is null,否则就返回birthday not is null;类似于三目运算符
7、 case 流程函数
case函数是一个流程控制函数,可以接受多个参数,但最终只会返回一个结果。
select name,
age,
(case sex
when 1 then '男'
when 0 then '女'
else '火星人'
end
) sex
from user;
组函数
组函数就是多行函数,组函数是完成一行或多行结果集的运算,最后返回一个结果,而不是每条记录返回一个结果。
1、 avg平均值运算
select avg(age) from user;
select avg(distinct age) from user;
2、 count 记录条数统计
select count(*), count(age), count(distinct age) from user;
3、 max 最大值
select max(age), max(distinct age) from user;
4、 min 最小值
select min(age), min(distinct age) from user;
5、 sum 求和、聚和
select sum(age), sum(distinct age) from user;
select sum(ifnull(age, 0)) from user;
6、 group by 分组
select count(*), sex from user group by sex;
select count(*) from user group by age;
select * from user group by sex, age;
7、 having进行条件过滤
不能在where子句中过滤组,where子句仅用于过滤行。过滤group by需要having
不能在where子句中用组函数,having中才能用组函数
select count(*) from user group by sex having sex <> 2;
Ø 多表查询和子查询
数据库的查询功能最为丰富,很多时候需要用到查询完成一些事物,而且不是单纯的对一个表进行操作。而是对多个表进行联合查询,
MySQL中多表连接查询有两种规范,较早的SQL92规范支持,如下几种表连接查询:
等值连接
非等值连接
外连接
广义笛卡尔积
SQL99规则提供了可读性更好的多表连接语法,并提供了更多类型的连接查询,SQL99支持如下几种多表连接查询:
交叉连接
自然连接
使用using子句的连接
使用on子句连接
全部连接或者左右外连接
SQL92的连接查询
SQL92的连接查询语法比较简单,多将多个table放置在from关键字之后,多个table用“,”隔开;
连接的条件放在where条件之后,与查询条件直接用and逻辑运算符进行连接。如果条件中使用的是相等,
则称为等值连接,相反则称为非等值,如果没有任何条件则称为广义笛卡尔积。
广义笛卡尔积:select s.*, c.* from student s, classes c;
等值:select s.*, c.* from student s, classes c where s.cid = c.id;
非等值:select s.*, c.* from student s, classes c where s.cid <> c.id;
select s.*, c.name classes from classes c, student s where c.id = s.classes_id and s.name is not null;
SQL99连接查询
1、交叉连接cross join,类似于SQL92的笛卡尔积查询,无需条件。如:
select s.*, c.name from student s cross join classes c;
2、自然连接 natural join查询,无需条件,默认条件是将2个table中的相同字段作为连接条件,如果没有相同字段,查询的结果就是空。
select s.*, c.name from student s natural join classes c;
3、using子句连接查询:using的子句可以是一列或多列,显示的指定两个表中同名列作为连接条件。
如果用natural join的连接查询,会把所有的相同字段作为连接查询。而using可以指定相同列及个数。
select s.*, c.name from student s join classes c using(id);
4、 join … on连接查询,查询条件在on中完成,每个on语句只能指定一个条件。
select s.*, c.name from student s join classes c on s.classes_id = c.id;
5、 左右外连接:3种外连接,left [outer] join、right [outer] join,连接条件都是通过用on子句来指定,条件可以等值、非等值。
select s.*, c.name from student s left join classes c on s.classes_id = c.id;
select s.*, c.name from student s right join classes c on s.classes_id = c.id;
子查询
子查询就是指在查询语句中嵌套另一个查询,子查询可以支持多层嵌套。子查询可以出现在2个位置:
from关键字之后,被当做一个表来进行查询,这种用法被称为行内视图,因为该子查询的实质就是一个临时视图
出现在where条件之后作为过滤条件的值
子查询注意点:
子查询用括号括起来,特别情况下需要起一个临时名称
子查询当做临时表时(在from之后的子查询),可以为该子查询起别名,尤其是要作为前缀来限定数据列名时
子查询用作过滤条件时,将子查询放在比较运算符的右边,提供可读性
子查询作为过滤条件时,单行子查询使用单行运算符,多行子查询用多行运算符
将from后面的子查询当做一个table来用:
select * from (select id, name from classes) s where s.id in (1, 2);
当做条件来用:
select * from student s where s.classes_id in (select id from classes);
select * from student s where s.classes_id = any (select id from classes);
select * from student s where s.classes_id > any (select id from classes);
Ø 操作符和函数
1、 boolean只判断
select 1 is true, 0 is false, null is unknown;
select 1 is not unknown, 0 is not unknown, null is not unknown;
2、 coalesce函数,返回第一个非null的值
select coalesce(null, 1);
select coalesce(1, 1);
select coalesce(null, 1);
select coalesce(null, null);
3、 当有2个或多个参数时,返回最大的那个参数值
select greatest(2, 3);
select greatest(2, 3, 1, 9, 55, 23);
select greatest('D', 'A', 'B');
4、 Least函数,返回最小值,如果有null就返回null值
select least(2, 0);
select least(2, 0, null);
select least(2, 10, 22.2, 35.1, 1.1);
5、 控制流函数
select case 1 when 1 then 'is 1' when 2 then 'is 2' else 'none' end;
select case when 1 > 2 then 'yes' else 'no' end;
6、 ascii字符串函数
select ascii('A');
select ascii('1');
7、 二进制函数
select bin(22);
8、 返回二进制字符串长度
select bit_length(11);
9、 char将值转换成字符,小数取整四舍五入
select char(65);
select char(65.4);
select char(65.5);
select char(65.6);
select char(65, 66, 67.4, 68.5, 69.6, '55.5', '97.3');
10、 using改变字符集
select charset(char(0*65)), charset(char(0*65 using utf8));
11、 得到字符长度char_length,character_length
select char_length('abc');
select character_length('eft');
12、 compress压缩字符串、uncompress解压缩
select compress('abcedf');
select uncompress(compress('abcedf'));
13、 concat_ws分隔字符串
select concat_ws('#', 'first', 'second', 'last');
select concat_ws('#', 'first', 'second', null, 'last');
Ø 事务处理
动作
开始事务:start transaction
提交事务:commit
回滚事务:rollback
设置自动提交:set autocommit 1 | 0
atuoCommit系统默认是1立即提交模式;如果要手动控制事务,需要设置set autoCommit 0;
这样我们就可以用commit、rollback来控制事务了。
在一段语句块中禁用autocommit 而不是set autocommit
start transaction;
select @result := avg(age) from temp;
update temp set age = @result where id = 2;
select * from temp where id = 2;//值被改变
rollback;//回滚
select * from temp where id = 2;//变回来了
在此期间只有遇到commit、rollback,start Transaction的禁用autocommit才会结束。然后就恢复到原来的autocommit模式;
不能回滚的语句
有些语句不能被回滚。通常,这些语句包括数据定义语言(DDL)语句,比如创建或取消数据库的语句,
和创建、取消或更改表或存储的子程序的语句。
您在设计事务时,不应包含这类语句。如果您在事务的前部中发布了一个不能被回滚的语句,
则后部的其它语句会发生错误,在这些情况下,通过发布ROLLBACK语句不能 回滚事务的全部效果。
一些操作也会隐式的提交事务
如alter、create、drop、rename table、lock table、set autocommit、start transaction、truncate table 等等,
在事务中出现这些语句也会提交事务的
事务不能嵌套事务
事务的保存点
Savepoint pointName/Rollback to savepoint pointName
一个事务可以设置多个保存点,rollback可以回滚到指定的保存点,恢复保存点后面的操作。
如果有后面的保存点和前面的同名,则删除前面的保存点。
Release savepoint会删除一个保存点,如果在一段事务中执行commit或rollback,则事务结束,所以保存点删除。
Set Transaction设计数据库隔离级别
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
本语句用于设置事务隔离等级,用于下一个事务,或者用于当前会话。
在默认情况下,SET TRANSACTION会为下一个事务(还未开始)设置隔离等级。
如果您使用GLOBAL关键词,则语句会设置全局性的默认事务等级,
用于从该点以后创建的所有新连接。原有的连接不受影响。使用SESSION关键测可以设置默认事务等级,
用于对当前连接执行的所有将来事务。
默认的等级是REPEATABLE READ全局隔离等级。
Ø 注释
select 1+1; # 单行注释
select 1+1; -- 单行注释
select 1 /* 多行注释 */ + 1;
Ø 基本数据类型操作
字符串
select 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
select "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
\n换行
select 'This\nIs\nFour\nLines';
\转义
select 'hello \ world!';
select 'hello \world!';
select 'hello \\ world!';
select 'hello \' world!';
Ø 设置数据库mode模式
SET sql_mode='ANSI_QUOTES';
create table t(a int);
create table "tt"(a int);
create table "t""t"(a int);
craate talbe tab("a""b" int);
Ø 用户变量
set @num1 = 0, @num2 = 2, @result = 0;
select @result := (@num1 := 5) + @num2 := 3, @num1, @num2, @result;
Ø 存储过程
创建存储过程:
delimiter //
create procedure get(out result int)
begin
select max(age) into result from temp;
end//
调用存储过程:
call get(@temp);
查询结果:
select @temp;
删除存储过程:
drop procedure get;
查看存储过程创建语句:
show create procedure get;
select…into 可以完成单行记录的赋值:
create procedure getRecord(sid int)
begin
declare v_name varchar(20) default 'jason';
declare v_age int;
declare v_sex bit;
select name, age, sex into v_name, v_age, v_sex from temp where id = sid;
select v_name, v_age, v_sex;
end;
call getRecord(1);
Ø 函数
函数类似于存储过程,只是调用方式不同
例如:select max(age) from temp;
创建函数:
create function addAge(age int) returns int
return age + 5;
使用函数:
select addAge(age) from temp;
删除函数:
drop function if exists addAge;
drop function addAge;
显示创建语法:
show create function addAge;
Ø 游标
声明游标:declare cur_Name cursor for select name from temp;
打开游标:open cur_Name;
Fetch游标:fetch cur_Name into @temp;
关闭游标:close cur_Name;
示例:
CREATE PROCEDURE cur_show()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_id, v_age INT;
DECLARE v_name varchar(20);
DECLARE cur_temp CURSOR FOR SELECT id, name, age FROM temp;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur_temp;
REPEAT
FETCH cur_temp INTO v_id, v_name, v_age;
IF NOT done THEN
IF isnull(v_name) THEN
update temp set name = concat('test-json', v_id) where id = v_id;
ELSEIF isnull(v_age) THEN
update temp set age = 22 where id = v_id;
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE cur_temp;
END
Ø 触发器
触发器分为insert、update、delete三种触发器事件类型
还有after、before触发时间
创建触发器:
create trigger trg_temp_ins
before insert
on temp for each row
begin
insert into temp_log values(NEW.id, NEW.name);
end//
删除触发器:
drop trigger trg_temp_ins
发表评论
-
kettle User Defined Java Class
2012-04-16 18:05 1840转至: http://dsbjoe.iteye.c ... -
MySQL 学习笔记
2012-04-10 13:30 1108一、数据库简单介绍 1 ... -
关于查询插入以及查询更新实例sql&触发器示例
2011-07-13 10:47 1208工作札记 查询插入: insert into tem ... -
高效sql
2011-07-08 13:02 940最高效的删除重复记录方法 ( 因为使用了ROWID)例子: ... -
Oracle计算时间差函数
2011-06-18 09:46 3323两个Date类型字段:START_DATE,END ... -
sqlplus 查询结果保存到文本文件和Excel文件中
2011-05-09 16:20 4032输出到文件文件 首先编辑一个脚本文件,比如命名为a ... -
ORACLE锁表查询
2011-03-14 17:04 1368最近遇到这样一个问题,操作一个表,发现被人锁定了,于是查询谁锁 ... -
关于联表更新
2010-09-21 13:49 1089实例sql: update tblnmdevice t1 se ... -
oracle创建表空间
2010-08-30 17:24 941SYS用户在CMD下以DBA身份登陆: 在CMD中打sql ... -
Linux下启动Oracle服务和监听程...
2010-01-16 10:23 1392oracle数据库是重量级的 ... -
索引SQL优化
2009-12-07 11:37 1075序言 客服业务受到SQL语 ...
相关推荐
数据库 MySQL 学习笔记高级篇.md
这份“MySQL学习笔记”将引导我们深入理解其核心概念和实用技能。 一、MySQL简介 MySQL是一个开源、免费的数据库系统,由瑞典的MySQL AB公司开发,后被Oracle公司收购。它的设计目标是速度、可移植性和简洁性,支持...
MySQL学习笔记.chmMySQL学习笔记.chmMySQL学习笔记.chmMySQL学习笔记.chm
MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用...学习MySQL不仅涉及理论知识,还需要大量的实践操作来熟悉其语法和功能。掌握MySQL能让你在数据管理、Web开发和系统集成等领域具备更强的竞争力。
这份"mysql学习笔记.rar"包含的资源旨在帮助初学者和有经验的开发者深入理解和掌握MySQL的相关知识。 首先,"mysql学习笔记.doc"很可能是核心的学习资料,它可能包含了MySQL的基础概念、安装与配置、SQL语言基础、...
mysql入门学习笔记整理,如何创建数据库、查看数据库,删除数据库,创建表和对表字段类型操作、约束、mysql数据类型整理
MySQL 是一款广泛使用的开源关系型数据库管理系统,其学习笔记涵盖了多个关键知识点。以下是对这些知识点的详细解释: 1. **MySQL 体系架构** - **网络连接层**:处理客户端的连接请求,包括连接管理、认证和安全...
### MySQL核心技术学习笔记 #### 一、为什么要学习数据库 学习数据库的重要性主要体现在以下几个方面: 1. **持久化数据到本地**:数据库能够将应用程序产生的数据持久化存储在磁盘上,即使系统重启也不会丢失...
### MySQL学习笔记1:深入理解内连接与外连接 #### 一、引言 在数据库管理与查询过程中,连接操作是十分常见且重要的一个环节。MySQL作为一种广泛使用的开源关系型数据库管理系统,在处理复杂的多表查询时,提供了...
非常详细的mysql学习笔记,3积分绝对值。内容分为基础架构、日志系统、事务隔离、索引、锁、sql偶尔变慢的问题、数据空洞、排序、慢sql解析九大模块。
### MySQL学习笔记知识点详解 #### 一、数据库概述 数据库是指按照特定的数据结构来组织、存储和管理数据的集合体。随着信息技术的进步和社会需求的增长,数据库已经从最初的简单存储发展成为用户所需的各种复杂...
mysql学习笔记
MySQL学习笔记.pdf MySQL学习笔记主要涵盖了 MySQL 服务器的基本操作、数据库管理、数据表的创建和管理、数据的crud 操作、约束的添加和删除等内容。 一、登录和退出 MySQL 服务器 在 MySQL 学习笔记中,首先...
MySQL是世界上最受欢迎的关系型数据库管理...以上只是MySQL学习笔记的一部分内容,实际的学习过程中,你还会接触到触发器、分区、复制、集群等更高级的主题。不断实践和深入研究,才能真正掌握这个强大的数据库系统。
在MySQL学习过程中,了解和掌握基本的命令是非常重要的。以下是一些关键知识点的详细解释: 1. **显示数据库**: 使用`SHOW DATABASES;`命令可以列出当前MySQL服务器上存在的所有数据库。 2. **创建数据库**: `...
这份“mysql学习笔记”涵盖了MySQL的基础知识,包括但不限于数据库的概念、SQL语言的使用、以及更深入的多表操作。 在“day08入门笔记”中,你可能会学到以下内容: 1. **数据库基本概念**:了解什么是数据库,...
从给定的文件信息来看,本文档主要围绕“MySQL学习笔记—JSP操作MySQL”的主题展开,详细介绍了如何在JSP环境下操作MySQL数据库的过程。以下是对该文档中的关键知识点进行的深入解析: ### 一、MySQL与JSP的集成 ...
MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...