MySQL存储过程(PROCEDURE)(二)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL存储过程(PROCEDURE)(二),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3929字,纯文字阅读大概需要6分钟。
内容图文
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……]参数解释:
Sp_name:表示存储过程或函数的名称
characteristic:表示要修改存储过程的哪个部分
Characteristic取值如下
CONTAINS SQL:表示子程序包含SQL语句,但是,不包含读或写数据的语句
NO SQL:表示子程序中,不包含SQL语句
READS SQL DATA:表示子程序中,包含读数据的语句
MODIFIES DATA:表示子程序中,包含写数据的语句
SQL SECURITY {DEFINER | INVOKER}:指明谁有权限来执行
DEFINER:表示只有定义者,自己才能够执行
INVOKER:表示调用者可以执行
COMMENT’string’:表示注释信息
修改存储过程p_test的定义
将读写权限,改为MODIFIES SQL DATA,并指明调用者可以执行
1 /* 2 Alter Procedure Statement 3 Source : MySQL documentation 4 */ 5 ALTER PROCEDURE p_test MODIFIES SQL DATA SQL SECURITY INVOKER;
注意一点:
尚未找到,或者MySQL还没有提供对已存在的存储过程代码进行修改的 方法(函数);但是可以通过MySQL管理工具进行修改;
二、存储过程的查看:
这里使用到了 SELECT 函数:
/* Select Statement Source : MySQL documentation */ SELECT [ STRAIGHT_JOIN ] [ SQL_SMALL_RESULT ] [ SQL_BIG_RESULT ] [ SQL_BUFFER_RESULT ] [ HIGH_PRIORITY ] [ DISTINCT | DISTINCT ROW | ALL ] select_expression,... [ INTO {OUTFILE | DUMPFILE} \‘file_name\‘ export_options ] [ FROM table_references[ WHERE where_definition ] [ GROUP BY {unsigned_integer | col_name | formula} [ ASC | DESC ], ... ] [ HAVING where_definition ] [ ORDER BY {unsigned_integer | col_name | formula} [ ASC | DESC ] ,... ] [ LIMIT [ offset, ] rows ] [ PROCEDURE procedure_name ] FOR UPDATE | LOCK IN SHARE MODE ] ]
参数解释:
[ STRAIGHT_JOIN ] :强制链接顺序
[ SQL_SMALL_RESULT ] :
[ SQL_BIG_RESULT ] :
[ SQL_BUFFER_RESULT ] :强制使用临时表
[ HIGH_PRIORITY ] :优先操作
[ DISTINCT | DISTINCT ROW | ALL ] :[去重、等价于DISTINCT(去重)、默认(所有)]
select_expression:
[ INTO {OUTFILE | DUMPFILE} \‘file_name\‘ export_options ]
1 -- select into ....... 用于创建表的备份复件 2 SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename 3 4 -- 只把需要的列插入新表 5 SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename 6 7 -- 实例 有 join 的语句 8 9 SELECT Persons.LastName,Orders.OrderNo INTO Persons_Order_Backup FROM Persons INNER JOIN Orders ON Persons.Id_P=Orders.Id_P
[ FROM table_references[ WHERE where_definition ] :查询数据
1 select * from table where column_name=‘column_name‘
[ GROUP BY {unsigned_integer | col_name | formula} [ ASC | DESC ], ... ]:分组
[ HAVING where_definition ]:对聚合后结果的限定 与where作用类似,可与group by 连用
1 select pname,count(*) as cnt from ar group by pname having count(*) >1
[ ORDER BY {unsigned_integer | col_name | formula} [ ASC | DESC ] ,... ]:排序
[ LIMIT [ offset, ] rows ]:限制
[ PROCEDURE procedure_name ]:查询存储过程
FOR UPDATE | LOCK IN SHARE MODE ] ]:
在SELECT 的读取锁定主要分为两种方式:
SELECT ... LOCK IN SHARE MODE(共享锁)是读锁(只是不让别人写):在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的session执行完成(否则直接锁等待超时)
SELECT ... FOR UPDATE (排它锁)是写锁(还不让别人加读锁):在数据库中上锁用的,可以为数据库中的行上一个排它锁。当一个事务的操作未完成时候,其他事务可以读取但是不能写入或更新
由此可看出我们需要的查询存储过程的语句是:
1 -- 查询当前数据库下的已知存储过程 2 3 SELECT PROCEDURE p_test 4 5 -- 查询数据库下所有的存储过程 6 SELECT NAME FROM mysql.proc WHERE db=‘数据库名‘; 7 8 -- 或者 9 SELECT routine_name FROM information_schema.routines WHERE routine_schema=‘数据库名‘; 10 11 -- 或者 12 SHOW PROCEDURE STATUS WHERE db=‘数据库名‘;
13
14 -- 查询某个存储过程的详细
15 SHOW CREATE PROCEDURE 数据库.存储过程名;
三、存储过程的删除:
1 DROP PROCEDURE p_name
MySQL存储过程(PROCEDURE)(二)
标签:超时 执行 new 作用 记录 invoke 包含 col state
本文系统来源:https://www.cnblogs.com/zjoe-life/p/10682828.html
内容总结
以上是互联网集市为您收集整理的MySQL存储过程(PROCEDURE)(二)全部内容,希望文章能够帮你解决MySQL存储过程(PROCEDURE)(二)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。