PHP による MySQL トランザクション インスタンスの操作、mysql トランザクション インスタンス_PHP チュートリアル
PHPはMySQLトランザクションインスタンス、mysqlトランザクションインスタンスを操作します
この記事の例は、PHP が MySQL トランザクションを操作する方法を説明しており、参考のために共有されています。具体的な方法は以下の通りです
一般的に言えば、トランザクションには ACID 特性が必要です。いわゆるACIDとは、Atomic(原子性)、Consistent(一貫性)、Isolated(分離)、Durable(永続性)の4つの単語の頭文字をとって書かれており、その意味を「銀行振込」を例に説明していきます。 :
① アトミック性: トランザクションを構成するステートメントは論理的な単位を形成し、その一部のみを実行することはできません。つまり、トランザクションは分割できない最小単位です。例: 銀行振込処理中に、ある口座から振込金額を差し引いて、同時に別の口座に追加する必要があります。1 つの口座だけを変更するのは不合理です。
② 整合性:トランザクション処理実行前後でデータベースの整合性が保たれています。つまり、トランザクションはシステム状態を正しく変換する必要があります。例: 銀行振込プロセス中に、振込金額が 1 つの口座から別の口座に送金されるか、両方の口座が変更されず、それ以外の状況は発生しません。
③ 分離: あるトランザクションは別のトランザクションに影響を与えません。つまり、どのトランザクションでもトランザクションが不完全な状態にあることを確認することは不可能です。たとえば、銀行送金中、送金トランザクションが送信されるまでは、別の送金トランザクションは待機状態になることしかできません。
④継続性:トランザクション処理の効果を永続的に保存することができます。一方、トランザクションは、サーバー、プロセス、通信、メディアの障害など、あらゆる障害に耐えられる必要があります。例: 銀行振込処理中に、振込後の口座ステータスを保存する必要があります。
PHP では、mysqli は mysql トランザクションの関連操作を適切にカプセル化しています。以下の例:
$sql2 = "ScoreDetail を更新 set FScore = 300、ID= '123456'";
$sql3 = "ScoreDetail ID,Score) 値 ('123456',60) に挿入";
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//物事を始める
$mysqli->クエリ($sql1);
$mysqli->クエリ($sql2);
if(!$mysqli->errno){
$mysqli->commit();
「ok」をエコーします;
}その他{
エコー「エラー」;
$mysqli->rollback();
}
ここでは、php mysql 一連の関数を使用してトランザクションを実行します。
$sql2 = "ScoreDetail を更新 set FScore = 300、ID= '123456'";
$sql3 = "ScoreDetail ID,Score) 値 ('123456',60) に挿入";
$conn = mysql_connect('localhost','root','');
mysql_select_db('DB_Lib2Test');
mysql_query('トランザクション開始');
//mysql_query('SET autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ()){
Mysql_query('ロールバック');
エコー「エラー」;
}その他{
Mysql_query('コミット');
「ok」をエコーします;
}
// mysql_query('SET autocommit=1');
// mysql_query($sql3);
ここに注意してください:
MyISAM: トランザクションをサポートせず、パフォーマンスを向上させるために読み取り専用プログラムに使用されます
InnoDB: ACID トランザクション、行レベルのロック、同時実行性をサポートします
Berkeley DB: トランザクションをサポートします
この記事が皆様の PHP+MySQL データベース プログラミングのお役に立てれば幸いです。
以下は、学習に適した php5 の単純なデータベース カプセル化クラスです。削除や更新などの他の操作については、自分で追加できます:
class Mysql{ //最初にクラスを定義し、最初に Capital を記述します。文字
public $host;//サーバー名、アクセス修飾子 PUBLIC は、$host がパブリック属性であり、クラス内外の両方でアクセス可能であり、継承可能であることを証明します
public $user;//ユーザー名は public 属性です
private $pass;//パスワードは、$pass がプライベートであることを証明するために private 修飾子を要求します。
public $dbname;// データベース名も public 属性です。
/ /__construct は、これがいくつかの初期情報を定義するコンストラクターであることを宣言します。これには 3 つのパラメーターがあります
public function __construct($host,$user,$pass,$dbname){
$this->host = $host;
$this ->user = $user;
$this->pass = $pass;
$this->dbname = $dbname;
$link = @mysql_connect($this->host,$this->user ,$this->pass)
or die("error");
@mysql_select_db($this->dbname,$link)
or die("error2");
}
//次の検索合計を定義しますデータベース表示関数
function myQuery($sql){
$result = mysql_query($sql);
if(!$result){
echo "error3";
exit;
}
$num = mysql_num_rows($result) ;
if($num){
echo "NO".$num;
}
while($row = mysql_fetch_assoc($result)){
echo '
'.htmlspecialchars(stripslashes($row['body']))."
}
}
}
$rutt = new Mysql( 'localhost ','root','ssss','calvin');//クラスをインスタンス化します...ここでのパラメーターはコンストラクターのパラメーターと同じであることに注意してください...
$rutt->myQuery( .. ....本文の続き>>
//以下はキャッシュ クラスです:
class cache {
//キャッシュ ディレクトリ
var $cacheRoot = "./cache/";
//キャッシュ更新時間 (秒)、0 はキャッシュなしを意味します
var $cacheLimitTime = 0;
//キャッシュファイル名
var $cacheFileName = "";
//キャッシュ拡張子
var $cacheFileExt = "html";
/*
* Constructor
* int $cacheLimitTime キャッシュ更新時間
* /
関数cache( $cacheLimitTime ) {
if( intval( $cacheLimitTime ) )
$this->cacheLimitTime = $cacheLimitTime;
$this->cacheFileName = $this->getCacheFileName();
//echo $this->cacheFileName;
ob_start();
}
/*
* キャッシュファイルが設定された更新時間内かどうかを確認します
* Return: 更新時間内であればファイルの内容を返し、それ以外の場合はファイルの内容を返します。失敗を返します
*/
関数cacheCheck(){
if( file_exists( $this->cacheFileName ) ) {
$cTime = $this->getFileCreateTime( $this->cacheFileName );
if( $cTime + $this- >cacheLimitTime > time() ) {
echo file_get_contents( $this->cacheFileName );
ob_end_flush();
exit;
}
}
return false;
}
/*
*キャッシュファイルまたは出力 Static
* string $staticFileName 静的ファイル名 (相対パスを含む)
*/
function caching( $staticFileName = "" ){
if( $this->cacheFileName ) {
$cacheContent = ob_get_contents() ;
// echo $cacheContent;
ob_end_flush();
if( $staticFileName ) {
$this->saveFile( $staticFileName, $cacheContent );
}
if( $this->cacheLimitTime )
$this-> ;saveFile( $this->cacheFileName, $cacheContent );
}
}
/*
...残りの全文>>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

ルートとしてMySQLにログインできない主な理由は、許可の問題、構成ファイルエラー、一貫性のないパスワード、ソケットファイルの問題、またはファイアウォール傍受です。解決策には、構成ファイルのBind-Addressパラメーターが正しく構成されているかどうかを確認します。ルートユーザー許可が変更されているか削除されてリセットされているかを確認します。ケースや特殊文字を含むパスワードが正確であることを確認します。ソケットファイルの許可設定とパスを確認します。ファイアウォールがMySQLサーバーへの接続をブロックすることを確認します。

MySQLがテーブル構造を変更すると、メタデータロックが通常使用され、テーブルがロックされる可能性があります。ロックの影響を減らすために、次の測定値をとることができます。1。オンラインDDLでテーブルを使用できます。 2。バッチで複雑な変更を実行します。 3.小規模またはオフピーク期間中に操作します。 4. PT-OSCツールを使用して、より細かい制御を実現します。

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

MySQLは、複数の同時接続を処理し、マルチスレッド/マルチプロセスを使用して、各クライアントのリクエストに独立した実行環境を割り当てて、邪魔されないことを確認できます。ただし、同時接続の数は、システムリソース、MySQL構成、クエリパフォーマンス、ストレージエンジン、ネットワーク環境の影響を受けます。最適化では、コードレベル(効率的なSQLの書き込み)、構成レベル(MAX_Connectionの調整)、ハードウェアレベル(サーバー構成の改善)などの多くの要因を考慮する必要があります。

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。
