戚权20201028

知识点

存储过程

#创建存储过程的语法格式 
create procedure 存储过程名(参数1,参数2,…) 
begin 
存储过程语句块; 
end;

MySQL 存储过程的调用

调用存储过程的语法格式:

call 存储过程名 ()

#设置值

set @b = 5;

#调用

call proc_adder(2, @b, @sum);

#显示

select @sum ;

java 调用存储过程

//调用存储过程proc_adder,其中{CALL}是固定写法 
cst = conn.prepareCall("{CALL proc_adder(?,?,?)}"); 
//为前两个占位符赋值 
cst.setObject(1, 158); 
cst.setObject(2, 666); 
//将第三个占位符注册为OUT类型的整型参数 
cst.registerOutParameter(3, Types.INTEGER); 
//执行存储过程 
cst.executeUpdate(); 
//获取第三个OUT类型的参数 
int sum = cst.getInt(3); 
System.out.println("sum: " + sum);

存储过程中的控制语句

if

IF type = 0 THEN 
    set c = 'param is 0'; 
ELSEIF type = 1 THEN 
    set c = 'param is 1'; 
ELSE 
    set c = 'param is others, not 0 or 1'; 
END IF;

CASE

CASE type 
WHEN 0 THEN 
    set c = 'param is 0'; 
WHEN 1 THEN 
    set c = 'param is 1'; 
ELSE
    set c = 'param is others, not 0 or 1'; 
END CASE;

while

BEGIN
DECLARE i int; 
    DECLARE s int; 
    SET i = 0; 
    SET s = 0; 
    WHILE i <= n DO 
        set s = s + i; 
        set i = i + 1; 
    END WHILE; 
SELECT s; 
END

触发器

监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行

触发器的特点

  • 与表相关联:触发器定义在特定的表上,这个表称为触发器表。
  • 自动激活触发器:当对表中的数据执行 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 $$

注意事项

在某张表的触发器中,不能再进行对此表的操作。比如:给 Userinfo 表添加一个触发器tr_register ,在此触发器中执行内容不能是再对 Userinfo 表进行操作了。否则在触发器被激活时,会报1442错误。

索引

**索引的数据结构 ** B-Tree

索引是如何提高查询效率的呢?MySQL数据库的索引使用了B-Tree数据结构存储数据,来提高查询效率的。了解B-Tree数据结构有助于理解索引提高查询效率的原理。

使用索引

CREATE INDEX ix_UserInfo_UserName ON userinfo(userName);

修改表(添加索引)

ALTER table userinfo ADD INDEX ix_UserInfo_UserName(userName)

测试索引

EXPLAIN SELECT * FROM userinfo WHERE userName='林冲';

  • 其中, EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

索引优缺点

优点

索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度

索引的优点是可以提高检索数据的速度

缺点

索引的缺点是创建和维护索引需要耗费时间

索引可以提高查询速度,会减慢写入速度。索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

总结

今天的内容相对来说比较轻松,不是特别难。

标签

评论

this is is footer