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. 制約とは何ですか?
制約は、データの整合性と一貫性を保証するためのもので、制約内のフィールドの数に応じて、制約は列レベルの制約とテーブルレベルの制約に分けられます。列レベルの制約: 特定のフィールドに使用されます。
定義 | not null | non-null制約
主キー | 主キー制約 |
一意のキー | 一意の制約 |
デフォルト | デフォルト制約 |
外部キー | 外部キー制約 |
1)、一意(upique)制約 |
一意キー制約と主キー制約の両方により、列の一意性が保証されます。
主キーは一意制約として自動的に定義されます。注: 各テーブルには複数の一意制約を設定できますが、各テーブルに設定できる主キー制約は 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); //表后添加(修改表)
各データテーブルは主キーを 1 つだけ持つことができ、主キーはレコードの一意性を保証し、主キーは自動的に null ではなくなります (レコードのインデックスとしても機能します)。テーブル)。主キーのないテーブルに主キーを追加する
create table persons( id tinyint primary key auto_increment, name varchar(30), sex enum('m','w')default 'm' //定义sex默认值为'm' );
外部キー制約は、データの一貫性と整合性を維持し、1対1または多対を実現するためのものです。 -多くの関係。
alter table 表名 add primary key (字段名);
3. 制約の削除
//先创建父表,子表才能建外键,父表和子表必须都是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`)
alter table 表名 drop primary key;
インデックスはデータベース自体を指向しており、クエリの最適化などの操作に使用されますが、制約はビジネス関係に関するものです。
通常、一意制約を作成すると、一意インデックスが自動的に取得されます。これは、データベースを一意にチェックするときに、フィールドにインデックスがあった方が高速であるとデータベースが判断するためです。そのため、一意制約が作成されると、一意のインデックスがデフォルトで作成されます。同様に、共通の主キーは一意性制約およびインデックスです。ただし、not null などの制約がある場合、データベースはインデックスを作成しません。
以上がMySql におけるインデックスと制約の使用法と違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。