Rumah >rangka kerja php >ThinkPHP >Menggunakan Mysql untuk import data pukal dalam ThinkPHP6

Menggunakan Mysql untuk import data pukal dalam ThinkPHP6

王林
王林asal
2023-06-20 13:40:432441semak imbas

Memandangkan jumlah data terus meningkat, banyak syarikat perlu mengimport sejumlah besar data ke dalam pangkalan data. Tetapi bagi pembangun, cara mengimport data dengan cekap adalah persoalan yang patut diterokai. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Mysql dalam rangka kerja ThinkPHP6 untuk import data pukal.

  1. Sediakan data

Sebelum memulakan import, kami perlu menyediakan data. Data boleh dieksport dalam format seperti CSV, Excel atau dijana terus daripada kod. Dalam artikel ini kita akan menggunakan kod untuk menjana data.

Mula-mula buat jadual datauser:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

Kemudian tulis kod berikut untuk menjana 1000 keping data:

use thinkacadeDb;

// 生成测试数据
$data = [];
for ($i = 1; $i <= 1000; $i++) {
    $data[] = [
        'name' => 'User' . $i,
        'age' => mt_rand(18, 60),
    ];
}

// 批量插入数据
Db::name('user')->insertAll($data);
  1. Gunakan fungsi LOAD DATA Mysql untuk import data

Mysql menyediakan fungsi yang sangat mudah LOAD DATA untuk mengimport data daripada fail ke dalam jadual. Kami hanya perlu menyimpan data ke fail CSV dan kemudian menggunakan perintah LOAD DATA untuk mengimport data ke dalam jadual.

Pertama, simpan semua data ke fail CSV. Dalam contoh ini, kami menyimpan data ke dalam fail user.csv:

use thinkacadeDb;

$data = Db::name('user')->select();

$fp = fopen('user.csv', 'w');

//写数据到CSV文件中
foreach ($data as $item) {
    fputcsv($fp, [$item['name'], $item['age']]);
}

fclose($fp);

dan kemudian menggunakan kod berikut untuk mengimport data ke dalam pangkalan data:

use thinkacadeDb;

$filename = 'user.csv';

$sql = <<<EOF
    LOAD DATA LOCAL INFILE '{$filename}'
     INTO TABLE `user` CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '
'
     (`name`, `age`)
EOF;

Db::query($sql);

Dalam kod di atas, kami mula-mula nyatakan bahawa kami mahu Import laluan fail, kemudian tulis pernyataan SQL dan gunakan LOAD DATA untuk mengimport data ke dalam pangkalan data. Perlu diingat bahawa sebelum mengimport, anda perlu memastikan bahawa pilihan local_infile Mysql dihidupkan.

  1. Gunakan fungsi sisipan kelompok TP6 untuk mengimport data

Fungsi LOAD DATA Mysql adalah mudah dan pantas, tetapi ia perlu menyimpan data sebagai fail dan memerlukan untuk ditulis secara manual pernyataan SQL adalah lebih menyusahkan untuk dikendalikan. Dalam TP6, kita boleh menggunakan fungsi sisipan kelompok terbina dalam untuk memasukkan sejumlah besar data pada satu masa.

Dalam contoh di atas, kami menggunakan kod berikut untuk memasukkan data ke dalam pangkalan data:

use thinkacadeDb;

$data = Db::name('user')->select();

$result = Db::name('user')->insertAll($data);

Dalam kod di atas, kami mula-mula menanyakan semua data dan kemudian menggunakan kaedah insertAll untuk batch masukkan data . Perlu diingat bahawa kaedah insertAll boleh memasukkan sehingga 1000 keping data pada satu masa secara lalai. Jika anda ingin memasukkan lebih banyak data, anda perlu menentukan parameter insertAll dalam kaedah $limit. Sebagai contoh, kod berikut akan memasukkan sehingga 500 keping data pada satu masa:

use thinkacadeDb;

$data = Db::name('user')->select();

$limit = 500;
$total = count($data);
for ($i = 0; $i < $total; $i += $limit) {
    $result = Db::name('user')->insertAll(array_slice($data, $i, $limit));
}

Dalam kod di atas, kami menggunakan gelung untuk memasukkan data dalam kelompok. Sehingga 500 keping data boleh dimasukkan setiap kali sehingga semuanya selesai.

Ringkasan:

Apabila mengimport kumpulan besar data dalam ThinkPHP6, anda mungkin menghadapi masalah seperti limpahan memori dan kesesakan prestasi Walau bagaimanapun, dengan menggunakan fungsi LOAD DATA Mysql dan memasukkan kumpulan itu didatangkan dengan Fungsi TP6, pemasukan batch manual data dan kaedah lain boleh meningkatkan kecekapan import data dengan berkesan. Dalam proses pembangunan sebenar, adalah perlu untuk memilih kaedah yang sesuai mengikut situasi untuk mencapai kesan import yang optimum.

Atas ialah kandungan terperinci Menggunakan Mysql untuk import data pukal dalam ThinkPHP6. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn