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
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.040 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.