この記事は、PHP面接の質問「データベース」に関する知識をまとめたものです。一定の参考値があるので、困っている友達が参考になれば幸いです。
一般的なリレーショナル データベース管理システム製品とは何ですか?
答え: Oracle、SQL Server、MySQL、Sybase、DB2、Access など。
SQL 言語にはどのような部分が含まれますか?各セクションのアクションキーワードは何ですか?
回答: SQL 言語には、データ定義 (DDL)、データ操作 (DML)、データ制御 (DCL)、およびデータ クエリ (DQL) の 4 つの部分が含まれています。
データ定義: テーブルの作成、テーブルの変更、テーブルの削除、インデックスの作成/ドロップなど
データ操作: 選択、挿入、更新、削除、
データ コントロール: 付与、取り消し
データ クエリ: select
整合性制約には何が含まれますか?
データの完全性 (Data Integrity) とは、データの正確さ (Accuracy) と信頼性 (Reliability) を指します。
含まれるもの:
(1) エンティティの整合性: テーブルの各行がテーブル内で一意のエンティティであることを規定します。
(2) ドメインの整合性: テーブル内の列が、値の範囲、精度、その他の規制を含む特定のデータ型の制約を満たす必要があることを意味します。
(3) 参照整合性: 2 つのテーブルの主キーと外部キーのデータが一貫していることを意味し、テーブル間のデータの一貫性を確保し、データの損失や意味のないデータがデータベースに格納されるのを防ぎます。広める。
(4) ユーザー定義の整合性: さまざまなリレーショナル データベース システムでは、アプリケーション環境に基づいた特別な制約が必要になることがよくあります。ユーザー定義の整合性は、特定のリレーショナル データベースに対する制約であり、特定のアプリケーションが満たさなければならないセマンティック要件を反映しています。
トランザクションとは何ですか?そしてその特徴は?
トランザクション: 一連のデータベース操作であり、データベース アプリケーションの基本的な論理単位です。
特徴:
(1) 原子性: つまり、すべてのトランザクションが実行されるか、まったく実行されないかの不可分性です。
(2) 一貫性または文字列化可能性。トランザクションの実行により、データベースはある正しい状態から別の正しい状態に変換されます。
(3) 分離。トランザクションが正しくコミットされるまでは、トランザクションによるデータの変更を他のトランザクションに提供することはできません。
(4) 耐久性。トランザクションが正しく送信されると、その結果はデータベースに永続的に保存され、トランザクションの送信後に他の失敗が発生した場合でも、トランザクションの処理結果は保存されます。
簡単な理解: トランザクション内のすべての操作は成功するか失敗します。
ロックとは何ですか?
データベースは、複数のユーザーが使用する共有リソースです。複数のユーザーが同時にデータにアクセスすると、複数のトランザクションがデータベース内の同じデータに同時にアクセスします。同時操作が制御されていない場合、誤ったデータが読み取られて保存され、データベースの一貫性が破壊される可能性があります。
ロックは、データベースの同時実行制御を実現するための非常に重要なテクノロジです。トランザクションはデータ オブジェクトを操作する前に、まずシステムにロック要求を送信します。ロック後、トランザクションはデータ オブジェクトに対して一定の制御を持ちます。トランザクションがロックを解放するまでは、他のトランザクションはデータ オブジェクトを更新できません。
基本的なロック タイプ: ロックには行レベルのロックとテーブル レベルのロックが含まれます
ビューとは何ですか?カーソルとは何ですか?
ビューは、物理テーブルと同じ機能を持つ仮想テーブルです。ビューは追加、変更、確認、操作できます。ビューは通常、1 つまたは複数のテーブルの行または列のサブセットです。ビューを変更しても、基になるテーブルには影響しません。複数テーブルのクエリと比較して、データの取得が容易になります。
カーソル: クエリ結果セットを単位として効果的に処理します。カーソルをセル内の特定の行に配置して、結果セット内の現在の行から 1 つ以上の行を取得できます。結果セットの現在の行を変更できます。カーソルは通常は使用されませんが、データを 1 つずつ処理する必要がある場合、カーソルは非常に重要です。
ストアド プロシージャとは何ですか?何と呼べばいいでしょうか?
ストアド プロシージャはプリコンパイルされた SQL ステートメントです。利点はモジュール設計が可能であることです。つまり、一度作成するだけで済み、後からプログラム内で複数回呼び出すことができます。特定の操作で SQL を複数回実行する必要がある場合は、単純な SQL ステートメントを実行するよりもストアド プロシージャを使用した方が高速です。ストアド プロシージャは、コマンド オブジェクトを使用して呼び出すことができます。
インデックスの役割は何ですか?そして、その利点と欠点は何ですか?
インデックスは、データベース検索エンジンがデータの取得を高速化するために使用できる特別なクエリ テーブルです。これは現実の本の目次に非常に似ており、本全体をクエリしなくても必要なデータを見つけることができます。インデックスを作成すると、単一の列または複数の列を指定できます。
欠点は、データ入力の速度が遅くなり、データベースのサイズも大きくなることです。
3 つのパラダイムを一般的な方法で理解するにはどうすればよいでしょうか?
第 1 正規形: 1NF は属性に対するアトミック制約であり、属性がアトミックである必要があり、分解できない;
第 2 正規形: 2NF はレコードに対する一意の制約であり、レコードが一意であることが必要識別子、つまりエンティティの一意性;
第 3 正規形: 3NF はフィールドの冗長性に関する制約です。つまり、フィールドは他のフィールドから派生できず、フィールドが冗長でないことが必要です。 。
基本テーブルとは何ですか?ビューとは何ですか?
基本テーブルとは独立して存在するテーブルのことで、SQLではリレーションがテーブルに相当します。
ビューは、1 つまたは複数の基本テーブルから派生したテーブルです。ビュー自体はデータベースに独立して保存されるのではなく、仮想テーブルです。
ビューの利点をどのように説明しますか?
(1) ビューにより、ユーザーの操作が簡素化されます。
(2) ビューにより、ユーザーは同じデータを複数の視点から表示できます。
(3) ビューにより、データベースにある程度の論理的独立性が提供されます。
(4) ビューは機密データのセキュリティ保護を提供できます。
NULL とはどういう意味ですか?
値 NULL は UNKNOWN (不明) を表し、「" (空の文字列) を表しません。」
NULL 値を比較すると、NULL 値が生成されます。
値を NULL 値と比較して、論理的に答えが得られることを期待することはできません。
NULL 判定には IS NULL を使用します
主キー、外部キー、インデックスの違いは何ですか?
主キー、外部キー、インデックスの違い
定義:
主キー – レコードを一意に識別し、複製できず、空にすることもできません
外部キー – の外部キーテーブルは別のテーブルに属しています 主キーと外部キーには重複があり、空の値も可能です
インデックス – このフィールドには重複値はありませんが、NULL 値を含めることができます
関数:
主キー –データの整合性を確保するために使用されます
外部キー – 他のテーブルとの接続を確立するために使用されます
インデックス – クエリのソート速度を向上させるために使用されます
番号:
主キー – 主キーは 1 つだけ存在できます
外部キー – テーブルには複数の外部キーを持つことができます
インデックス – テーブルには複数の一意のインデックスを持つことができます
テーブル内のフィールドが特定の値のみを受け入れるようにするには何を使用できますか? range?
データベーステーブル内のチェック制限は、この列に入力される値を制限するために定義されています。
SQL ステートメントを最適化する方法にはどのようなものがあるのか教えてください。 (いくつか選択してください)
(1) Where 句内: where テーブル間の接続は他の Where 条件よりも前に記述する必要があり、最大数のレコードを除外できる条件は、Where 句の最初の部分に記述する必要があります。 Where 句の終わり .HAVING last。
(2) IN を置き換えるには EXISTS を使用し、NOT IN を置き換えるには NOT EXISTS を使用します。
(3) インデックス列での計算の使用を避ける
(4) インデックス列での IS NULL および IS NOT NULL の使用を避ける
(5) クエリを最適化するには、テーブル全体のスキャンを可能な限り避ける必要があります。まず第一に、where と order by に関係する列にインデックスを作成することを考慮する必要があります。
(6) where 句内のフィールドに対して null 値の判定を行わないようにしてください。そうしないと、エンジンはインデックスの使用を放棄し、テーブル全体のスキャンを実行します。
(7) フィールドに対して null 値の判定を行わないようにしてください。 where 句内の式操作。これにより、エンジンはインデックスの使用を断念し、テーブル全体のスキャンが実行されます。
「相関サブクエリ」と「非相関サブクエリ」の違いは何ですか? SQL文の中で?
(1) 非相関サブクエリは、外部クエリから独立したサブクエリで、サブクエリは合計 1 回実行され、実行後に値が外部クエリに渡されます。
(2) 当該サブクエリの実行は外部クエリのデータに依存しており、外部クエリが行を実行する際にサブクエリが1回実行されます。
つまり、非相関サブクエリは相関サブクエリよりも効率的です
char と varchar の違いは何ですか?
char は固定長型、varchar は可変長型です。
違い:
char(M) 型のデータ列では、各値は M バイトを占めますが、特定の長さが M 未満の場合、MySQL は右側にスペース文字を追加します。 (埋め込まれたスペース文字は検索操作中に削除されます)。
varchar(M) タイプのデータ列では、各値は、その長さを記録するのに十分なバイトと 1 バイトのみを占めます (つまり、合計の長さは L 1 バイトです)。
Mysql ストレージ エンジン、myisam と innodb の違い。
MyISAM は非トランザクション ストレージ エンジンです。クエリが頻繁に行われるアプリケーションに適しています。テーブル ロックがあり、デッドロックはありません。トランザクションはサポートされていません。小規模なデータと小規模な同時実行に適しています
Innodb はトランザクションをサポートするストレージ エンジンです。多くの挿入および更新操作を行うアプリケーションに適しています。適切に設計されている場合は行ロック (最大の違いはロックのレベルにあります)。ビッグデータ、大規模な同時実行に適しています。
データ テーブルのタイプとは何ですか?
MyISAM、InnoDB、HEAP、BOB、ARCHIVE、CSV など。
MyISAM: 完成度が高く、安定していて、管理が簡単で、読みやすいです。一部の関数 (トランザクションなど) はテーブルレベルのロックをサポートしていません。
InnoDB: トランザクション、外部キーおよびその他の機能、およびデータ行ロックをサポートします。多くのスペースを占有し、全文インデックス作成などはサポートされていません。
公開システムのストレージとして MySQL データベースを使用しています。1 日あたり 50,000 件以上のエントリが追加されます。運用保守には 3 年間かかると予想されます。最適化するにはどうすればよいですか?
(1) 効率を向上させるために、適切に設計されたデータベース構造を設計し、部分的なデータの冗長性を許可し、結合クエリを回避するように努めてください。
(2) 適切なテーブル フィールドのデータ型とストレージ エンジンを選択し、インデックスを適切に追加します。
(3) mysql のマスター/スレーブ レプリケーションを読み取りから書き込みに分離します。
(4) データ テーブルを複数のテーブルに分割して、1 つのテーブル内のデータ量を減らし、クエリ速度を向上させます。
(5) Redis、memcached などのキャッシュ メカニズムを追加します。
(6) 頻繁に変更されないページの場合は、静的ページ (ob キャッシュなど) を生成します。
(7) 効率的な SQL を作成します。たとえば、SELECT * FROM TABEL は SELECT field_1, field_2, field_3 FROM TABLE に変更されます。
トラフィックの多い Web サイトの場合、ページ訪問の統計の問題を解決するためにどのような方法を使用しますか?
(1) サーバーが現在のトラフィックをサポートできるかどうかを確認します。
(2) データベースアクセスを最適化します。
(3) 画像のホットリンクなど、外部からのリンクへのアクセス(ホットリンク)を禁止します。
(4) 制御ファイルのダウンロード。
(5) 負荷分散を行い、別のホストを使用してトラフィックをオフロードします。
(6) 閲覧統計ソフトウェアを使用して訪問数を把握し、ターゲットを絞った最適化を実行します。
シリーズ推奨: 「 PHP 面接の質問 (お気に入り)
以上がPHP面接の質問「データベース」に関する知識をまとめます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。