一,各个表格

1、用户表

CREATE TABLE `t_user` (

`id` varchar(40) NOT NULL,

`username` varchar(20) NOT NULL,

PRIMARY KEY (`id`)

)

2、角色表

CREATE TABLE `t_role` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

`description` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

)

3、权限表

CREATE TABLE `t_permission` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

`description` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

)

4、用户角色关系表

CREATE TABLE `user_role` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`user_id` varchar(40) NOT NULL,

`role_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `fk_user_role_t_role_1` (`role_id`),

KEY `fk_user_role_t_user_1` (`user_id`),

CONSTRAINT `fk_user_role_t_role_1` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `fk_user_role_t_user_1` FOREIGN KEY (`user_id`) REFERENCES `t_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

)

5、角色权限关系表

CREATE TABLE `role_permission` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`role_id` int(11) NOT NULL,

`permission_id` int(11) NOT NULL,

PRIMARY KEY (`id`),

KEY `fk_role_permission_t_permission_1` (`permission_id`),

KEY `fk_role_permission_t_role_1` (`role_id`),

CONSTRAINT `fk_role_permission_t_permission_1` FOREIGN KEY (`permission_id`) REFERENCES `t_permission` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `fk_role_permission_t_role_1` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

)

6、测试数据

INSERT INTO `role_permission` VALUES ('1','1','1'), ('2','2','2'), ('3','3','3');

INSERT INTO `t_permission` VALUES ('1','小说收藏',NULL), ('2','小说发布',NULL), ('3','广告发布',NULL);

INSERT INTO `t_role` VALUES ('1','读者',NULL), ('2','作者',NULL), ('3','管理员',NULL);

INSERT INTO `t_user` VALUES ('u1','reader'), ('u11','reader1'), ('u2','author'), ('u22','author2'), ('u3','admin'), ('u33','admin2');

INSERT INTO `user_role` VALUES ('1','u1','1'), ('2','u2','2'), ('3','u3','3'), ('4','u11','1'), ('5','u22','2'), ('6','u33','3');

小说网站,用户表的设计。

用户有着“读者”,“作者”和“管理员”角色,角色有不同权限,如小说收藏,小说发布和广告发布

假定,用户和角色是一对一关系,即一个用户只有一个角色;角色和用户的关系是一对多关系,一个角色对应着多个用户。(方便后面对应英文单词直观反应着关系,如看到reader就是表示读者角色)

角色和权限的关系是多对多关系。即一个角色有着多种权限,同样,一个权限可以分给不同角色。

二、多对多查询

1、查询拥有某角色的用户信息

SELECT

u.id,u.username

FROM

t_user u,t_role r,user_role ur

WHERE

r.id=1 AND  r.id=ur.role_id AND ur.user_id=u.id;

2、查询某用户的对应的角色。

SELECT

u.id,u.username,r.`name` role_name

FROM

t_user u,t_role r,user_role ur

WHERE

u.username LIKE 'a%' AND u.id=ur.user_id AND ur.role_id=r.id;

3、查询拥有某权限的角色

SELECT p.`name`,r.`name`

FROM

t_permission p,role_permission rp,t_role r

WHERE

p.`name`='小说发布' AND p.id=rp.permission_id AND rp.role_id=r.id;

4、查询某角色拥有的权限。

SELECT r.`name`,p.`name`

FROM

t_permission p,role_permission rp,t_role r

WHERE

r.`name`='作者' AND r.id=rp.role_id AND rp.permission_id=p.id;

5、查询某用户拥有的权限。

这里用户和角色是一对一关系,通过先查询用户的角色,再查询权限。(单行单例子查询)

SELECT p.`name`

FROM

t_permission p,role_permission rp,t_role r

WHERE

r.id=rp.role_id AND rp.permission_id=p.id AND  r.id

IN

(SELECT r.id

FROM

t_user u,t_role r,user_role ur

WHERE

u.username ='author' AND u.id=ur.user_id AND ur.role_id=r.id);

6.查询拥有某权限的用户

权限与角色是多对多关系,角色和用户是一对一关系。

这个是查询是多行单列子查询

SELECT

u.id,u.username

FROM

t_user u,t_role r,user_role ur

WHERE

r.id=ur.role_id AND ur.user_id=u.id AND r.id

IN

(SELECT r.id

FROM

t_permission p,role_permission rp,t_role r

WHERE

p.`name`='小说发布' AND p.id=rp.permission_id AND rp.role_id=r.id);

