ホームページ > データベース > mysql チュートリアル > SQL データ操作の基礎 (中級) 7

SQL データ操作の基礎 (中級) 7

黄舟
リリース: 2016-12-17 14:35:00
オリジナル
842 人が閲覧しました

SQL によるインデックス作成

テーブルにインデックスを付けるには、タスクバー SQL を起動します サーバー プログラム グループの ISQL/w プログラム。クエリウィンドウに入ったら、次のステートメントを入力します:

CREATE INDEX mycolumn_index ON マイテーブル (myclumn)

このステートメントは、mycolumn_index という名前のインデックスを作成します。インデックスには任意の名前を付けることができますが、インデックス名にはインデックスを作成するフィールドの名前を含める必要があります。これにより、将来インデックスを作成する目的が分かりやすくなります。

注:

本書の SQL ステートメントを実行すると、次のメッセージが表示されます:

This コマンドはデータを返さず、何も返しませんでした rows

これは、ステートメントが正常に実行されたことを示します。

インデックス mycolumn_index は、テーブル mytable の mycolumn フィールドに対して実行されます。これは非クラスター化インデックスであり、一意ではないインデックスです。 (これはインデックスのデフォルトのプロパティです)

インデックスのタイプを変更する必要がある場合は、元のインデックスを削除して再構築する必要があります 1つ。インデックスを作成した後、次の SQL ステートメントを使用してインデックスを削除できます:

DROP INDEX mytable.mycolumn_index

DROP INDEX に関する注意 ステートメントにはテーブルの名前を含める必要があります。この例では、削除したインデックスは mycolumn_index で、これはテーブル mytable のインデックスです。

クラスター化インデックスを作成するには、キーワード CLUSTERED を使用できます。 ) テーブルにはクラスター化インデックスが 1 つだけ存在できることに注意してください。 (テーブルにクラスター化インデックスを作成する方法の例は次のとおりです:

CREATE クラスター化インデックス mycolumn_clust_index ON mytable(mycolumn)

テーブル内に重複レコードがある場合、このステートメントを使用してインデックスを作成しようとするとエラーが発生します。ただし、キーワード ALLOW_DUP_ROW を使用して SQL に指示するだけで、重複レコードを持つテーブルにインデックスを付けることもできます。 サーバーのみ:

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

WITH ALLOW_DUP_ROW

このステートメントは、重複レコードを許可するクラスター化インデックスを作成します。テーブル内の重複レコードを避けるように努める必要がありますが、重複レコードが発生した場合は、この方法を使用できます。

テーブルに一意のインデックスを作成するには、キーワード UNIQUE を使用できます。このキーワードは、クラスター化インデックスと非クラスター化インデックスの両方に使用できます。以下に例を示します:

CREATE 一意のカスタードインデックス myclumn_cindex ON mytable(mycolumn)

これはよく使用するインデックス作成ステートメントです。可能な限り、クエリ操作を強化するために 1 つのテーブルに一意のクラスター化インデックスを構築するようにしてください。

最後に、複数のフィールドにインデックス (複合インデックス) を作成し、インデックス作成ステートメントに複数のフィールド名を含める必要があります。次の例では、名フィールドと姓フィールドにインデックスを作成します:

CREATE INDEX 名前_インデックス ON username(firstname,lastname)

この例では、2 つのフィールドに 1 つのインデックスを作成します。複合インデックスでは、最大 16 個のフィールドにインデックスを付けることができます。

トランザクション マネージャーを使用してインデックスを作成する

トランザクション マネージャーを使用してインデックスを作成するのは、SQL ステートメントを使用するよりもはるかに簡単です。トランザクション マネージャーを使用すると、作成されたインデックスのリストを表示し、グラフィカル インターフェイスを通じてインデックス作成オプションを選択できます。

トランザクション マネージャーを使用すると、次の 2 つの方法でインデックスを作成できます: 管理を使用する 「テーブル」ウィンドウを使用するか、「インデックスの管理」ウィンドウを使用します。

「テーブルの管理」ウィンドウを使用して新しいインデックスを作成するには、「詳細」ボタンをクリックします オプション (前にプラス記号が付いた表のように見えます)。これにより、[詳細オプション] ダイアログ ボックスが開きます。このダイアログ ボックスには PRimary という名前のセクションがあります。 キー (図 11.1 を参照)。

図 11. 1

新しいインデックスを作成するには、ドロップダウン リストからインデックスを作成するフィールド名を選択します。複数のフィールドにインデックスを作成する場合は、複数のフィールド名を選択できます。インデックスがクラスター化されているか非クラスター化されているかを選択することもできます。テーブル情報を保存すると、インデックスが自動的に作成されます。インマネージ 「テーブル」ウィンドウのフィールド名の横にキーが表示されます。

テーブルの「マスターインデックス」が作成されました。プライマリ インデックスは、NULL 値を含まないフィールドに確立する必要があります。さらに、プライマリ インデックスにより、フィールドは強制的に一意の値フィールドになります。

これらの制限なしでインデックスを構築するには、管理を使用する必要があります インデックスウィンドウ。メニューから「管理|インデックス」を選択して、「インデックスの管理」ウィンドウを開きます。インデックスの管理 ウィンドウでは、ドロップダウン ボックスからテーブルと特定のインデックスを選択できます。 (図 11.2 を参照)。新しいインデックスを作成するには、[インデックス] ドロップダウン ボックスから [新規] を選択します。 インデックスを付けると、インデックスを付けるフィールドを選択できます。 「追加」ボタンをクリックしてフィールドをインデックスに追加します。

図 11.2

インデックスにはさまざまなオプションを選択できます。たとえば、インデックスをクラスター化するか非クラスター化するかを選択できます。インデックスが一意のインデックスであることを指定することもできます。インデックスを設計したら、[構築] ボタンをクリックしてインデックスを作成します。

注:

一意のインデックスとは、フィールドに重複した値を含めることができないことを意味し、作成できるインデックスが 1 つだけであることを意味するわけではありません。

SQLコアステートメント

第 10 章では、SQL の使用方法を学習しました。 選択する テーブルからデータを取得するステートメント。ただし、これまで、テーブル内のデータを追加、変更、削除する方法については説明していませんでした。このセクションでは、これらについて学習します。

データの挿入

テーブルに新しいレコードを追加するには、SQL を使用します INSERT ステートメント。このようなステートメントの使用例を次に示します。

INSERT mytable (mycolumn) VALUES ('some data')

このステートメントは文字列 'some を変換します data」がテーブル mytable の mycolumn フィールドに挿入されます。データが挿入されるフィールドの名前は最初の括弧で指定され、実際のデータは 2 番目の括弧で指定されます。

挿入 ステートメントの完全な構文は次のとおりです:

INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT 値 |

値リスト | select_statement}

