(1) DEFINER的意思是“定义者”,也就是指明此存储过程有哪个用户定义的,它跟存储过程的使用权限无关;可以说,存储和过程是没有使用限制的,任何人都可以使用存储过程,那么为什么还要加上DEFINER指定存储过 程的定义者呢,因为,存储过程虽然不限制任何人使用,但是它本身的行为必须受到权限限制,也就是存储过程本身内部具备哪些对数据库的访问权,而这访问权限便是DEFINER用户对数据库的访问权限。
(2) DEFINER被定义为一个普通的username@hostname用户就不必说了,如果定义为root@%,有什么特别的吗?没有。只不过数据库中要存在root@%用户,否则创建的时候没事,调用的时候就提示root@% is not registered,也就是用户不存在。
(3) DEFINER也可以省略掉,这样存储过程默认的定义者是root
@localhost ,而一般数据库在安装的时候都会有一个root@localhost用户,所以,该存储过程也能正常在不同的机器上被使用。