как скопировать данные в таблицу из другой, имеющей сгенерированный столбец - PullRequest
0 голосов
/ 27 мая 2020

Я работаю над mySql workbench.

Я попытался скопировать структуру таблицы и ее данные и создал другую таблицу с такой же структурой и данными:

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

Он успешно скопировал структуру таблицы, но я получил эту ошибку для команды для 2-й строки.

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

Структура таблицы:

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;

Ошибка говорит о сгенерированном столбце. Как скопировать данные, отличные от данных, в сгенерированный столбец?

Try1: Я попробовал указать каждый столбец и исключить сгенерированный столбец следующим образом. Но это не работает.

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');

Try2: Я пытаюсь выполнить следующее 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';

1 Ответ

0 голосов
/ 27 мая 2020

Он должен был использовать список имен столбцов вместо звездочки в 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`
...