如何从另一个已生成列的数据复制到 table

how to copy data into a table from another which have generated column

我正在研究 mySql workbench。

我试图复制一个 table 结构及其数据,并创建了另一个具有相同结构和数据的 table:

CREATE TABLE 'm_syokunin_info_dev'LIKE 'm_syokunin_info'; 
INSERT 'm_syokunin_info_dev' SELECT * FROM 'm_syokunin_info';

成功复制了table结构,但是第二行的命令出现了这个错误。

Error Code: 3105. The value specified for generated column 'name' in table 'm_syokunin_info_dev' is not allowed.

table结构:

CREATE TABLE `m_syokunin_info` (
  `id` int(10) unsigned NOT NULL,
  `last_name` varchar(45) DEFAULT NULL,
  `first_name` varchar(45) DEFAULT NULL,
  `han_id` int(10) unsigned DEFAULT NULL,
  `syokunin_type_id` int(10) unsigned DEFAULT NULL,
  `name` varchar(100) GENERATED ALWAYS AS (concat(`last_name`,' ',`first_name`)) VIRTUAL,
  `isDeleted` tinytext,
  `seikyu_type_id` int(11) DEFAULT NULL,
  `mailadress` varchar(100) DEFAULT NULL,
  `group_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`),
  KEY `fk_han_id_idx` (`han_id`),
  KEY `fk_syokunin_type_id_idx` (`syokunin_type_id`),
  CONSTRAINT `fk_han_id` FOREIGN KEY (`han_id`) REFERENCES `m_han` (`id`),
  CONSTRAINT `fk_syokunin_type_id` FOREIGN KEY (`syokunin_type_id`) REFERENCES `m_syokunin_type` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

错误说明生成的列。如何复制生成列中数据以外的数据?

尝试 1: 我试过它指定每一列并排除生成的列,如下所示。但是没用。

INSERT INTO `gas_db`.`m_syokunin_info_dev`
(`id`,
`last_name`,
`first_name`,
`han_id`,
`syokunin_type_id`,
`isDeleted`,
`seikyu_type_id`,
`mailadress`,
`group_id`)
VALUES
(select `id`,
`last_name`,
`first_name`,
`han_id`,
`syokunin_type_id`,
`isDeleted`,
`seikyu_type_id`,
`mailadress`,
`group_id`
FROM `gas_db`.'m_syokunin_info');

尝试 2: 我正在尝试执行以下 sql 但它出现语法错误。为什么?

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''m_syokunin_info'' at line 20


INSERT `gas_db`.`m_syokunin_info_dev`
    (`id`,
    `last_name`,
    `first_name`,
    `han_id`,
    `syokunin_type_id`,
    `isDeleted`,
    `seikyu_type_id`,
    `mailadress`,
    `group_id`)
    SELECT `id`,
    `last_name`,
    `first_name`,
    `han_id`,
    `syokunin_type_id`,
    `isDeleted`,
    `seikyu_type_id`,
    `mailadress`,
    `group_id`
    FROM `gas_db`.'m_syokunin_info';

它必须在 INSERT 中使用列名列表而不是星号.. SELECT,并排除生成的列。

工作查询如下:

INSERT `gas_db`.`m_syokunin_info_dev`
(`id`,
`last_name`,
`first_name`,
`han_id`,
`syokunin_type_id`,
`isDeleted`,
`seikyu_type_id`,
`mailadress`,
`group_id`)
SELECT `id`,
`last_name`,
`first_name`,
`han_id`,
`syokunin_type_id`,
`isDeleted`,
`seikyu_type_id`,
`mailadress`,
`group_id`
FROM `gas_db`.`m_syokunin_info`