mysql用户角色权限表的关系_用户、角色、权限表的关系(mysql)相关推荐

  1. 数据透视表 字段交叉_删除数据透视表的计算字段的宏

    数据透视表 字段交叉 Have you ever recorded a macro to remove pivot table calculated fields? Just turn on the ...

  2. java权限精确到按钮_搞定权限设计1-页面按钮控制(精确到某个用户和某个按钮)...

    每个系统都离不开权限控制,这里来说说页面上控制到按钮的思路,仅提供思路: 使用 角色 + 资源(菜单和菜单对应页面上的按钮)+ 授权的方式. 1  定义角色与用户: 假定这里我们只控制到角色这一层次, ...

  3. mysql请假表需要什么_课内资源 - 基于JSP和MYSQL数据库实现的请假管理系统

    1 系统概述 1.1 系统说明 该系统用于海宁市医院的员工请假的专用请假系统,将员工请假的申请.审批.查询流程规范化,并进行必要的记录,为后面奖金的发放和人事升迁做参考. 同时该系统还支持管理员对用户 ...

  4. mysql分库分表按时间_数据库分库分表思路

    一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降 ...

  5. mysql表大小限制_技术分享 | 在磁盘上查找 MySQL 表的大小

    作者:Peter Zaitsev 翻译:管长龙 我想知道 MySQL 表在磁盘上占用多少空间,但看起来很琐碎.不应该在 INFORMATION_SCHEMA.TABLES 中提供这些信息吗?没那么简单 ...

  6. mysql 两张表合并查询_中级数据分析-多表查询

    表的加法 表的联结 联结应用案例 case应用案例 一.表的加法 加法:union 表的加法是把两个表的数据,按行合并在一起. 表的加法,会把两个表里重复的数据删除,只保留一个. 如果想保留重复数据, ...

  7. mysql两表查询单个_对两个表进行单个MySQL选择查询是可能的吗?

    是的,有可能.以下是语法-select * from yourTableName1,yourTableName2; 让我们首先创建一个表-mysql> create table DemoTabl ...

  8. mysql表空间满_怎么解决数据库表空间不足

    一.数据库表空间不足导致了,插入操作会报出conn.msg = ORA-01653: 表 *******表名字********无法通过 8192 (在表空间 USERS 中) 扩展 ORA-06512 ...

  9. mysql内连接运算量会增加多少_新年手打,40道经典MYSQL面试干货,速来收藏

    MySQL 面试题 1.MySQL 中有哪几种锁? 1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最 高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发 ...

  10. pymysq向mysql写数据 为什么本地无法查看_从运维角度浅谈MySQL数据库优化,中小企业DBA必会...

    原文:http://www.enmotech.com/web/detail/1/712/1.html(复制链接,打开浏览器即可查看原文) 作者:搬砖游击队 一个成熟的数据库架构并不是一开始设计就具备高 ...

最新文章

  1. Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
  2. 静态html文件js读取url参数
  3. 四、“一场跨越时空持续数世纪的对话”
  4. 算法设计与分析:芯片测试问题、选择问题详解
  5. android string数组转json_移动端开发基础【20】pages.json的配置项pages
  6. 中职学校计算机教学参考文献,学生计算机论文,关于中职学校计算机专业教学现状相关参考文献资料-免费论文范文...
  7. laravel知识点: 了解应用环境
  8. 适合用于UI设计器/开发人员探索您或他人创建的UI的一款UI设计开发软件——QuickLens for Mac
  9. proe把零件转化为stl在unity中使用注意事项
  10. 知乎:tomcat 与 nginx,apache的区别是什么?
  11. 苦才是人生的经典美言
  12. 笔记本计算机无线开关在哪里,笔记本电脑无线开关在哪怎么打开关闭
  13. 确定sw1开关信号输入端口_MEMS光学器件— MEMS OXC(光交叉互连开关)
  14. 【区块链讲师会前访谈】结合应用场景 区块链共识算法如何选择?
  15. EGPU use in NUC about ubuntu20.04.5
  16. Validform使用说明
  17. CI框架教程5——整合PHPExcel库应用
  18. 天眼安全设备的初步使用
  19. Linux signal那些事儿【转】
  20. 【Redis核心原理和应用实践】应用 2:缓兵之计 —— 延时队列

热门文章

  1. Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm
  2. 微信表情包的制作以及50*50像素图片太模糊的处理方法
  3. word论文封面下划线对齐
  4. 自动回复html模板邮件,outlook邮件自动回复设置
  5. 小米路由器4A千兆版c341编程器刷breed.bin详细教程
  6. excel只计算隐藏不计算机,excel计算公式求和_excel中如何让隐藏数据不参与求和计算?_excel表格数据求和...
  7. linux下oracle imp,oracle中imp命令Linux下使用
  8. matpolitlib 画图
  9. 程序员学英语之如何优雅的将单词本导出的txt文本转换为Excel
  10. 我是如何将LINE表情包转化为微信表情包的?/How I convert Line stickers into Wechat stickers just as the way they are?