【问题标题】:MySQL Create entry for each row in a tableMySQL为表中的每一行创建条目
【发布时间】:2020-10-30 22:27:18
【问题描述】:

我知道这个问题一定有答案,但我似乎无法将搜索词正确地放在一起。

假设我有一个现有的表 'foo'

foo
| id | data1 | data2 | ... |
----------------------------
|1   | abc   | def   | ghi |
|2   | abc   | def   | ghi |
...

我想创建一个新表 bar,它与 foo 具有 1 对 1 的关系,其中 foo 获取一个名为 barId 的新外键列,并且 foo 的每个条目都必须有一个相关的 barID,因此最终结果如下所示:

foo
| id | data1 | data2 | ... | barID |
------------------------------------
|1   | abc   | def   | ghi | 1     |
|2   | abc   | def   | ghi | 2     |
...

bar
| id | dataA | dataB |
----------------------
| 1. | null  | null  |
| 2. | null  | null  |

我遇到的问题是,在定义 bar 之后,我无法为 foo 的每个条目创建一行,然后为每个新创建的 bar 记录设置 foo.barId。

如果我用程序语言来做这件事,我会写类似下面的伪代码

createTable(bar);
foo.createColumn("barId"); 
for each (entry in foo) {
    barEntry = bar.createNewEntry();
    entry.setBarId(barEntry.ID);
}

如何使用 MySQL 实现这个目标?

【问题讨论】:

  • 您遇到了什么麻烦?有什么错误吗?您可以添加有关如何尝试创建行的详细信息吗?
  • 我什么都不懂。空值表有什么用?也许如果这个例子不那么抽象?
  • 我只是不知道该怎么做。我将如何在 bar 中为每个现有的 foo 条目创建一个条目?我使用 null 是因为表中的实际数据无关紧要。对我来说重要的是 foo 和 bar 之间存在链接,并且 bar 中的每个 foo 条目都有一个条目。

标签: mysql


【解决方案1】:

以下未能解决问题的哪些部分?

DROP TABLE IF EXISTS users;

CREATE TABLE users
(user_id SERIAL PRIMARY KEY
,user_name VARCHAR(12) UNIQUE
);

DROP TABLE IF EXISTS user_role;

CREATE TABLE user_role
(user_id INT NOT NULL PRIMARY KEY
,role ENUM('guest','user','administrator')
);

INSERT INTO users VALUES (NULL,'John');

INSERT INTO user_role VALUES (LAST_INSERT_ID(),'administrator');

 SELECT * FROM users;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
|       1 | John      |
+---------+-----------+
1 row in set (0.00 sec)

SELECT * FROM user_role;
+---------+---------------+
| user_id | role          |
+---------+---------------+
|       1 | administrator |
+---------+---------------+

编辑:扩展这个想法,考虑以下...

INSERT INTO users (user_name) VALUES ('Paul'),('George'),('Ringo');

INSERT IGNORE INTO user_role SELECT user_id, 'guest' FROM users;

SELECT * FROM users;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
|       1 | John      |
|       2 | Paul      |
|       3 | George    |
|       4 | Ringo     |
+---------+-----------+

SELECT * FROM user_role;
+---------+---------------+
| user_id | role          |
+---------+---------------+
|       1 | administrator |
|       2 | guest         |
|       3 | guest         |
|       4 | guest         |
+---------+---------------+

请注意,将 1-1 关系存储在单独的表中有点不寻常,但这样做可能有正当理由 - 特别是与权限有关。

【讨论】:

  • 感谢您的回复,这归结为我没有正确提出问题 - 在我的问题中,“用户”表大致是“foo”表,“user_role”大致是酒吧。所以我认为这没有解决的关键部分是,在我的示例中,用户已经存在并且有很多条目。我需要解决的是如何在新的 user_role 表中创建条目,以便每个用户条目在 user_roles 中都有一个唯一的条目,并且用户表具有 user_role 的外键,该外键用 user_role 中新创建的条目中的 id 填充.
  • 我用一些伪代码编辑了最初的评论,试图具体说明我想用 MySQL 实现什么
猜你喜欢
  • 2014-09-30
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
相关资源
最近更新 更多