MySQL中函数、游标、事件、视图
MySQL中函数、游标、事件、视图基本应用举例(代码)
MySQL中
function用户自定义函数
c,fun,fun是面向过程的实现方式
只能传入参数,或不传入参数,不能传出参数,必有返回值
函数中是不能有create table drop table之类的语句
与sp一样,db中object
begin end 相当于{}
(1)输入任意姓名,输出 hello+姓名+!
drop function if exists fun1;
delimiter //
create function fun1(a varchar(32))
returns varchar(32)
begin
declare x varchar(32);
set x=concat('hello',a,'!');
return x;
end //
delimiter ;
select fun1('张三');
-- (1)等同于(2)
(2)输入任意姓名,输出 hello+姓名+!
drop function if exists fun1;
create function fun1(a varchar(32))
returns varchar(32)
return concat('hello',a,'!'); -- 因为只有一条语句,所以省略了 begin end
select fun1('张三');
(3)求和
drop function if exists fun1;
delimiter //
create function fun1(a int,b int)
returns int
begin
declare c int;
-- set c=a+b;
select a+b into c;
return c;
-- return a+b;
end //
delimiter ;
select fun1(10,30);
(4)select fun1('zhangfei');->stu(stuName) 实现输入姓名,插入到stu表的stuName字段,并返回stu表的记录条数
drop function if exists fun1;
delimiter //
create function fun1(a varchar(32))
returns int
begin
declare x int;
insert into stu(stuName) select a;
select count(1) into x from stu;
return x;
end //
delimiter ;
select fun1('zhangfei');
(5)取输入字符串的前b个字符,并在其后加...输出,若输入字符串为空,则提示‘输入错误’,若输入字符串长度小于b,则直接输出字符串,若大于b,则截取前b个字符,并在其后加...输出
drop function if exists fun1;
delimiter //
create function fun1(a varchar(32),b int)
returns varchar(32)
begin
if isnull(a) || char_length(a)=0 then
return '输入错误';
elseif char_length(a)<=b then
return a;
else
return concat(left(a,b),'...');
end if;
end //
delimiter ;
select fun1('abcdef',3);
(6)输出a个*
drop function if exists fun1;
delimiter //
create function fun1(a int)
returns varchar(32)
begin
declare b int default 1; -- 1...5
declare s varchar(32) default '';
while b<=a
do
set s=concat(s,'*');
set b=b+1;
end while;
return s;
end //
delimiter ;
select fun1(5);
-- cursor游标(光标)
很少用,基本不用
对以后用php从一个表内将数据一条条取出来放网页上去显示
-- 什么是cursor
4个步骤
-- cursor,数据缓冲区
1.声明coursor
declare cur cursor for select stuID,stuName from stu oder by stuID;
2.打开coursor
open cur;
cursor有一个指针,默认就指在第一条
3.fetch
declare a int;
declare b varchar(32);
declare c varchar(32);
fetch cur into a,b,c;
select a,b,c;
fectch完数据,指针自动下移一行
while
close cur;
cursor 放在sp中用
drop procedure if exists sp1;
delimiter //
create procedure sp1()
begin
declare a int;
declare b varchar(32);
declare cur cursor for select stuID,stuName from aa order by stuID;
open cur;
-- fetch cur into a,b;
-- fetch cur into a,b; (有三条数据)
-- fetch cur into a,b;
-- select a,b;
-- close cur;
set @a=1;
select count(1) into @b from stu;
while @a<=@b
do
fetch cur into a,b;
select a,b;
set @a=@a+1;
end while;
close cur;
end //
delimiter ;
call sp1();
-- event事件
用的也较少 类似linux中的crontab (每天下午执行某事件) 一般用于定期执行某任务
drop event if exists ev1;
create event ev1
on schedule every 1 minute -- 每隔1分钟执行一次该事件
do
insert into aa select 5,'孙坚';
alter event ev1 disable; 使其停止执行
on schedule at now() 立即执行,就执行一次,事件不会保存下来
drop event if exists ev1;
delimiter //
create event ev1
on schedule at now() + interval 3 second -- 3秒后执行一次该事件,执行完后该事件消失
do
begin
insert into aa select 5,'孙坚';
insert inwo aa select 6,'e';
end//
delimiter ;
alter event ev1 disable;
alter event ev1 enable;
-- view 视图
-- 是一张虚拟表,
select * from v1;
-- data
view->table
-- 方便
-- 安全
stu(stuID,stuName,stuAge,stuAddr)
stuID,stuName->v1 -- 看需求
stu(stuID,stuName)
courses(coursesID,coursesName)
sc(stuID,coursesID,score)
create view v1
as
select stuName,coursesName,score
from stu,courses,sc
where sc.stuID=stu.stuID && sc.coursesID=courses.coursesID
select * from v1;
-- 比较复杂的查询做成view
-- 视图只用于看,显示,select
-- 当要进行数据修改插入什么的时候,直接修改基表
create table stu
(
stuID int,
stuName varchar(32),
stuAge int,
stuAddr varchar(32),
primary key(stuID)
)engine=innodb charset=utf8;
-- stuName,stuAge
drop view if exists v1;
create view v1
as
select stuName,stuAge from stu;
-- book(),author(),press
create table author
(
authorID int,
authorName varchar(32)
)engine=innodb charset=utf8;
create table press
(
pressID int,
pressName varchar(32)
)engine=innodb charset=utf8;
create table book
(
bookID int,
bookName varchar(32),
authorID int,
pressID int
) engine=innodb charset=utf8;
drop view if exists v1;
create view v1
as
select bookName,authorName,pressName
from book,author,press
where book.authorID=author.authorID && book.pressID=press.pressID;
select * from v1;
-- 根据需求,view只用来查数据
-- 要insert,update,delete就直接操作基表,而不是操作view
MySQL中函数、游标、事件、视图的更多相关文章
- [转]MySQL中函数CONCAT及GROUP_CONCAT
一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +-- ...
- Mysql中函数和存储过程的区别
Mysql中函数和存储过程的区别 存储过程: 1. 可以写sql语句 2. inout,out构造返回值 3. 调用:call:存储过程名称 4. 可以 ...
- MySQL中函数、游标、事件、视图基本应用举例(代码)
MySQL中function用户自定义函数c,fun,fun是面向过程的实现方式只能传入参数,或不传入参数,不能传出参数,必有返回值函数中是不能有create table drop table之类的语 ...
- MySQL中函数CONCAT及GROUP_CONCAT
一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为+----+ ...
- hive 中与mysql 中函数同名不同意的方法记录
max 函数 在hive中max函数是一个聚合函数,所以,而且返回值是double ,而且后面必须跟group by ,这个和mysql差异很大 Built-in Aggregate Function ...
- MySQL中函数CONCAT及GROUP_CONCAT函数的使用
一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 以数据表[user]作为实例: SELECT USER_NAME, SEX FROM USER WHERE USER ...
- Oracle中和mysql中函数的区别
oracle --> mysqlto_char(sysdate,'yyyy-mm-dd')-->date_format(s ...
- mysql中的游标使用
1.游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作:游标有下面这些属性: a.游标是只读的,也就是不能更新它: b.游标是不能滚动的,也就是只能在一个方向上进 ...
- JS中函数与事件
一.函数: 1.函数就是一个工具,通过一小段代码,完成某个功能: 2.函数的定义: function 函数名(){ ..... } 或者 : var 函数名 = function(){ ...... ...
随机推荐
- 使用SignalR打造消息总线
使用SignalR为FineUI/Webform打造消息总线 第一次写博客,语言组织能力不好,请大家多多包涵! 效果图如下: 图片的右下角即为SignalR消息总线的消息框. 一.建立SignalR服 ...
- 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...
- JS判断Array数组中是否包含指定元素
1.调用方式: var arr=["a","b"]; alert(arr.in_array("a")) 2.JS判断数组是否包含指定元素方法 ...
- hibernate之使用Annotation注解搭建项目
之前开发都是使用xml配置来开发项目,开发起来特别繁琐 大家会发现通过注解大大简化了我们开发流程,使我们从繁琐的XML配置中解放出来. 第一步:新建一个javaweb项目.并将hibernate需要的 ...
- C语言库函数大全及应用实例十一
原文:C语言库函数大全及应用实例十一 [编程资料]C语言库函数大全及应用实例十一 函数名: setbkcolor 功 能 ...
- Hibernate 之强大的HQL查询
Hibernate 配备了一种非常强大的查询语言,这种语言看上去很像 SQL.但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态和关联之类 ...
- Asp.net 4.0,首次请求目录下的文件时响应很慢
原文:Asp.net 4.0,首次请求目录下的文件时响应很慢 1. 问题起因2. 尝试过的处理思路3. 解决方法 1. 问题起因 一个从VS2003(.Net Framework 1.1)升级到.ne ...
- 经常使用Javascript CDN 对照
[前言] 请参阅某种网上文章: http://c7sky.com/javascript-libraries-cdn.html 本文加入的各个cdn对一些库的更新情况.以及响应时间. [更新] 发表文章 ...
- C++在const用法
注意 const对象默觉得文件的局部变量 在全局作用域里定义非const变量时,它在整个程序中都能够訪问.我们能够把一个非const变量定义在一个文件里,如果已经做了合适的声明,就能够在另外的文件里使 ...
- 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持
IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...