@Vitalionus

Mysql разрешить insert для generated column или как обойти?

Есть дамп, в нем много таблиц у которых есть колонки с генерируемыми данными с GENERATED ALWAYS
Соответственно при импорте ошибки:
The value specified for generated column 'name' in table 'myusers' is not allowed.


Какие есть решения? Приходится часто дампить и переносить данные для импорта. Все руками переделывать очень долго.
Может есть автоматизация или какие скрипты для этого? И вообще, как сделать полный дамп и импорт с полями GENERATED ALWAYS.
Версия Mysql 8.
Иначе таблицы создаются пустые.
  • Вопрос задан
  • 913 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если дамп делается через штатный mysqldump, то всё работает без проблем.
Создаём таблицу
> USE test;
> CREATE TABLE `gc` ( `id` INT, `sqrt` FLOAT GENERATED ALWAYS AS SQRT(`id`) STORED);
> INSERT INTO `gc` (`id`) VALUES (1), (2), (3);
> SELECT * FROM `gc`;
+------+---------+
| id   | sqrt    |
+------+---------+
|    1 |       1 |
|    2 | 1.41421 |
|    3 | 1.73205 |
+------+---------+
Таблица создалась, поля возвращаются.
Делаем дамп

# mysqldump test gc
... общие команды
--
-- Table structure for table `gc`
--

DROP TABLE IF EXISTS `gc`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
 SET character_set_client = utf8mb4 ;
CREATE TABLE `gc` (
  `id` int(11) DEFAULT NULL,
  `sqrt` float GENERATED ALWAYS AS (sqrt(`id`)) STORED
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `gc`
--

LOCK TABLES `gc` WRITE;
/*!40000 ALTER TABLE `gc` DISABLE KEYS */;
INSERT INTO `gc` (`id`) VALUES (1),(2),(3);
/*!40000 ALTER TABLE `gc` ENABLE KEYS */;
UNLOCK TABLES;
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
... общие команды
Как видите, в дампе автогенерируемая колонка не заполняется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы