>  기사  >  데이터 베이스  >  MySql의 인덱스와 제약 조건의 사용법과 차이점

MySql의 인덱스와 제약 조건의 사용법과 차이점

帅杰杰
帅杰杰원래의
2020-04-30 23:23:06210검색

1. 인덱스란 무엇인가요?

Index는 MySQL이 데이터를 효율적으로 얻는 데 도움이 되는 데이터 구조입니다.

데이터베이스는 데이터를 저장하는 것 외에도 특정 검색 알고리즘을 만족하는 데이터 구조를 유지하므로 이러한 데이터 구조는 어떤 방식으로든 데이터를 참조(지시)하므로 이러한 데이터 구조에 고급 검색 알고리즘을 구현할 수 있습니다. 이 데이터 구조는 인덱스입니다. 인덱스는 MySQL의 검색 속도를 크게 향상시킬 수 있습니다.

MySQL에서는 기본 키 열에 대해 MySQL이 자동으로 고유 및 인덱스를 설정했습니다.

a. 인덱스 생성:

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

b. 인덱스 표시:

show index from 表名;

c. 인덱스 삭제:

alter table 表名 drop index name;


제약조건은 데이터의 무결성과 일관성을 보장하기 위한 것입니다. 제약조건은 필드 수에 따라 열 수준 제약조건과 테이블 수준 제약조건으로 구분됩니다.

열 수준 제약 조건: 특정 필드에 사용됩니다.

테이블 수준 제약 조건: 두 개 이상의 필드에 사용됩니다.

제약 조건 유형 Definition
null 아님 non-null 제약 조건
기본 키 기본 키 제약 조건
고유 키 고유 제약조건
기본 기본 제약 조건
외래 키 외래 키 제약 조건

1), 고유(upique) 제약 조건

고유 제약 조건은 데이터베이스 테이블의 각 레코드를 고유하게 식별합니다.

고유 키 제약 조건과 기본 키 제약 조건 모두 열에 대한 고유성을 보장합니다.

기본 키는 자동으로 고유 제약 조건으로 정의됩니다.

참고: 각 테이블에는 여러 개의 고유 제약 조건이 있을 수 있지만 각 테이블에는 기본 키 제약 조건이 하나만 있을 수 있습니다.

//第一种方式
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) 기본 제약 조건

은 해당 열의 값의 기본값을 제한하는 데 사용됩니다(기본값이 null이 아닌 이상 null 값을 삽입할 수 없습니다).

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

3), 기본 키 제약

각 데이터 테이블에는 기본 키가 하나만 있을 수 있습니다. 기본 키는 레코드의 고유성을 보장하며 기본 키는 자동으로 null이 아닙니다. 테이블).

기본 키가 없는 테이블에 기본 키 추가

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

4), 외래 키 제약 조건

외래 키 제약 조건은 데이터 일관성과 무결성을 유지하고 일대일 또는 다대일을 달성하기 위한 것입니다. -많은 관계.

  • 하위 테이블(외래 키 열이 있는 테이블) 및 상위 테이블(하위 테이블에서 참조하는 테이블)의 경우 스토리지 엔진은 innoDB만 가능합니다.

  • 외래 키 열과 참조 열의 데이터 유형은 유사해야 합니다.

    숫자형인 경우 숫자와 부호비트의 길이가 같아야 하는지

    문자형의 길이는 다를 수 있음

  • 외래키 열과 참조열은 반드시 인덱스를 생성해야 함(없을 경우) 외래 키 열에 대한 인덱스가 존재하면 MySQL은 자동으로 인덱스를 생성합니다.

//先创建父表,子表才能建外键,父表和子表必须都是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. 제약 조건 삭제

a. 기본 키 삭제

alter table 表名 drop primary key;

b. 외래 키 제약 조건 삭제

alter table 表名 drop index index_name;


4.

인덱스는 데이터베이스 자체를 지향하며 쿼리 최적화와 같은 작업에 사용되는 반면 제약 조건은 비즈니스 관계에 더 가깝습니다.

보통 UNIQUE 제약 조건을 생성할 때 데이터베이스는 고유하게 검사할 때 필드에 인덱스가 있으면 더 빠를 것이라고 생각하기 때문에 고유 인덱스를 자동으로 획득하므로, UNIQUE 제약 조건을 생성하면 기본적으로 고유 인덱스가 생성됩니다. 마찬가지로 공통 기본 키는 고유 제약 조건과 인덱스입니다. 그러나 not null과 같은 제약 조건의 경우 데이터베이스는 인덱스를 생성하지 않습니다.

위 내용은 MySql의 인덱스와 제약 조건의 사용법과 차이점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.