Mysql如何向存在外鍵的數據表中插入數據


1、創建表

CREATE TABLE `trn_comment_msg` (
  `comMsgId` int(11) NOT NULL AUTO_INCREMENT COMMENT '評論消息主鍵',
  `msgId` int(11) NOT NULL COMMENT '消息ID',
  `comId` int(11) NOT NULL COMMENT '課程評論ID',
  `createUserId` int(11) NOT NULL COMMENT '消息創建人Id',
  PRIMARY KEY (`comMsgId`),
  KEY `fk_comMsg_msg_idx` (`msgId`),
  KEY `fk_comMsg_com_idx` (`comId`),
  KEY `fk_trn_comment_msg_vs_usr_user_info_idx` (`createUserId`),
  CONSTRAINT `fk_comMsg_com` FOREIGN KEY (`comId`) REFERENCES `trn_course_comment` (`comId`) ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT `fk_comMsg_msg` FOREIGN KEY (`msgId`) REFERENCES `sys_msg` (`msgId`) ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT `fk_trn_comment_msg_vs_usr_user_info_on_createUserId` FOREIGN KEY (`createUserId`) REFERENCES `sys_user` (`userId`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=189 DEFAULT CHARSET=utf8 COMMENT='評論消息表';

2、新增列

ALTER TABLE `trn_comment_msg` 
ADD COLUMN `content` VARCHAR(1000) NOT NULL COMMENT '消息內容' AFTER `createUserId`,
ADD COLUMN `courseName` VARCHAR(20) NOT NULL COMMENT '課程名稱' AFTER `content`;

3、歷史數據遷移

-- trn_course_comment歷史數據遷移
update trn_comment_msg tcm
inner join trn_course_comment tcc on tcm.comId=tcc.comId
inner join trn_course tc on tc.courseId=tcc.courseId
set tcm.content=tcc.content,tcm.courseName=tc.courseName

4、新增數據

1、向trn_course_comment表新增數據,必須保證其關聯的外鍵表`trn_course_comment`,`sys_msg`,`sys_user`中的comId,msgId,userId存在trn_course_comment表要新增的數據,否則報外鍵異常

2、暫時關閉外鍵約束,新增數據后在打開

SET SQL_SAFE_UPDATES=0SET FOREIGN_KEY_CHECKS=0;

注意此方案插入數據時可能會存在含有外鍵約束的字段數據不匹配的情況

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM