Bug #80293 | INSERT ... SELECT * FROM does not work for tables with generated columns | ||
---|---|---|---|
Submitted: | 5 Feb 2016 19:48 | Modified: | 7 Feb 2016 23:01 |
Reporter: | Martin Cetkovsk | Email Updates: | |
Status: | Not a Bug | Impact on me: | |
Category: | MySQL Server: DML | Severity: | S1 (Critical) |
Version: | 5.7.11 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[5 Feb 2016 19:48]
Martin Cetkovsk
[5 Feb 2016 19:57]
Martin Cetkovsk
Fixed title.
[7 Feb 2016 0:46]
MySQL Verification Team
Thank you for the bug report. C:\dbs>c:\dbs\5.7\bin\mysql -uroot -p --port=3570 --prompt="mysql 5.7 > " Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.12 Source distribution PULL: 2016-FEB-06 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql 5.7 > USE TEST Database changed mysql 5.7 > CREATE TABLE `asource` ( -> `id` int(10) unsigned NOT NULL DEFAULT '0', -> `generated` tinyint(1) GENERATED ALWAYS AS (id = 2) STORED NOT NULL -> ); Query OK, 0 rows affected (0.05 sec) mysql 5.7 > mysql 5.7 > CREATE TABLE `adestination` ( -> `id` int(10) unsigned NOT NULL DEFAULT '0', -> `generated` tinyint(1) GENERATED ALWAYS AS (id = 2) STORED NOT NULL -> ); Query OK, 0 rows affected (0.05 sec) mysql 5.7 > mysql 5.7 > INSERT INTO adestination -> SELECT asource.* FROM asource; ERROR 3105 (HY000): The value specified for generated column 'generated' in table 'adestination' is not allowed.
[7 Feb 2016 23:01]
Roy Lyseng
This is not a bug. According to the manual http://dev.mysql.com/doc/refman/5.7/en/create-table.html, only DEFAULT may be specified as a source for a generated column: "For INSERT, REPLACE, and UPDATE, if a generated column is inserted into, replaced, or updated explicitly, the only permitted value is DEFAULT." This is in compliance with the SQL standard for generated columns. A workaround for your problem is to specify an INSERT column list naming the base columns only: INSERT INTO adestination(id) SELECT id FROM asource; (DEFAULT is only supported in a SELECT ... VALUES statement).
[16 Feb 2016 11:22]
MySQL Verification Team
Bug #80384 marked as duplicate of this
[11 Jul 2016 12:15]
MySQL Verification Team
Bug #80271 marked as duplicate of this