邹瑞20201028
总结
存储过程
存储过程类似于JAVA语言中的方法,需要先定义,使用时需要调用。存储过程可以定义参数,参数分为 IN、OUT、INOUT 类型三种类型。IN类型的参数表示接收调用者传入的数据,OUT类型的参数表示向 调用者返回数据,INOUT类型的参数既可以接收调用者传入的参数,也可以向调用者返回数据。
有输入输出参数,可以声明变量,有if/else, case when,while等控制语句,通过编写存储过程,可以实 现复杂的逻辑功能; 函数的普遍特性:模块化,封装,代码复用; 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤
创建存储过程的语法格式
create procedure 存储过程名(参数1,参数2,…)
begin 存储过程语句块;
end;
例子
DROP PROCEDURE IF EXISTS proc_adder
;
CREATE PROCEDURE proc_adder
(IN a int, IN b int, OUT sum int)
BEGIN
if a is null then set a = 0;
end if; if b is null then set b = 0;
end if;
set sum = a + b;
#select a + b into sum
END;
格式
设置值 set @b = 5;
调用 call proc_adder(2, @b, @sum);
显示 select @sum ;
触发器
触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整 性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而 是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行
触发器具有以下特点:
- 与表相关联
触发器定义在特定的表上,这个表称为触发器表。 - 自动激活触发器 当对表中的数据执行 INSERT、UPDATE 或 DELETE 操作时,如果对表上的这个特定操作定义了触发 器,该触发器自动执行,这是不可撤销的。
- 不能直接调用
与存储过程不同,触发器不能被直接调用,也不能传递或接受参数。 - 作为事务的一部分
触发器与激活触发器的语句一起做为对一个单一的事务来对待,可以从触发器中的任何位置回滚。
创建触发器
触发器经常用于加强数据的完整性约束和业务规则等。 触发器创建语法四要素:
1.监视地点(table)
2.监视事件(insert/update/delete)
3.触发时间(after/before)
4.触发事件(insert/update/delete)
语法
CREATE TRIGGER 触发器名称 触发时机 触发事件
ON 表名称
FOR EACH ROW
BEGIN
语句
END;
使用触发器实现用户注册业务
DELIMITER $$
CREATE TRIGGER tr_register
AFTER INSERT ON userinfo FOR EACH ROW
BEGIN
INSERT INTO userdetails(id) VALUES(NEW.id);
END $$
新增一条数据就会触发 tr_register
insert into userinfo (userName, userPass) values('张三', '123456');
注意
在某张表的触发器中,不能再进行对此表的操作。比如:给 Userinfo 表添加一个触发器 tr_register ,在此触发器中执行内容不能是再对 Userinfo 表进行操作了。否则在触发器被激活时, 会报1442错误。
索引
索引类似于书的目录,在一本书前面加上目录,查找内容时不必逐页翻阅就能够快速地找到所需的内 容。借助索引,执行查询时不必扫描整个表就能够快速地找到所需要的数据。
使用索引
CREATE INDEX 索引名称 ON 表名称(字段名)
创建索引CREATE INDEX ix_UserInfo_UserName ON userinfo(userName);
修改表(添加索引)
ALTER table userinfo ADD INDEX ix_UserInfo_UserName(userName)
测试索引EXPLAIN SELECT * FROM userinfo WHERE userName='林冲';
索引优缺点
索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度 索引的优点是可以提高检索数据的速度
索引的缺点是创建和维护索引需要耗费时间
索引可以提高查询速度,会减慢写入速度。索引并不是越多越好,索引固然可以提高相应的 select 的效 率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样 建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常 使用到的列上建的索引是否有必要。
近期评论