テーブルに複数のフィールドがある場合、フィールド名とフィールド値をカンマで区切ることで、すべてのフィールドにデータを挿入できます。テーブル mytable に、first_column、next_column、および third_column という 3 つのフィールドがあるとします。次の INSERT ステートメントは、3 つのフィールドすべての値を含む完全なレコードを追加します:

INSERT mytable (first_column, Second_column, third_column)

VALUES ('some データ」、「さらにデータ」、「さらに」 data')

注:

INSERT ステートメントを使用して、テキスト フィールドにデータを挿入できます。ただし、非常に長い文字列を入力する必要がある場合は、WRITETEXT ステートメントを使用する必要があります。この内容は本書では高度すぎるため、説明しません。詳細については、Microsoft を参照してください。 SQL Server のドキュメント。

あなたが挿入している場合 ステートメントでフィールドとデータが 2 つだけ指定されている場合はどうなりますか?つまり、新しいレコードをテーブルに挿入しましたが、フィールドの 1 つがデータを提供しませんでした。この場合、4 つの可能性があります:

フィールドにデフォルト値がある場合、その値が使用されます。たとえば、 third_column フィールドにデータを提供せずに新しいレコードを挿入し、このフィールドのデフォルト値が「some」であるとします。 価値'。この場合、新しいレコードの作成時に値「some value」が挿入されます。
フィールドが null 値を受け入れることができ、デフォルト値がない場合は、null 値が挿入されます。
フィールドが null 値を受け入れることができず、デフォルト値がない場合、エラーが発生します。次のエラー メッセージが表示されます:
テーブル mytable の列は、 なれ null.

最後に、フィールドが ID フィールドの場合は、新しい値が自動的に生成されます。識別フィールドを持つテーブルに新しいレコードを挿入する場合、そのフィールドを無視するだけで、識別フィールド自体に新しい値が割り当てられます。
注:

ID フィールドを持つテーブルに新しいレコードを挿入した後、SQL 変数 @@identity を使用して、新しいレコードの ID フィールドの値にアクセスできます

。次の SQL ステートメントを考えてみましょう:

INSERT mytable (first_column) VALUES(‘何らかの値’)

INSERT anothertable(another_first,another_second)

VALUES(@@identity,’some value’)

テーブル mytable に識別フィールドがある場合、このフィールドの値はテーブル anothertable の another_first フィールドに挿入されます。これは、変数 @@identity が常に ID フィールドに挿入された最後の値を保持しているためです。

フィールド another_first は、フィールド first_column と同じデータ型である必要があります。ただし、another_first フィールドを識別するフィールドにすることはできません。 Another_first フィールドは、first_column フィールドの値を保存するために使用されます。

レコードの削除

テーブルから 1 つ以上のレコードを削除するには、SQL を使用する必要があります DELETE ステートメント。 DELETE ステートメントに WHERE を指定できます。 句。 WHERE 句は、削除するレコードを選択するために使用されます。たとえば、次の DELETE ステートメントは、「Delete」に等しいフィールド first_column の値のみを削除します。 私のレコード:

DELETE mytable WHERE first_column='Deltet Me'

DELETE ステートメントの完全な構文は次のとおりです:

DELETE [FROM] {table_name|view_name} [WHERE] SQL SELECT ステートメントで使用できる条件はすべて、DELECT ステートメントの WHERE 句で使用できます。 で使われる。たとえば、次の DELETE ステートメントは、first_column フィールドの値が「goodbye」または Second_column フィールドの値が「so」であるもののみを削除します。 長い' レコード:

DELETE mytable WHERE first_column='goodby' OR Second_column='so long'

DELETE ステートメントに WHERE を指定しない場合 句を指定すると、テーブル内のすべてのレコードが削除されます。このように考えるべきではありません。テーブル内のすべてのレコードを削除したい場合は、第 10 章で説明したように TRUNCATE を使用する必要があります。 TABLE ステートメント。

注:

DELETE ステートメントの代わりに TRUNCATE TABLE ステートメントを使用する必要があるのはなぜですか? TRUNCATEを使用する場合 TABLE ステートメントでは、レコードの削除は記録されません。つまり、これは、TRUNCATE TABLE が DELETE よりもはるかに高速であることを意味します

上記は、SQL データ操作の基礎 (中級) 7 の内容です。その他の関連記事については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。 )!


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート