ホームページ  >  記事  >  バックエンド開発  >  Thinkphp3.2で同じデータを挿入する問題を完全に解決

Thinkphp3.2で同じデータを挿入する問題を完全に解決

不言
不言オリジナル
2018-06-07 11:13:552446ブラウズ

次の記事は、Thinkphp3.2 に同じデータを挿入する問題に対する完璧な解決策を提供します。内容がとても良かったので、参考としてシェアさせていただきます。

問題の説明

本日、TP3.2を使用してデータを挿入した際、同じデータ(いわゆる同じデータ、主キーが同じ、または一意のインデックスのフィールドが同じデータ)の挿入を避けるために、同じ)、作成したインデックスは次のとおりです。図、主キーインデックスは自動インクリメントフィールドであり、重複は不可能です。つまり、3つのフィールドがuidであれば重複する可能性があることを願っています。 、年、山、日が同じ場合、現在の記録が更新されます。

問題の解決策

以前この問題に直面したとき、MySQL がこの問題を解決するために ON DUPLICATE KEY UPDATE または REPLACE INTO を提供することを知っていました。

ON DUPLICATE KEY UPDATEを使用します

以下に示すように、データを挿入する前はテーブルにレコードが1つだけあります

レコードを挿入するとき、それが同じである場合、SQLステートメントは次のようになります。テーブル内の既存のレコードの場合は、レコードを更新します。それ以外の場合は、レコードが挿入されます。

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();

REPLACE INTOを使用します

コードは次のとおりです:

まず、データの一部を挿入するために次のコードを実行します

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)

効果は以下のようになります

次のコードを再度実行すると、上で挿入したコードが更新されます

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 5)

効果は以下の通りです

ON DUPLICATE KEY UPDATEとREPLACE INTOの違い

同じ値が出現した場合、ON DUPLICATE KEY UPDATE は既存のレコードを更新し、REPLACE INTO は前のレコードを削除して新しいレコードを挿入します。

Thinkphp3.2の解決策

Thinkphp3.2では、同じデータを挿入する問題はadd()関数の3番目のパラメータを通じて処理されます。

Model.class.PHP の add() メソッドは、Db.class.php の insert メソッドを呼び出します。insert メソッドでは、次のコードがわかります。$replace は add です。メソッドの 3 番目のパラメータ。

関連する推奨事項:

thinkphp3.2.3バージョンのデータベースの追加、削除、変更、実装コードの確認

以上がThinkphp3.2で同じデータを挿入する問題を完全に解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。