如何从另一个已生成列的数据复制到 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`
我正在研究 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`