管理联结表的最佳方法是什么? (删除并插入)

时间:2019-06-11 09:51:53

标签: mysql junction-table

我有两个表UsersPermissions,以及这样的联结表UserPermissions(这些表是示例):

CREATE TABLE Users (
    UserLogin varchar(50) PRIMARY KEY,
    UserPassword varchar(50) NOT NULL,
    UserName varchar(50) NOT NULL
);

CREATE TABLE Permissions (
    PermissionKey varchar(50) PRIMARY KEY,
    PermissionDescription varchar(500) NOT NULL
);

-- This is the junction table.
CREATE TABLE UserPermissions (
    UserLogin varchar(50) REFERENCES Users (UserLogin),
    PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
    PRIMARY KEY (UserLogin, PermissionKey)
);

我创建了一个添加和删除用户权限的表单,但是我不知道什么是管理UserPermissions表的最佳方法

想象一下,用户SomeUser拥有3个权限:

INSERT INTO UserPermissions (UserLogin, PermissionKey)
VALUES ('SomeUser', 'TheKey') , ('SomeUser', 'TheKey1') , ('SomeUser', 'TheKey2');

但是稍后(使用该表单)我想更改这些权限并仅放置:TheKey1TheKey4TheKey5 (因此有TheKeyTheKey2权限已被删除)

通过什么方式可以有效地进行此更改,我找到了可行的解决方案:

DELETE FROM UserPermissions WHERE UserLogin = 'SomeUser';
INSERT INTO UserPermissions VALUES ('SomeUser', 'TheKey1') , ('SomeUser', 'TheKey4') , ('SomeUser', 'TheKey5');

是否有更好的方法同时修改五个,十个或二十个权限?

1 个答案:

答案 0 :(得分:0)

我认为删除所有权限,然后像您一样重新插入所有权限是一个好方法。

如果您不想这样做,则必须知道权限是什么,并且仅更新更改。这更加复杂,并且错误更改也更大。