mysql阅读笔记四

  

游标(cursor)是一个存储在mysql服务器上的数据库查询,它不是一条select语句,而是被该语句检索出来的结果集,在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。Mysql的游标只能用于储存过程。

注意事项:在使用游标之前,必须声明它,这个过程没有检索数据,只是定义要使用的select语句;一旦声明,必须打开游标,以供使用,这个过程用前面定义的select语句把数据实际检索出来;对于填有数据的游标,根据需要检索各行。在结束游标使用时,必须关闭游标。

create procedure processorders()

begin

declare done boolean default0;

declare o int;

declare t decimal(8,2);

注意:declare语句的发布存在特定的次序,用declare语句定义的局部变量必须定义在任意游标或句柄之前,而句柄必须定义在游标之后。

declare ordernumbers cursor

for

select order_num from orders;

declare continue handler forsqlstate '02000' set done=1;//句柄:没找到数据的一行,设置done=1,后又继续执行,多了最后一行

create table if not existsordertotals

(order_num int,

total decimal(8,2));

open ordernumbers;

repeat

fetch ordernumbers into o;

call ordertotal(o,1,t);

insert intoordertotals(order_num,total) values(o,t);

until done end repeat;

close ordernumbers;

end;

触发器是mysql响应delete、insert、和update语句而自动执行的一条mysql语句。

创建触发器时,需要给出4条信息:唯一的触发器名,触发器关联的表,触发器相应的活动,触发器何时执行(处理之前与之后),只有表持支持触发器,视图不支持触发器。

Insert触发器在Insert语句执行之前或之后执行:

在insert触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行

在before insert触发其中,NEW中的值可以被更新(允许更改被插入的值)

对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值。

 

Delete触发器

查看所有的触发器:SELECT* FROM information_schema.triggers;

删除触发器:drop trigger 触发器名;

在Delete触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行。

OLD表的值全都是只读的,不能更新。

删除操作时,如果有外键进行约束,则删除不了

Create trigger deleteorder before delete onorders

For each row

Begin

Insert intoarchive_orders(order_num,order_date,cust_id)

Values(OLD.order_num, OLD.order_date, OLD.cust_id);

End;

Update触发器

在Update触发其中,引用一个OLD虚拟表表示访问以前的值(update语句前的值),引用一个NEW虚拟表表示访问更新的值。

在beforeupdate触发其中,NEW的值也可能被更新(允许更改将要用于UPDATE语句的值)

Create trigger updatevendorbefore update on vendors

For each row setnew.vend_state=upper(New.vend_state);

OLD中的值全是只读,不能更新

更新一行触发一行,更改多行,触发多行

事务处理用来管理insert、update、delete语句。不能回退create或drop操作。

隐函事务关闭 当commit或rollback语句执行后,事务会自动关闭,保留点在事务处理完成之后自动释放。

Show character set;这条语句显示所有可用的字符集以及每个字符集描述和默认校对。

Show collation;显示所有可用的校对列表。

在创建数据库时,指定默认的字符集和校对,为确定所用的字符集和校对,使用show

Variables like ‘character%’;和showvariable like ‘collation%’;

其中校对在对orderby子句检索出来的数据排序起重要作用,

管理用户:mysql用户账号和信息存储在名为mysql的MYSQL的数据库中。

Select user from user;

创建用户账号:createuser admin@’%’  identified by ‘密码’;

重新命名一个用户账号,使用renameuser admin to li;

删除用户drop user admin;

查看用户的权限:showgrants for admin;

权限USAGEON *.*:表示在任意数据库和任意表上对任何东西都没有权限。

设置权限:grant要给出 要授予的权限;被授予访问权限的数据库或表;用户名

Grant select on commerce.* toadmin;

Revoke撤销给定的权限

Revoke select on commerce.*from admin;

Grant 和revoke可在几个层次上控制访问权限:

整个服务器:使用grantall和revoke all;

整个数据库使用:ondatabase.*

特定的表:ondatabase.table;

特定的列和特定的存储过程

更改用户口令:setpassword for admin=password(‘admin’);

设置自己的用户口令:setpassword=password(‘admin’);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值