MySql におけるインデックスと制約の使用法と違い

帅杰杰
リリース: 2020-05-01 14:37:56
オリジナル
120 人が閲覧しました

1. インデックスとは何ですか?

インデックスは、MySQL がデータを効率的に取得するのに役立つデータ構造です。

データの保存に加えて、データベースは特定の検索アルゴリズムを満たすデータ構造も維持し、これらのデータ構造は何らかの方法でデータを参照 (ポイント) するため、これらのデータ構造に高度な検索アルゴリズムを実装できます。このデータ構造がインデックスです。インデックスを使用すると、MySQL の取得速度が大幅に向上します。

MySQL では、主キー列に対して、MySQL が自動的に一意とインデックスを確立します。

a. インデックスの作成:

create table 表名( id int not null, name varchar(10) not null, index(name(length)) //使用name字段作为索引 );
ログイン後にコピー

b. インデックスの表示:

show index from 表名;
ログイン後にコピー

2. 制約とは何ですか?

制約は、データの整合性と一貫性を保証するためのもので、制約内のフィールドの数に応じて、制約は列レベルの制約とテーブルレベルの制約に分けられます。列レベルの制約: 特定のフィールドに使用されます。

テーブルレベルの制約: 2 つ以上のフィールドに使用されます。

制約の種類 non-null制約 主キー 主キー制約 一意のキー 一意の制約 デフォルト デフォルト制約 外部キー 外部キー制約 1)、一意(upique)制約
定義 not null
一意制約は、データベーステーブル内の各レコードを一意に識別します。

一意キー制約と主キー制約の両方により、列の一意性が保証されます。

主キーは一意制約として自動的に定義されます。

注: 各テーブルには複数の一意制約を設定できますが、各テーブルに設定できる主キー制約は 1 つだけです。

alter table 表名 drop index name;
ログイン後にコピー

2)、デフォルト制約

は、対応する列の値のデフォルト値を制約するために使用されます(デフォルト値がnullでない限り、null値を挿入できません)。

//第一种方式 create table persons( id_p int not null, address varchar(255), city varchar(255), phone varchar(11) unique //定义字段的同时,定义约束 ); //第二种方式 create table persons( id_p int not null, address varchar(255), city varchar(255), phone varchar(11), unique phone(phone) //单独一行命令,定义约束 ); //第三种方式 alter table persons add unique city(city); //表后添加(修改表)
ログイン後にコピー

3)、主キー制約

各データテーブルは主キーを 1 つだけ持つことができ、主キーはレコードの一意性を保証し、主キーは自動的に null ではなくなります (レコードのインデックスとしても機能します)。テーブル)。主キーのないテーブルに主キーを追加する

create table persons( id tinyint primary key auto_increment, name varchar(30), sex enum('m','w')default 'm' //定义sex默认值为'm' );
ログイン後にコピー

4)、外部キー制約


外部キー制約は、データの一貫性と整合性を維持し、1対1または多対を実現するためのものです。 -多くの関係。

子テーブル (外部キー列を持つテーブル) と親テーブル (子テーブルによって参照されるテーブル) の場合、ストレージ エンジンは innoDB のみにすることができます。

  • 外部キー列と参照列は同様のデータ型である必要があります。

    数値型の場合、数値と符号ビットの長さが同じである必要があるかどうか
  • 文字型の長さは異なっていてもかまいません

    外部キー列と参照列はインデックスを作成する必要があります(作成しない場合)外部キー列にインデックスが存在する場合、MySQL は自動的にインデックスを作成します)。

  • alter table 表名 add primary key (字段名);
    ログイン後にコピー
  • 3. 制約の削除

a. 主キーの削除

//先创建父表,子表才能建外键,父表和子表必须都是innodb引擎。 //city父表 create table city( id tinyint primary key, name varchar(10) not null )engine=INNODB; //students子表 create table students( id tinyint primary key auto increment, //定义字段时同时定义 city tinyint, //外键字段类型要与主表相同 foreign key(city) references city(id), //city字段作为外键,引用city表中的id )engine=INNODB; //主表的数据可以修改,但不能删除 //删除city中的记录 delete from city where id=1; //创建外键以后,再删除city记录,就会报错 ERROR 1451(23000):Cannot delete or update a parent row: a foreign key constraint fails(`hxsd`.`students`, CONSTRAINT `students ibfk 1` FOREIGN KEY(`city`) REFERENCES `city`(`id`)
ログイン後にコピー
c. 外部キー制約の削除

alter table 表名 drop primary key;
ログイン後にコピー

関係


インデックスはデータベース自体を指向しており、クエリの最適化などの操作に使用されますが、制約はビジネス関係に関するものです。

通常、一意制約を作成すると、一意インデックスが自動的に取得されます。これは、データベースを一意にチェックするときに、フィールドにインデックスがあった方が高速であるとデータベースが判断するためです。そのため、一意制約が作成されると、一意のインデックスがデフォルトで作成されます。同様に、共通の主キーは一意性制約およびインデックスです。ただし、not null などの制約がある場合、データベースはインデックスを作成しません。

以上がMySql におけるインデックスと制約の使用法と違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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