Alors que la quantité de données continue d'augmenter, de nombreuses entreprises doivent importer de grandes quantités de données dans des bases de données. Mais pour les développeurs, comment importer efficacement des données est une question qui mérite d’être explorée. Dans cet article, nous présenterons comment utiliser Mysql dans le framework ThinkPHP6 pour l'importation de données en masse.
Avant de commencer l'importation, nous devons préparer les données. Les données peuvent être exportées dans des formats tels que CSV, Excel ou générées directement à partir du code. Dans cet article, nous utiliserons du code pour générer des données.
Créez d'abord une table de données user
: user
:
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;
然后编写以下代码生成1000条数据:
use thinkacadeDb; // 生成测试数据 $data = []; for ($i = 1; $i <= 1000; $i++) { $data[] = [ 'name' => 'User' . $i, 'age' => mt_rand(18, 60), ]; } // 批量插入数据 Db::name('user')->insertAll($data);
Mysql提供了一个非常方便的功能LOAD DATA
,可以将数据从文件导入到表中。我们只需要将数据保存到一个CSV文件中,然后使用LOAD DATA
命令将数据导入到表中。
首先,将所有数据保存到CSV文件中。在本例中,我们将数据保存到user.csv
文件中:
use thinkacadeDb; $data = Db::name('user')->select(); $fp = fopen('user.csv', 'w'); //写数据到CSV文件中 foreach ($data as $item) { fputcsv($fp, [$item['name'], $item['age']]); } fclose($fp);
然后使用以下代码将数据导入到数据库中:
use thinkacadeDb; $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);
在上述代码中,我们首先指定要导入的文件路径,然后编写SQL语句,使用LOAD DATA
将数据导入到数据库中。需要注意的是,在导入之前需要确保Mysql的local_infile
选项已经开启。
Mysql的LOAD DATA
功能虽然方便快捷,但是需要将数据保存为文件,而且需要手动编写SQL语句,操作起来较为繁琐。在TP6中,我们可以使用自带的批量插入功能,一次性插入大量数据。
在上面的例子中,我们使用以下代码将数据插入到数据库中:
use thinkacadeDb; $data = Db::name('user')->select(); $result = Db::name('user')->insertAll($data);
在上述代码中,我们首先查询所有数据,然后使用insertAll
方法批量插入数据。需要注意的是,insertAll
方法默认一次性最多插入1000条数据。如果要插入更多数据,需要在insertAll
方法中指定$limit
use thinkacadeDb; $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)); }
rrreee
Mysql fournit une fonction très pratique LOAD DATA
, qui peut importer des données de fichiers dans des tables. Il nous suffit de sauvegarder les données dans un fichier CSV, puis d'utiliser la commande LOAD DATA
pour importer les données dans la table.
user.csv
: 🎜rrreee🎜 Utilisons ensuite le code suivant pour importer les données dans la base de données : 🎜rrreee🎜 Dans le code ci-dessus, nous précisons d'abord que nous voulons importer le chemin du fichier, puis écrire des instructions SQL et utiliser LOAD DATA
pour importer les données dans la base de données. Il convient de noter qu'avant d'importer, vous devez vous assurer que l'option local_infile
de Mysql est activée. 🎜LOAD DATA
de MySQL est pratique et rapide, mais elle nécessite de sauvegarder les données sous forme de fichier et L'écriture manuelle d'instructions SQL est fastidieuse. Dans TP6, nous pouvons utiliser la fonction d'insertion par lots intégrée pour insérer une grande quantité de données à la fois. 🎜🎜Dans l'exemple ci-dessus, nous utilisons le code suivant pour insérer des données dans la base de données : 🎜rrreee🎜Dans le code ci-dessus, nous interrogeons d'abord toutes les données, puis utilisons la méthode insertAll
pour insérer des données dans lots. Il convient de noter que la méthode insertAll
peut insérer par défaut jusqu'à 1 000 éléments de données à la fois. Si vous souhaitez insérer plus de données, vous devez spécifier le paramètre $limit
dans la méthode insertAll
. Par exemple, le code suivant insérera jusqu'à 500 éléments de données à la fois : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons une boucle pour insérer des données par lots. Un maximum de 500 données peuvent être insérées à chaque fois jusqu'à ce qu'elles soient toutes complétées. 🎜🎜Résumé : 🎜🎜Lors de l'importation de gros lots de données dans ThinkPHP6, vous pouvez rencontrer des problèmes tels qu'un débordement de mémoire et des goulots d'étranglement de performances. Cependant, en utilisant la fonction LOAD DATA de Mysql, la fonction d'insertion par lots intégrée de TP6, l'insertion manuelle par lots de données, etc. Cette méthode peut améliorer efficacement l’efficacité de l’importation de données. Dans le processus de développement actuel, il est nécessaire de choisir la méthode appropriée en fonction de la situation pour obtenir un effet d'importation optimal. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!