数据库种的一些工具

存储过程和函数

而存储过程可以返回多个。存储过程是为了尽量发挥一个数据库软件的性能而设计的。定义存储过程的语法如下

create proc usp_StudentByGenderAge

  @gender nvarchar(10) [='男'],

  @age int [=30]

  as

  select * from MyStudent where FGender=@gender and FAge=@age

显然,颇为类似定义了一个函数。有两个输入参量。还制定了默认值。[]表示可有可无的东西。调用的语法也比较简单
exec usp_StudentByGenderAge ‘女’,50
在mysql中创建存储过程是create procedure

mysql> DELIMITER //   
mysql> CREATE PROCEDURE proc1(OUT s int)   
    -> BEGIN  
    -> SELECT COUNT(*) INTO s FROM user;   
    -> END  
    -> //   
mysql> DELIMITER ;  

调用的办法是

mysql > SET @p_in=1;   
mysql > CALL demo_in_parameter(@p_in);  

而数据库中的常用函数有
合计函数:count,sum,avg,min,max
日期与实践函数 day month year weekday date today current等等。

数据库中的游标

游标是一种临时的数据库对象。可以用来存放数据库表中的数据行副本。所以,常见的的用出就是用来保存查询结果。如果一个结果集需要重复使用若干次,显然重复查询若干次不是什么好办法。

在mysql中,定义游标的语句是
DECLARE cursor_name CURSOR FOR select_statement

打开游标的语句是
OPEN cursor_name

使用游标的语句是
FETCH cursor_name INTO var_name [, var_name] …

关闭游标的语句是
CLOSE cursor_name

MYSQL中使用游标的一个存储过程如下:

BEGIN
 DECLARE  no_more_record INT DEFAULT 0;
 DECLARE  pID BIGINT(20);
 DECLARE  pValue DECIMAL(15,5);
 DECLARE  cur_record CURSOR FOR   SELECT colA, colB from tableABC;  /*首先这里对游标进行定义*/
 DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1; /*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/

 OPEN  cur_record; /*接着使用OPEN打开游标*/
 FETCH  cur_record INTO pID, pValue; /*把第一行数据写入变量中,游标也随之指向了记录的第一行*/

 WHILE no_more_record != 1 DO
 INSERT  INTO testTable(ID, Value)
 VALUES  (pID, pValue);
 FETCH  cur_record INTO pID, pValue;

 END WHILE;
 CLOSE  cur_record;  /*用完后记得用CLOSE把资源释放掉*/
END

触发器

触发器是一种特殊类型的存储过程。触发器主要是通过事件(增,删,改)而进行触发而自动调用执行的。
分为事前触发器,时候触发器,行级触发器,语句级触发器
mysql中定义触发器的语句如下

create trigger triggerName

after/before insert/update/delete on 表名

for each row   #这句话在mysql是固定的


begin

sql语句;

end;

一个例子为

需要先执行该语句:delimiter $(意思是告诉mysql语句的结尾换成以$结束)
create trigger tg1
after insert on o
for each row 
begin
update g set num=num-3 where id=1;
end$


这时候我们只要执行:
insert into o(gid,much) values(1,3)$
就会发现触发器被自动工作了

聚集索引和非聚集索引

聚集索引一个表只能有一个。一般如果你不特意指定,数据库会将你的主键指定为聚集索引。当主键没有业务价值的时候(比如一个单纯的UUID),你也可以选择其他列作为聚集索引。对于innodb,如果你连主键都没有选,mysql会为你创建一个并加上聚集索引(内部生成的rowid)。

聚集索引表示数据按照索引的顺序进行存储。显然,这样的检索效率高。但是如果插入和删除数据则会出发很大问题。
非聚集索引是索引存储在一个地方,索引带有的指针指向数据存储位置。索引中的项目按照索引的顺序存储,但是索引指向的数据没有规律。虽然检索效率低,但是,数据更新方便。
聚集索引适合在经常要搜索范围的值。这样知道第一个便可以依次遍历到最后一个。

事件调度器

就是一个定时任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值