这是MySQL 5实力养成暨评量里的8-16.‘修改预储程序使用者需要有下列何项权限?’
答案:(D) Alter Routine
[adsense][/adsense]
这个错误起源于我们只认识Grant,显然也不是全了解它的用途,还有就是Alter Routine为什么是Routine而不是Procedure呢?我们就看看哪里有出现过Alter Routine吧。
在MySQL GRANT及REVOKE语法我们有提过CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序,而这个子程序等级看起来是在GRANT下的,所以GRANT是讨论较大的范畴,而Update、Alter及ALTER ROUTINE则是GRANT下讨论的权限选项。
在MySQL提供的权限的GRANT和REVOKE语句所用的涉及权限的名称也有提到,ALTER ROUTINE是用在预储的程式,原先预储的程式是翻作保存的程式,这有点怪怪的,让人无法理解,对照英文是stored routine,再细查才发现这是讨论预储程序(stored procedure)跟自订函式(function)的,所以在接来也有一句‘需要CREATE ROUTINE权限来建立预储的程式(函式和程序),ALTER ROUTINE权限来更改和删除预储的程式,EXECUTE来执行预储的程式。’因应翻译的舒服,我们都改成预储程式、函式及程序这样可能比较好分辩的出来。
也因为如此,所以在MySQL自订函式参数用法in会再提到‘要在MySQL 5.1中建立子程式,必须具有CREATE ROUTINE权限,并且ALTER ROUTINE和EXECUTE权限被自动授予它的建立者。’
这里翻的子程式查原文应该就是stored routines了,所以我们也应该改成预储程式会较妥。
这样子改译,可以让我们对GRANT跟ALTER ROUTINE有较清楚的理解。

1 則留言
Comments are closed.