1

PDO (PHP) を使用して単一の挿入ステートメントに複数の行を挿入すると、MYSQL の InnoDB データベースが AI ID を順次生成することを誰でも確認できますか?

私は、ユーザーが Excel ファイルの行によってデータベースに挿入される Excel ドキュメントをアップロードできるプロジェクトに取り組んでいます。これらのドキュメントは 1 行から最大 10,000 行まで可能です。速度を上げるために、1 つのクエリですべてではないにしても、これらをブロックに挿入できるようにしたいと考えています。

私が読んだことから、最後の挿入IDから挿入数を引いたものを使用して、挿入されたIDのブロックを取得するのが安全であるように見えます。

これが100%安全ではない、または主題に関する情報ではないという経験をした人はいますか。

それが役立つ場合、これを挿入する方法は大まかに次のとおりです(これを500セットで行います)

単純化された挿入の例:

for ($i=0; $i < count($rowData['Name']); $i++) {
    $insetPlaceHolders[":name$i"]=$rowData['Name'][$i];
    $insetPlaceHolders[":email$i"]=$rowData['Email'][$i];
    $insetPlaceHolders[":password$i"]=$rowData['Password'][$i];
    $insetPlaceHolders[":employeeId$i"]=$rowData['EmployeeId'][$i];
    $insetPlaceHolders[":startDate$i"]=$formData['StartDate'][$i];
    $appendQuery[]="(:name$i,:email$i,:password$i,:employeeId$i,:startDate$i, {$_SESSION['companyId']})";
}
$appendQuery=implode(',',$appendQuery);
$sth = $this->dbh->prepare("INSERT INTO employees (name, email, password, custom_id, hire_date, company_id) VALUES $appendQuery");
$sth->execute($insetPlaceHolders);
4

1 に答える 1

3

これは適切な方法ではありません。

2 つのテーブルが必要です。1 つのテーブルにはドキュメントに関するメタデータが保持され、1 つのテーブルにはドキュメントの行情報が保持されます。

次に、レコードをメタデータ テーブルに挿入し、生成された ID の値を取得します。

次に、ドキュメントへの参照としてメタデータ ID を含む詳細レコードを挿入します。次に、ID が連続しているかどうかは問題ではありません。これは、リレーショナル データベースがこの種の情報を格納する方法です。

スキーマは次のようになります。

create table metadata (
    metadataid int autoincrement primary key,
    filename varchar(50) not null,
    ...
);

create table details (
    detailid int autoincrement primary key,
    metadataid int not null references metadata(metadataid),
    ...
);
于 2013-04-09T16:01:08.367 に答える