作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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
我知道我可能会在这里问很多问题,但是任何帮助将不胜感激!
最佳答案
这是一个例子:
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 复制到声明的变量,因为否则它不起作用;该文档没有提供任何线索。
如果可能的话,我会在客户端实现此逻辑。
关于sql - 启动 MySQL 例程和脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129816/
我是一名优秀的程序员,十分优秀!