MySql练习 多对多表练习-用户角色权限表

前言:对数据库知识回顾,创建数据库、创建表、主键约束、外键约束、表关系(多对多)。

一、表描述
一张用户表,一张角色表,一张权限表。一个用户对应多个角色,一个角色对应多个用户同时对应多个权限,一个权限可以对应多个角色。

以下为Sql语句:


-- 创建数据库
CREATE DATABASE day19hometest;

-- 切换到指定数据库
USE day19hometest;

-- 创建用户表
CREATE TABLE `user`(
    uid INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20),
    `password` VARCHAR(20)
);
-- 创建角色表
CREATE TABLE role(
    rid INT PRIMARY KEY AUTO_INCREMENT,
    rname VARCHAR(20)
);

-- 创建用户与角色关联表
CREATE TABLE user_role(
    u_uid INT,
    u_rid INT
);


/*
一个用户对应多个角色,一个角色对应多个用户

*/
-- 添加外键约束
ALTER TABLE user_role ADD CONSTRAINT fk_u_rid FOREIGN KEY(u_rid) REFERENCES `user`(uid);

ALTER TABLE user_role ADD CONSTRAINT fk_u_uid FOREIGN KEY(u_uid) REFERENCES role(rid);




-- 为用户表插入数据
INSERT INTO `user` VALUE 
(NULL,'大家都说名字长不会被发现','ccc12345'),
(NULL,'都说名字长不会被发现','xxx12345'),
(NULL,'名字好长好像不容易被发现','zzz12345');
-- 为角色表中插入数据
INSERT INTO role VALUE 
(NULL,'用户'),
(NULL,'会员用户'),
(NULL,'超级会员用户');


-- 测试关联表
INSERT INTO user_role VALUE
(1,3);-- 正确信息

INSERT INTO user_role VALUE (1,4);-- 错误信息

-- 增加权限表
CREATE TABLE privilege(
    pid INT PRIMARY KEY AUTO_INCREMENT,
    pdescription VARCHAR(50)
);

-- 为权限表添加数据
INSERT INTO privilege VALUE 
(NULL,'普通学习资料'),
(NULL,'付费学习资料'),
(NULL,'超级会员特有付费学习资料');


-- 创建角色与权限关联表
CREATE TABLE role_pri(
    r_p_rid INT,
    r_p_pid INT
);
/*
一个角色
*/
-- 添加外键约束
ALTER TABLE role_pri ADD CONSTRAINT fk_r_p_rid FOREIGN KEY (r_p_rid) REFERENCES role(rid);
ALTER TABLE role_pri ADD CONSTRAINT fk_r_p_pid FOREIGN KEY (r_p_pid) REFERENCES privilege(pid);

-- 测试关联表
INSERT INTO role_pri VALUE (1,3); -- 正确信息
INSERT INT role_pei VALUE (1,4);-- 错误信息

二、架构设计图
MySql练习 多对多表练习-用户角色权限表_第1张图片

你可能感兴趣的:(关系型数据学习)