匯出資料庫
1 |
# mysqldump -u 使用者名稱 -p 資料庫名稱 > db.sql |
—
使用 .sql 匯入資料庫
1 |
# mysql -u username -p database_name < file.sql |
—
使用 phpMyAdmin 匯入有 foreign key 的資料表處理方案
匯入 fk 資料表時,就算所有關聯資料表一起匯入也會因為順序不一致而發生
1 |
Cannot add or update a child row: a foreign key constraint fails |
這個錯誤
從網站上可以查詢到必須設定 SET FOREIGN_KEY_CHECKS=0; ,但是使用 SQL 指令執行後再使用 SELECT @@FOREIGN_KEY_CHECKS; 查看會發現還是 1 ,也就是沒有被關閉
解決的方法是修改匯入 .sql 檔案,在最開頭加上 SET FOREIGN_KEY_CHECKS=0; 以及結尾加上 SET FOREIGN_KEY_CHECKS=1;
類似像這樣
1 2 3 4 5 6 7 |
SET FOREIGN_KEY_CHECKS=0; -- -- 原來的 SQL 指令 -- SET FOREIGN_KEY_CHECKS=1; |
—
使用 LOAD DATA 匯入 CSV 檔案
直接匯入 CSV 檔案到 MySQL 資料庫
—
實際範例
1 |
LOAD DATA LOCAL INFILE '/tmp/a.csv' INTO TABLE UserTemp FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES ( id, Name, position, `group`, recommend, IDNumber, Email, phone, city, province, JoinDate, ServerNo, status, status2 ); |
需要注意指令順序
—
效能
如果可以使用 LOAD DATA 一定會比使用程式拆解後逐筆插入快,五萬筆的匯入在小白 MacBook 上也只需不到 3 秒
1 2 3 |
mysql> LOAD DATA LOCAL INFILE '/tmp/b.csv' INTO TABLE UserTemp FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES ( id, Name, position, `group`, recommend, IDNumber, Email, phone, city, province, JoinDate, ServerNo, status, status2 ); Query OK, 57378 rows affected, 3 warnings (2.75 sec) Records: 57378 Deleted: 0 Skipped: 0 Warnings: 0 |
—
ERROR 1045 (28000): Access denied for user ‘XXXXX’@’%’ (using password: YES)
將 LOAD DATA INFILE 改成 LOAD DATA LOCAL INFILE
—
5,012 total views, 17 views today