MySQL 事务插入:如何将数据从 C 表插入到 ask_questions 和 ask_answers 表
MySQL 事务插入:如何将数据从 C 表插入到 ask_questions 和 ask_answers 表
本教程将介绍如何使用 MySQL 事务将数据从一个名为 C 的表插入到 ask_questions 和 ask_answers 表中,并确保问题和答案之间的关联关系。
假设你已经有一个名为 C 的表,其中包含了问题和答案的相关信息,例如:
| question_title | answer_content | user_id | category_id | |---|---|---|---| | '问题标题1' | '问题答案1' | 1 | 7 | | '问题标题2' | '问题答案2' | 1 | 7 |
现在,你需要将 C 表的数据插入到 ask_questions 和 ask_answers 表中,并确保 ask_answers 表中的 question_id 与 ask_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;
解释
START TRANSACTION;开启事务,确保所有操作要么全部成功,要么全部失败。- 第一个
INSERT语句将 C 表中的数据插入到ask_questions表中。- 使用
SELECT语句从 C 表中获取所需数据,并将其插入到ask_questions表中。 - 由于
ask_questions表中一些字段没有对应值,使用默认值 1 或NOW()函数填充。
- 使用
SET @last_question_id = LAST_INSERT_ID();获取最后插入到ask_questions表中的主键 ID,并将其存储在变量@last_question_id中。- 第二个
INSERT语句将 C 表中的数据插入到ask_answers表中。- 使用
SELECT语句从 C 表中获取所需数据,并将其插入到ask_answers表中。 question_id字段使用之前获取的变量@last_question_id,确保与ask_questions表中的主键 ID 一一对应。- 由于
ask_answers表中一些字段没有对应值,使用默认值 1 或NULL函数填充。
- 使用
COMMIT;提交事务,如果所有操作成功,则将更改永久保存到数据库中。
注意
- 确保 C 表中的
user_id和category_id字段对应ask_questions表中的相应字段。 - 如果 C 表中没有
user_id和category_id字段,则需要手动设置这些值。 - 调整
1007的值以匹配ask_answers表中的user_id值。
以上代码仅供参考,实际应用中需要根据具体情况进行调整。
原文地址: https://www.cveoy.top/t/topic/lO3l 著作权归作者所有。请勿转载和采集!