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); //表后添加(修改表)
3)、主キー制約
各データテーブルは主キーを 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 サイトの他の関連記事を参照してください。