MySQL笔记5

存储引擎(show ENGINES;)
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。Mysql的核心就是存储引擎。
InnoDB是事务型数据库的首选,执行安全性数据库,行锁定和外键。mysql5.5之后默认使用。
MyISAM插入速度和查询效率较高,但不支持事务。
MEMORY将表中的数据存储在内存中,速度较快。

二、存储程序
1、存储程序:指的一组存储和执行在数据库服务器端的程序。存储程序总是在服务器的进程或者线程的内存中执行的。
2、分类
A、存储过程(java方法)
有输入输出参数,可以执行一组sql指令
1、无参的存储过程
查询员工表的所有信息
#delimiter //
create PROCEDURE proc_emp()
BEGIN
select * from emp;

end;#//
#delimiter ;

调用
call proc_emp();

2、参数的三种模式(输入参数in (默认),输出参数(out),输入输出参数(inout))

根据部门编号查询部门信息(输入参数)
create PROCEDURE proc_dept(in dno int)
BEGIN
SELECT * from dept where deptno=dno;
end;

调用
CALL proc_dept(10);

删除存储过程
drop PROCEDURE proc_dept;
根据部门编号 查询部门中的人数(输入输出参数)
create PROCEDURE proc_count(in dno int,out count int)
BEGIN
SELECT count(*) into count from emp where deptno=dno;
END;

调用
#set @dno=20;
call proc_count(30,@count);
SELECT @count;
(或)
create PROCEDURE proc_count1(INOUT v_count int)
BEGIN
select count(*) into v_count from emp where deptno=v_count;
END;

#调用
set @count=20;
CALL proc_count1(@count);
SELECT @count;
if 结构 #根据成绩输出不同的等级(if 结构)
create PROCEDURE proc_leval(score INT)
BEGIN
DECLARE leval varchar(20); #定义局部变量
IF score>=90 THEN
set leval = ‘优秀’;
elseif score>=80 THEN
set leval = ‘良好’;
elseif score>=60 THEN
set leval = ‘及格’;
else
set leval = ‘不及格’;
end if;
SELECT leval;
end;

#调用
CALL proc_leval(80)

循环:while…do…end while/loop…end loop/repeat … util…end repea
#1+100和
#1+100和 while 条件 do end while ;
create PROCEDURE calc1()
begin
#定义变量
DECLARE sum int;
DECLARE i int;
set sum=0;
set i=1;

WHILE i<=100 DO
set sum = sum + i;
set i = i + 1;
end WHILE;
select sum;
end;

#调用
call calc1();

#循环 loop … end LOOP; 1…n
create PROCEDURE calc2(n int,out sum int)
BEGIN
DECLARE i int;
set i=1;
set sum = 0;
lip:LOOP
set sum =sum +i;
set i = i + 1;
#结束
IF i>n THEN
LEAVE lip;
END if;
END LOOP;
END;

#调用
CALL calc2(10,@sum);
SELECT @sum;

create PROCEDURE calc3(n int,out sum int)
BEGIN
DECLARE i int;
set i=1;
set sum = 0;
REPEAT
set sum =sum +i;
set i = i + 1;
#结束 直到
UNTIL i>n
END REPEAT;
END;

#调用
CALL calc3(100,@sum);
SELECT @sum;

B、存储函数(语法与存储过程一致,只有输入参数,有返回值,作为sql语句一部分使用)
只有输入参数,有一个返回值,可以对sql进行有效扩展

根据员工的编号,查询员工的姓名
delimiter //
create FUNCTION fun_getname(eno INT)
RETURNS VARCHAR(20)
DETERMINISTIC #确定
BEGIN
DECLARE v_name VARCHAR(20);
SELECT ename INTO v_name from emp where empno = eno;
RETURN v_name;
END;//
delimiter ;

#调用函数
select fun_getname(7788)

C、触发器
指事件响应,比如执行insert语句后执行另外一个动作
CREATE
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
trigger_time: { BEFORE | AFTER }
trigger_event: { INSERT | UPDATE | DELETE }
trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

利用触发器做数据的备份 old 删除 new 新数据(insert / update)
create TRIGGER tri_delete
AFTER delete
ON account FOR EACH ROW
begin
INSERT into account1 values (old.id,old.name,old.balance);
end;

delete from account ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值