MySQL - 使用外键将行复制到另一个表

问题描述

我想从该表中复制 1 行:

tableold
-----------
oid (primary key,auto_incremment)
name
age
detail

到这张桌子:

tablenew
------------
nid (primary key,auto_incremment)
fid (foreign key to another table)
name
age
detail

使用此 sql 命令:

INSERT INTO tablenew (tablenew.name,tablenew.age,tablenew.detail)
SELECT tableold.name,tableold.age,tableold.detail
FROM tableold
WHERE tableold.oid = 123;

但我收到错误

错误 1364 (HY000):字段“fid”没有认值

是否可以手动将外键“fid”添加sql-Command 中?

*编辑,我添加了 CREATE 表语句:

CREATE TABLE `othertable` (
  `fid` int NOT NULL AUTO_INCREMENT,`value1` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`value2` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`value3` longtext CHaraCTER SET utf8 COLLATE utf8_general_ci,`value4` longtext CHaraCTER SET utf8 COLLATE utf8_general_ci,PRIMARY KEY (`fid`),) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8;

CREATE TABLE `tablenew` (
  `nid` int NOT NULL AUTO_INCREMENT,`fid` int NOT NULL,`name` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`detail` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`sid`),KEY `fid_fkey` (`fid`),CONSTRAINT `fid_fkey` FOREIGN KEY (`fid`) REFERENCES `othertable` (`fid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `tableold` (
  `oid` int NOT NULL AUTO_INCREMENT,`name` varchar(60) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` varchar(60) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`detail` varchar(60) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`oid`)
) ENGINE=InnoDB AUTO_INCREMENT=157 DEFAULT CHARSET=utf8;

解决方法

我已经解决了:

INSERT INTO tablenew (tablenew.fid,tablenew.name,tablenew.age,tablenew.detail)
SELECT 'value',tableold.name,tableold.age,tableold.detail
FROM tableold
WHERE tableold.oid = value;