我只想自动更新与外键链接的2个表的列。 更重要的是,这些列不仅要包含一个值,还要包含值列表。
以下是我的例子:
Table Name : members
Member name : Demo User
Assigned Tasks : <List of tasks assigned to "Demo User">
Table Name : tasks
Task Name : Modeling
Assigned To : <List of users assigned to "Modeling">
在每个表中,我希望能够在列中插入值,而另一个表会自动更新。
示例:
Table Name : members
Member name : Demo User
Assigned Tasks : Modeling,Mapping
Table Name : tasks
Task Name : Modeling
Assigned To : AUTOMATIC UPDATE ->Demo User
Task Name : Mapping
Assigned To : AUTOMATIC UPDATE ->Demo User
我尝试使用外键(使用innoDB),但我只是成功在列中插入一个值,而另一个表未自动更新...
感谢您的帮助!
答案 0 :(得分:0)
永远不要在数据库中存储分隔值。通过创建多对多表(在您的情况下,让我们称之为assigned_tasks
)来规范化您的数据。通过使您能够正常维护和查询数据,它将在长期内节省大量时间。
据说你的架构看起来像
CREATE TABLE members
(
member_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
member_name VARCHAR(32)
);
CREATE TABLE tasks
(
task_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
task_name VARCHAR(32)
);
CREATE TABLE assigned_tasks
(
member_id int,
task_id int,
PRIMARY KEY (member_id, task_id),
FOREIGN KEY (member_id) REFERENCES members (member_id),
FOREIGN KEY (task_id) REFERENCES tasks (task_id)
);
现在,如果您需要具有每个用户的分隔任务列表的表示,您可以使用GROUP_CONCAT()
和GROUP BY
SELECT m.member_id, m.member_name, GROUP_CONCAT(t.task_name) tasks
FROM assigned_tasks a JOIN members m
ON a.member_id = m.member_id JOIN tasks t
ON a.task_id = t.task_id
GROUP BY m.member_id, m.member_name
输出:
| MEMBER_ID | MEMBER_NAME | TASKS | |-----------|-------------|------------------| | 1 | Demo User | Modeling,Mapping |
这是 SQLFiddle 演示