有一些表:INSERT INTO ... SELECT,如果目標列具有生成列
CREATE TABLE `asource` (
`id` int(10) unsigned NOT NULL DEFAULT '0'
);
CREATE TABLE `adestination` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`generated` tinyint(1) GENERATED ALWAYS AS (id = 2) STORED NOT NULL
);
我一個行復制從asource
到adestination
:
INSERT INTO adestination
SELECT asource.*
FROM asource;
上述生成錯誤:
Error Code: 1136. Column count doesn't match value count at row 1
好吧,quite strange要求我提及生成查詢。但是好的,我將該列添加到查詢中:
INSERT INTO adestination
SELECT asource.*, NULL AS `generated`
FROM asource;
這在5.7.10中工作正常。然而,它產生於5.7.11(錯誤due to a fix:
Error Code: 3105. The value specified for generated column 'generated' in table 'adestination' is not allowed.
確定,下一步的嘗試:
INSERT INTO adestination
SELECT asource.*, 1 AS `generated`
FROM asource;
但還是同樣的錯誤我都試過0,TRUE,FALSE,但錯誤依然存在。 。
其被表示爲唯一的允許值(specs或docs)的默認值。然而,下面的生成語法錯誤(默認爲不支持那裏):
INSERT INTO adestination
SELECT asource.*, DEFAULT AS `generated`
FROM asource;
那麼,如何從一個表複製一行到另一個使用INSERT INTO ... SELECT如果目標表添加了一些列,其中一些是GENERATED?
調用此查詢的代碼是通用的,並且不知道特定表具有哪些列。它只知道目標表有哪些額外的列。源表是活動表,目標表是源錶的歷史版本。它有額外的如:用戶ID進行了更改,它是什麼類型的變化(插入,更新,刪除)等時
調用此查詢的代碼是通用的,不知道特定表具有哪些列。它只知道目標表有哪些額外的列。 – alik