Mysql
導出和導入沒有特定列的表
我正在嘗試導出帶有自動增量
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)。