您的位置:首页 > 数据库

数据库基础教程(3):相关理论知识

2016-08-15 19:38 471 查看
1、存储过程和函数

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

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等等。

2、数据库中的游标

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

在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


3、触发器

触发器是一种特殊类型的存储过程。触发器主要是通过事件(增,删,改)而进行触发而自动调用执行的。

分为事前触发器,时候触发器,行级触发器,语句级触发器

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)$

就会发现触发器被自动工作了

4、聚集索引和非聚集索引

聚集索引表示数据按照索引的顺序进行存储。显然,这样的检索效率高。但是如果插入和删除数据则会出发很大问题。

非聚集索引是索引存储在一个地方,索引带有的指针指向数据存储位置。索引中的项目按照索引的顺序存储,但是索引指向的数据没有规律。虽然检索效率低,但是,数据更新方便。

聚集索引适合在经常要搜索范围的值。这样知道第一个便可以依次遍历到最后一个。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: