开发文档 v2.x

快速批量插入(quickInsertMany)

更新时间:2024年10月22日 23:02 浏览:566

快速批量插入多个对象或数组到数据库

public function quickInsertMany(string $table, array $objects): int

参数:

  • string $table - 表名
  • array $objects - 要插入数据库的对象数组或二维数组,对象属性或数组键名需要和该表字段一致

返回值

  • int 影响的行数,插入失败时抛出异常

快速批量插入将大量数据拼接成一条SQL一次执行,因次无法获取到具体插入的主键,仅返回行数

 

快速批量插入方法没有预先编译 SQL 横板,而是直接生成 SQL,但插入的数据会通过 PDO 提供的 quote 方法处理 防止注入。

因为少了编译 SQL 的步骤,快速批量插入方法执行速度更快。项目实践中,每分钟能插入 200 万条以上的数据。

 

对象数组形式:

$objs = [];

$obj1 = new stdClass();
$obj1->name = '马云';
$obj1->age = '50';
$objs[] = $obj1;

$obj2 = new stdClass();
$obj2->name = '刘强东';
$obj2->age = '40';
$objs[] = $obj2;

// ... 更多数据

// 跟据字段数多少控制一次插入多少条,例如一次插入 5000 条

$effectRows = Be::getDb()->quickInsertMany('user', $objs);

将执行 SQL

INSERT INTO `user` (`name`, `age`) VALUES 
('马云', '50'),
('刘强东', '40'),
// ...

 

二维数组形式:

$arrs = [
    [
        'name' => '马云', 
         'age' => '50',
    ],
    [
        'name' => '刘强东',
         'age' => '40',
    ],
    // ...
];

$effectRows = Be::getDb()->quickInsertMany('user', $arrs);

 

导航