簡體   English   中英

復制同一表中的行並僅更新MySQL中的一列

[英]copy row in same table and update just one column in MySQL

我需要根據某個條件(where子句)從表中復制一行,在同一表中進行重復輸入,並僅更新一列(foreign_key)。 但是因為“從表名中選擇*”會返回包括primary_key在內的所有字段,所以無法插入新行錯誤:重復鍵。

我不知道表的所有列,因此我無法通過在select查詢中僅提供必需的列名來忽略primary_key。

有什么辦法可以忽略primary_key本身的獲取..還是我可以獲取整行,並將primary_key的值設置為null,然后將該行插入表中,以便它為要添加的新行自動遞增primary_key。

謝謝。

通過查詢信息模式表並使用動態SQL來構建適當的語句,可以做您想要的事情。 但是,您應該格外小心,因為修改您不知道列名的表中的數據可能會導致各種問題:

DROP TABLE mytable;

CREATE TABLE `mytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` varchar(255) DEFAULT NULL,
  `col2` varchar(255) DEFAULT NULL,
  `col3` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO mytable (col1, col2, col3) VALUES ('A', 'B', 'C');

SELECT * FROM mytable;

+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
|  1 | A    | B    | C    |
+----+------+------+------+

SET @columns := (
  SELECT
    GROUP_CONCAT(column_name)
    FROM information_schema.columns
    WHERE table_schema = 'test'
    AND table_name = 'mytable'
    AND column_key <> 'PRI'
);

SET @sql := (
  SELECT CONCAT(
    'INSERT INTO mytable (', @columns, ') ',
    'SELECT ', @columns, ' FROM mytable ',
    'WHERE id = 1;'
  )
);

SELECT @sql;

+---------------------------------------------------------------------------------------+
| @sql                                                                                  |
+---------------------------------------------------------------------------------------+
| INSERT INTO mytable (col1,col2,col3) SELECT col1,col2,col3 FROM mytable WHERE id = 1; |
+---------------------------------------------------------------------------------------+

PREPARE stmt FROM @sql;

EXECUTE stmt;

SELECT * FROM mytable;

+----+------+------+------+
| id | col1 | col2 | col3 |
+----+------+------+------+
|  1 | A    | B    | C    |
|  2 | A    | B    | C    |
+----+------+------+------+

如果您了解所獲得數組的序列,那么在放入某種條件后,您可以忽略具有主鍵的字段。

像這樣檢查是否可行

謝謝。

您怎么可能知道鍵是什么,卻不知道其他列是什么? 如果真是這樣,那么我認為你必須寫一些動態SQL -或者更好的是,給任務的人誰知道表結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM