启动MySQL例程和脚本

时间:2010-06-28 02:53:48

标签: sql mysql stored-procedures

我已经使用MySQL一段时间了,但只有基本查询和一些连接。我想开始使用存储过程,但我无法找到一个好的资源来帮助我了解我想知道的事情。

我想知道的主要内容是如何在返回任何内容之前检查整个数据库中任何字段的值。例如:定义用户的表和定义用户具有的权限的表。我想检查是否有一定的许可 - >做任何事之前的用户关系。

这是一个简化的表格图表:

Users:
ID     |   Username
1      |   User1
2      |   User2
3      |   User3
N      |   UserN

Permissions:
User ID      |     Permission ID
1            |     1
2            |     1
1            |     2
etc etc

基本上,我想将以下伪代码转换为MySQL例程:

if (SELECT * FROM Permissions WHERE 'User ID' = ? and 'Permission ID' = ? returns at least one row) {
      execute privileged sql
      return true
 }
 return false

我知道我可能会在这里问很多,但是非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

以下是一个例子:

drop table if exists Permissions;

create table  Permissions (
    id int,
    username varchar(50)
);
insert into Permissions (id, username) 
select 1, 'Gump'
union select 2, 'Forrest';

drop procedure if exists CheckPermissions;

DELIMITER //
 CREATE PROCEDURE CheckPermissions(
    IN checkPermission int,
    IN checkUser varchar(50),
    IN execSql varchar(512))
   BEGIN
   DECLARE declSql varchar(512);
   IF EXISTS (SELECT *  FROM Permissions p 
              WHERE p.id = checkPermission AND p.username = checkUser) 
   THEN
     SET @declSql = execSql;
     PREPARE stmt FROM @declSql;
     EXECUTE stmt;
     DEALLOCATE PREPARE stmt;
   END IF;
   END //
 DELIMITER ;

call CheckPermissions(1, 'Gump', 'select 1 as PermissionOk');
call CheckPermissions(2, 'Gump', 'select 2 as NotExecuted');

打印:

PermissionOK
1

MySQL的程序使用和开发都很痛苦。例如,我不得不将参数SQL复制到声明的变量,因为它不起作用;文档没有提供任何线索的原因。

如果可能的话,我会在客户端上实现这个逻辑。