Mysql

導出和導入沒有特定列的表

  • May 24, 2021

我正在嘗試導出帶有自動增量rowid列的表,然後將其導入另一台伺服器。

考慮到該列是主鍵並且如果我從舊伺服器備份後導入行,則不能接受重複鍵,具有相同的新行將rowid添加到新伺服器。

我也不想在新伺服器中更改自動增量的起始編號並導致行中的間隙。

所以我認為一種解決方案可以在不導出新行的情況下rowid讓新伺服器為其分配新行rowid。但我怎麼能直接用 mysql 或在 phpMyAdmin 的幫助下做到這一點?

另一種解決方案是使用LOAD DATA$$ LOCAL $$INFILE,但覆蓋列列表,以便將自動增量值插入到虛擬變數中:

這是一個展示:

我有一個我呼叫的文本文件c.csv

1       foo     bar
2       baz     bam
3       blee    bloo

我想插入到mytable中,但是id的1,2,3已經被佔用了。我希望插入 csv 數據,但要給定新的 id。

mysql> select * from mytable;
+----+------+------+
| id | col1 | col2 |
+----+------+------+
|  1 | text | text |
|  2 | text | text |
|  3 | text | text |
+----+------+------+

這是一個解決方案:

mysql> load data local infile 'c.csv' into table mytable (@dummy, col1, col2);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from mytable;
+----+------+------+
| id | col1 | col2 |
+----+------+------+
|  1 | text | text |
|  2 | text | text |
|  3 | text | text |
|  4 | foo  | bar  |
|  5 | baz  | bam  |
|  6 | blee | bloo |
+----+------+------+

它從我的 csv 文件中添加了三行,但id每行輸入的列被繞道進入虛擬變數,因此這些行必須使用預設值,分配新的自動增量 ID。

PS:你需要放下你的慾望,如果 id 的序列中沒有間隙。間隙是正常的。您將來可能會刪除一些行。您可以嘗試插入,但它會回滾或出錯。在某些情況下,InnoDB 會通過設計生成非連續的 id 值(有關詳細資訊,請閱讀https://dev.mysql.com/doc/refman/8.0/en/innodb-auto-increment-handling.html)。

引用自:https://dba.stackexchange.com/questions/292092