使用事务将数据从 C 表插入 ask_questions 和 ask_answers 表

本文将介绍如何使用事务将数据从一个名为 C 的表插入到 MySQL 数据库的 ask_questions 和 ask_answers 表中。目标是确保 ask_answers 表的 question_id 字段与 ask_questions 表的主键 id 一一对应。

假设 C 表只有两个字段:'问题标题' 和 '问题答案'。

示例代码:

START TRANSACTION;

INSERT INTO ask_questions (user_id, category_id, title, description, price, hide, answers, status, created_at, updated_at)
SELECT 1, 7, c.title, c.title, 1, 1, 1, 1, NOW(), NOW()
FROM C AS c;

SET @last_id = LAST_INSERT_ID();

INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
SELECT c.title, @last_id + ROW_NUMBER() OVER (ORDER BY c.title), 1007, c.answer, 1, NULL, NOW(), NOW()
FROM C AS c;

COMMIT;

解释:

  1. START TRANSACTION; 开始事务,保证数据操作的原子性。
  2. INSERT INTO ask_questions 使用 SELECT 语句将 C 表的 '问题标题' 数据插入到 ask_questions 表中。
  3. SET @last_id = LAST_INSERT_ID(); 获取最后插入的 ask_questions 记录的 id 值,并存储到变量 @last_id 中。
  4. INSERT INTO ask_answers 使用 SELECT 语句将 C 表的 '问题标题' 和 '问题答案' 数据插入到 ask_answers 表中。
    • 使用 ROW_NUMBER() OVER (ORDER BY c.title) 生成每个 '问题标题' 的序号,并加上 @last_id 作为 question_id,确保其与 ask_questions 表主键 id 一一对应。
  5. COMMIT; 提交事务,将所有更改保存到数据库。

注意事项:

  • ROW_NUMBER() 函数需要在 MySQL 8.0 及以上版本才能使用。如果版本较低,可以使用变量来实现类似的功能。
  • 以上代码示例中假设 user_id, category_id, price, hide, answers, status, adopted_at 等字段都使用固定值。实际应用中,可以根据实际情况进行调整。
  • 建议在正式环境使用之前,先进行测试,确保数据正确插入。
MySQL 事务插入:将数据从 C 表插入 ask_questions 和 ask_answers 表

原文地址: https://www.cveoy.top/t/topic/lO3p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录