ホームページ >データベース >mysql チュートリアル >MySQL の最適化 - 単純な構文のサンプル コード分析

MySQL の最適化 - 単純な構文のサンプル コード分析

黄舟
黄舟オリジナル
2017-03-09 13:28:401208ブラウズ

MySQL の最適化 - 単純な構文のサンプル コード分析:

1. デフォルトの制約

    --mysql
    CREATE TABLE emp
    (
    id INT DEFAULT 12
    )

2. 自動インクリメント列を設定する

MYSQL の自動インクリメント列はインデックス付き列である必要があり、シード値は次のとおりです。次の設定

  --mysql
    -- 设置自增ID从N开始
    CREATE TABLE emp (
    ID INT  PRIMARY KEY AUTO_INCREMENT
    ) AUTO_INCREMENT = 100 ; --(设置自增ID从100开始)

は、自動インクリメント列のステップ サイズを設定します。これは、セッション レベルの場合、ユーザーが新しいセッションを作成するときに、グローバル レベルとセッション レベルに分けることができます。ステップ サイズはグローバル レベルに戻ります。MySQL はテーブル レベルのステップ サイズに設定できません。 !
mysql サーバーは、グローバル変数とセッション変数の 2 種類の mysql システム パラメータ (システム変数) を維持します。
それらの意味と違いは、それぞれの名前に示されているとおりです。セッション変数への変更はこのセッションにのみ影響します。グローバル変数への変更は、
すべての新しいセッションに影響します。 (変更時の既存のセッションは影響を受けません) 次回 mysql サーバーが再起動されるまで。
その変更の影響は再起動をまたがることはできないことに注意してください。mysql サーバーの再起動時に新しい値を使用したい場合は、コマンドラインで変数オプションを指定するか、オプション ファイルを変更することによってのみ指定できます。 SET は再起動をまたいで到達できません。
すべてのシステム変数にはデフォルト値があり、mysql システムのコンパイル時に決定されます。
システム変数を指定するには、通常、サーバーの起動時にコマンドラインでオプションを指定するか、オプションファイルを使用して指定できます。
もちろん、ほとんどのシステム変数は、システムの実行中に set コマンドを通じて値を指定できます。
システムの現在のデフォルトの自動インクリメント列のシード値とステップ値を確認してください

SHOW GLOBAL VARIABLES LIKE 'auto_incre%'; -- 全局变量

Q: フィールドが id である自動インクリメント主キーを持つテーブルがある場合は、10 個のデータがテーブルに挿入された後に削除します。 table ID 8、9、10 のデータを収集し、mysql を再起動して、データを挿入します。このデータの ID 値は 8 ですか? 11 ですか?

回答: テーブル タイプが MyISAM の場合、それは 11 です。テーブルのタイプが InnoDB の場合、ID は 8 です。
これは、2 種類のストレージ エンジンが異なる方法で最大 ID レコードを保存するため、MyISAM テーブルはデータ ファイルに最大 ID を記録し、自動インクリメントされた主キーの最大 ID 値は再起動時に失われません。 mysql;
InnoDB の最大 ID 値はメモリに記録されるため、mysql を再起動するか、テーブルに対して OPTIMIZE 操作を実行すると、最大 ID 値は失われます。
ところで、MYSQL には現在のテーブルの自動インクリメント値を取得するメソッドが 4 つあります

(1) SELECT MAX(id) FROM person   针对特定表
(2) SELECT LAST_INSERT_ID()  函数   针对任何表
(3) SELECT @@identity    针对任何表

@@identity は、最後にデータがテーブルに挿入されたときの、対応する自動インクリメント列の値を表します。アイデンティティ属性 (つまり、自動インクリメント列) は、システム定義のグローバル変数です。

通常、システム定義のグローバル変数は @@ で始まり、ユーザー定義変数は @ で始まります。

@@identity を使用するための前提条件は、挿入操作を実行した後、select @@identity を実行するときに接続が閉じられていないことです。そうでない場合、結果は NULL 値になります。

(4)  SHOW TABLE STATUS LIKE 'person'

特定のテーブルをターゲットにしている場合は、この方法を使用することをお勧めします

結果では、対応するテーブル名レコードに Auto_increment フィールドがあり、その中の次の自動インクリメント ID の値がテーブルの現在の最大自動インクリメント ID



3. テーブル定義を表示します

 DESC emp

5. フィールドのデータ型を変更します

bigint

ALTER TABLE emp RENAME emp2

へ 6. フィールド名を変更します


MYSQL では、フィールド名を変更する場合、フィールドのデータ型を追加する必要があります。そうしないと、CHANGE でデータ型を変更することしかできません。 SQL文の「新しいフィールド名」と「古いフィールド名」を置き換えて、「データ型」だけを変更する方法です。 , 先ほどの例では、id カラムを bigint データ型に変更します

ALTER TABLE emp2 MODIFY id BIGINT

7. フィールドを追加します


MYSQL フィールドを削除しますCOLUMN キーワードを追加する必要はありません

<p style="margin-bottom: 7px;">ALTER TABLE emp2 CHANGE id id BIGINT<br/></p>

9。外部キーの制約を削除することは、外部キーの制約である場合、ドロップ外部キーを使用する必要があります。キー制約

では、自動インクリメント列は 1 つだけ存在でき、自動インクリメント列はセカンダリ インデックスか主キー インデックスであるかに関係なくインデックス列である必要があります


以上がMySQL の最適化 - 単純な構文のサンプル コード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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