MySQL 5.7 事务插入:将数据从 C 表插入到 ask_questions 和 ask_answers 表
MySQL 5.7 事务插入:将数据从 C 表插入到 ask_questions 和 ask_answers 表
本文将介绍如何使用 MySQL 5.7 中的事务将数据从 C 表插入到 ask_questions 和 ask_answers 表,并确保问答数据的完整性和一致性。
假设你有一个名为 C 的表,其中包含 '问题标题' 和 '问题答案' 两个字段。你的目标是将 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)
VALUES
(1, 7, '$问题标题1', '$问题标题1', 1, 1, 1, 1, @timestamp1 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24 + 24) HOUR), @timestamp1),
(1, 7, '$问题标题2', '$问题标题2', 1, 1, 1, 1, @timestamp2 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24 + 24) HOUR), @timestamp2);
SET @question_id = LAST_INSERT_ID();
INSERT INTO ask_answers (question_title, question_id, user_id, content, status, adopted_at, created_at, updated_at)
SELECT C.'问题标题', Q.id, 1007, C.'问题答案', 1, NULL, @timestamp1 := DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 24) HOUR), @timestamp1
FROM C
JOIN ask_questions Q ON Q.title = C.'问题标题';
COMMIT;
解释
- START TRANSACTION:开始一个事务,确保插入操作的原子性。
- INSERT INTO ask_questions:将初始数据插入到
ask_questions表中,并使用LAST_INSERT_ID()函数获取最后插入的记录的 ID,存储到@question_id变量中。 - INSERT INTO ask_answers:使用
SELECT语句从C表和ask_questions表中获取需要插入的数据。通过JOIN语句连接C表和ask_questions表,确保question_title和question_id对应。Q.id表示ask_questions表中的主键 ID,与C表中的问题标题一一对应。 - COMMIT:提交事务,完成插入操作。
注意事项
- 以上代码假设
C表中的问题标题字段与ask_questions表中的title字段是相同的。 @timestamp1变量用于生成随机时间戳,可以根据实际需求修改。- 确保
C表的数据与ask_questions和ask_answers表的字段类型和格式一致。 - 在实际应用中,建议使用参数化查询来防止 SQL 注入攻击。
总结
通过以上步骤,你可以使用 MySQL 5.7 事务将数据从 C 表插入到 ask_questions 和 ask_answers 表中,并确保问答数据的完整性和一致性。 使用事务可以保证数据插入的原子性,即使在出现错误的情况下也能确保数据的完整性。
原文地址: https://www.cveoy.top/t/topic/lO3C 著作权归作者所有。请勿转载和采集!