MySQL 事务插入:如何将数据从 C 表插入到 ask_questions 和 ask_answers 表

本教程将介绍如何使用 MySQL 事务将数据从一个名为 C 的表插入到 ask_questionsask_answers 表中,并确保问题和答案之间的关联关系。

假设你已经有一个名为 C 的表,其中包含了问题和答案的相关信息,例如:

| question_title | answer_content | user_id | category_id | |---|---|---|---| | '问题标题1' | '问题答案1' | 1 | 7 | | '问题标题2' | '问题答案2' | 1 | 7 |

现在,你需要将 C 表的数据插入到 ask_questionsask_answers 表中,并确保 ask_answers 表中的 question_idask_questions 表中的主键 ID 一一对应。

解决方案

可以使用以下 SQL 语句实现:

START TRANSACTION;

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

SET @last_question_id = LAST_INSERT_ID();

INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
SELECT question_title, @last_question_id, 1007, answer_content, 1, NULL, NOW(), NOW() FROM C;

COMMIT;

解释

  1. START TRANSACTION; 开启事务,确保所有操作要么全部成功,要么全部失败。
  2. 第一个 INSERT 语句将 C 表中的数据插入到 ask_questions 表中。
    • 使用 SELECT 语句从 C 表中获取所需数据,并将其插入到 ask_questions 表中。
    • 由于 ask_questions 表中一些字段没有对应值,使用默认值 1 或 NOW() 函数填充。
  3. SET @last_question_id = LAST_INSERT_ID(); 获取最后插入到 ask_questions 表中的主键 ID,并将其存储在变量 @last_question_id 中。
  4. 第二个 INSERT 语句将 C 表中的数据插入到 ask_answers 表中。
    • 使用 SELECT 语句从 C 表中获取所需数据,并将其插入到 ask_answers 表中。
    • question_id 字段使用之前获取的变量 @last_question_id,确保与 ask_questions 表中的主键 ID 一一对应。
    • 由于 ask_answers 表中一些字段没有对应值,使用默认值 1 或 NULL 函数填充。
  5. COMMIT; 提交事务,如果所有操作成功,则将更改永久保存到数据库中。

注意

  • 确保 C 表中的 user_idcategory_id 字段对应 ask_questions 表中的相应字段。
  • 如果 C 表中没有 user_idcategory_id 字段,则需要手动设置这些值。
  • 调整 1007 的值以匹配 ask_answers 表中的 user_id 值。

以上代码仅供参考,实际应用中需要根据具体情况进行调整。

MySQL 事务插入:如何将数据从 C 表插入到 ask_questions 和 ask_answers 表

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

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