Heim  >  Artikel  >  Datenbank  >  Die Verwendung und der Unterschied zwischen Indizes und Einschränkungen in MySql

Die Verwendung und der Unterschied zwischen Indizes und Einschränkungen in MySql

帅杰杰
帅杰杰Original
2020-04-30 23:23:06140Durchsuche

1. Was ist ein Index?

Index ist eine Datenstruktur, die MySQL dabei hilft, Daten effizient zu erhalten.

Zusätzlich zum Speichern von Daten verwaltet die Datenbank auch Datenstrukturen, die bestimmte Suchalgorithmen erfüllen. Diese Datenstrukturen verweisen auf die Daten in irgendeiner Weise, sodass erweiterte Suchalgorithmen auf diese Datenstrukturen implementiert werden können . Diese Datenstruktur ist ein Index. Indizes können die Abrufgeschwindigkeit von MySQL erheblich verbessern.

In MySQL hat MySQL für eine Primärschlüsselspalte automatisch Unique und Index dafür eingerichtet.

a. Index erstellen:

create table 表名(
    id int not null,
    name varchar(10) not null,
    index(name(length))      //使用name字段作为索引
);

b. Index anzeigen:

show index from 表名;

c. Index löschen:

alter table 表名 drop index name;

2. Was sind Einschränkungen?

Einschränkungen dienen dazu, die Integrität und Konsistenz der Daten sicherzustellen. Abhängig von der Anzahl der Felder in der Einschränkung werden Einschränkungen in Einschränkungen auf Spaltenebene und Einschränkungen auf Tabellenebene unterteilt.

Einschränkungen auf Spaltenebene: werden für ein bestimmtes Feld verwendet.

Einschränkungen auf Tabellenebene: werden für zwei oder mehr Felder verwendet.

Primärschlüsseleinschränkungen tr>
约束类型 释义
not null 非空约束
primary key 主键约束
unique key 唯一约束
default 默认约束
foreign key 外键约束
Einschränkungstyp

Definition
nicht null Nicht-Null-Einschränkung
Primärschlüssel
eindeutiger Schlüssel eindeutiger Schlüssel
Standard Standardeinschränkungen
Fremdschlüssel Fremdschlüsseleinschränkungen

1), eindeutige (upique) Einschränkung

eindeutige Einschränkung identifiziert jeden Datensatz in der Datenbanktabelle eindeutig.

Sowohl Eindeutigkeits- als auch Primärschlüsseleinschränkungen bieten Eindeutigkeitsgarantien für Spalten.

Der Primärschlüssel wird automatisch als eindeutige Einschränkung definiert.

Hinweis: Jede Tabelle kann mehrere eindeutige Einschränkungen haben, aber jede Tabelle kann nur eine Primärschlüsseleinschränkung haben.

//第一种方式
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);  //表后添加(修改表)

2), die Standardeinschränkung

wird verwendet, um den Standardwert des Werts in der entsprechenden Spalte einzuschränken (es sei denn, der Standardwert ist null). , sonst können keine Nullwerte eingefügt werden).

create table persons(
    id tinyint primary key auto_increment,
    name varchar(30),
    sex enum('m','w')default 'm'   //定义sex默认值为'm'
);

3), Primärschlüsseleinschränkungen


Jede Datentabelle kann nur einen Primärschlüssel haben. Der Primärschlüssel stellt die Eindeutigkeit des Datensatzes sicher Primärschlüssel ist automatisch nicht null (dient auch als Index der Tabelle).

Fügen Sie einen Primärschlüssel für eine Tabelle ohne Primärschlüssel hinzu

alter table 表名 add primary key (字段名);

4), Fremdschlüsseleinschränkungen

  • Fremdschlüssel Einschränkungen werden verwendet, um die Datenkonsistenz und -integrität aufrechtzuerhalten und Eins-zu-Eins- oder Viele-zu-Viele-Beziehungen zu implementieren.

  • Untergeordnete Tabelle (Tabelle mit Fremdschlüsselspalten) und übergeordnete Tabelle (Tabelle, auf die die untergeordnete Tabelle verweist). Die Speicher-Engine kann nur innoDB sein.

    Fremdschlüsselspalten und Referenzspalten müssen ähnliche Datentypen haben.

    Wenn es sich um einen numerischen Typ handelt, müssen Länge und Vorzeichenbit der Zahl gleich sein
  • Die Länge des Zeichentyps kann unterschiedlich sein

Fremdschlüsselspalten und Referenzen Die Spalte muss indiziert sein (MySQL erstellt automatisch einen Index, wenn die Fremdschlüsselspalte nicht vorhanden ist).

//先创建父表,子表才能建外键,父表和子表必须都是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`)

3. Einschränkungen löschen

a. Primärschlüssel löschen

alter table 表名 drop primary key;

b. Index löschen

alter table 表名 drop index index_name;

c. Fremdschlüsseleinschränkungen löschen

alter table 表名 drop foreign key FK_ID;

Der Index ist Datenbankorientiert Es wird für die Abfrageoptimierung und andere Vorgänge verwendet, während Einschränkungen eher eine Geschäftsbeziehung darstellen.


Wenn Sie eine eindeutige Einschränkung erstellen, erhalten Sie normalerweise automatisch einen eindeutigen Index. Dies liegt daran, dass die Datenbank davon ausgeht, dass die eindeutige Überprüfung der Datenbank schneller erfolgt, wenn ein Index für das Feld vorhanden ist Wenn Sie also eine eindeutige Einschränkung erstellen, wird standardmäßig ein eindeutiger Index erstellt. Ebenso ist ein gemeinsamer Primärschlüssel eine eindeutige Einschränkung und ein Index. Bei Einschränkungen wie „nicht null“ erstellt die Datenbank jedoch keinen Index.

Das obige ist der detaillierte Inhalt vonDie Verwendung und der Unterschied zwischen Indizes und Einschränkungen in MySql. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn