데이터 베이스 MySQL 튜토리얼 【Mysql】外键级联与级联的劣势_MySQL

【Mysql】外键级联与级联的劣势_MySQL

Jun 01, 2016 pm 12:59 PM
단점

在建表的时候时候,可以对于删除delete、修改update设置为级联。用一个例子先说明外键级联级联的概念

假如数据库中本以存在一张usertable如下:

\

此user表非常简单,id为主键。

下面我将新建一张cascade_test表如下,这里的user_id与usertable的主键id形成参照完整性,并同时建立删除与修改的级联:

\

如果用SQL语句建立上图的表则如下:

 

CREATE TABLE `test`.`cascade_test` (
  `id` INTEGER UNSIGNED NOT NULL auto_increment,
  `content` TEXT,
  `user_id` INTEGER UNSIGNED, -- 由于usertable的主键是INTEGER UNSIGNED,这里必须同为这样类型,键值对应
  PRIMARY KEY (`id`),
  CONSTRAINT `FK_cascade_test_1` FOREIGN KEY `FK_cascade_test_1` (`user_id`)
    REFERENCES `test`.`usertable`(`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
)
ENGINE = InnoDB; -- 数据库引擎设置,可以没有
로그인 후 복사
比起普通设置外键的语句,在其下多出了两个级联的声明,ON DELETE CASCADE、ON UPDATE CASCADE

设置级联与不设置级联,在参照完整性上是没有区别的。

user的id类型是怎么cascade_test的user_id类型就应该怎么样,这里需要严格照抄,由于user的id设置为无符号整形,这里cascade_test的user_id还不能是整形,一定要特意声明为无符号整形,否则会出现如下的[Err] 1005 - Can't create table 'xx' (errno: 150),其实150页就是参照完整性错误。
\

之后,在新建出来的cascade_test插入如下一些数据:

\

同样地,由于参照完整性的存在,cascade_test的user_id的取值范围还需要在user的id现有的值来取。

设置级联与不设置级联唯一的区别,就是我们在删除user的id中数据的同时,同样会删除cascade_test的user_id的所有有关字段。修改级联同样如此。

比如将user中id为6的项删除,也就是执行如下的语句:

delete from usertable where id=6
로그인 후 복사

 

运行效果如下图:

\

usertable中id=6的项被删除是肯定的,

由于删除级联的存在:cascade_test中user_id=6的项通通被删除。

如果不设置级联,在usertable中id=6的项被删除的同时,cascade_test中user_id=6的项是不会删除的。造成了一定参照完整性的缺失。

下面说说级联的劣势:

这看来似乎很强大的样子,尤其是在网页编程的时候,就不用写这么多删除语句了,仅仅是删除一个主键,就能把所有涉及的项删除

但是,在你的工程足够的时候,这样的删除会很慢,实质上造成了表与表之间的耦合。远远比不删新增加一个isDel的项,使用标志删除的方式,查表的时候仅查询isDel=false的项。其实delete语句在网页的编程的时间根本就是可以扔掉的。这样还有个好处,出现在需要找被删除的旧数据的时候,绝对可以找回来。

这样你的网页的运行速度会大大加快,否则如果一旦执行级联删除的语句,会涉及的表足够多的时候,执行起来将会足够慢。

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

심층 분석: jQuery의 장점과 단점 심층 분석: jQuery의 장점과 단점 Feb 27, 2024 pm 05:18 PM

jQuery는 프런트엔드 개발에 널리 사용되는 빠르고, 작고, 기능이 풍부한 JavaScript 라이브러리입니다. 2006년 출시 이후 jQuery는 많은 개발자가 선택하는 도구 중 하나가 되었지만 실제 애플리케이션에서는 몇 가지 장점과 단점도 있습니다. 이 기사에서는 jQuery의 장점과 단점을 심층적으로 분석하고 구체적인 코드 예제를 통해 설명합니다. 장점: 1. 간결한 구문 jQuery의 구문 디자인은 간결하고 명확하여 코드의 가독성과 쓰기 효율성을 크게 향상시킬 수 있습니다. 예를 들어,

서버리스 아키텍처를 사용하여 PHP 애플리케이션을 배포할 때의 장점과 단점은 무엇입니까? 서버리스 아키텍처를 사용하여 PHP 애플리케이션을 배포할 때의 장점과 단점은 무엇입니까? May 06, 2024 pm 09:15 PM

서버리스 아키텍처를 사용하여 PHP 애플리케이션을 배포하면 유지 관리가 필요 없고 종량제 방식이며 확장성이 뛰어나고 단순화된 개발 및 여러 서비스 지원이라는 이점이 있습니다. 단점으로는 콜드 스타트 ​​시간, 디버깅의 어려움, 공급업체 종속, 기능 제한, 비용 최적화 문제 등이 있습니다.

VR의 장점과 단점은 무엇입니까? VR의 장점과 단점은 무엇입니까? Dec 20, 2023 pm 05:31 PM

VR의 장점: 1. 몰입형 경험, 2. 상호작용성, 4. 안전성, VR의 단점: 1. 높은 기술 한계점, 2. 현기증, 3. 의존성, 4. 개인 정보 유출 위험, 5. 높은 비용. VR 기술은 인간의 시청각 지각을 시뮬레이션하여 완전한 가상의 장면을 만들어 사용자가 상호 작용하고 경험할 수 있도록 하는 첨단 인터랙티브 기술입니다. 향후 발전에서는 기술의 지속적인 발전과 응용 분야의 지속적인 확장으로 VR 기술이 더욱 널리 사용되고 발전될 것입니다.

golang 프레임워크로 개발할 때의 장점과 단점은 무엇입니까? golang 프레임워크로 개발할 때의 장점과 단점은 무엇입니까? Jun 02, 2024 pm 07:30 PM

Go 프레임워크 개발의 장점에는 효율적인 성능, 뛰어난 동시성, 간단한 구문, 풍부한 표준 라이브러리, 강력한 형식의 언어 및 크로스 플랫폼 지원이 포함됩니다. 단점으로는 제네릭 부족, 초보자의 경험 부족, 외부 라이브러리 종속성, 번거로운 오류 처리, 제한된 HTTP 라우팅 성능 등이 있습니다.

정적 재배치 기술의 단점 및 해결 방법을 개선합니다. 정적 재배치 기술의 단점 및 해결 방법을 개선합니다. Jan 28, 2024 am 09:28 AM

정적 재배치는 소프트웨어나 애플리케이션을 메모리에 로드하고 메모리 주소를 할당하는 데 사용되는 기술입니다. 그 목적은 소스 코드를 수정하지 않고도 프로그램을 다른 환경에서 실행할 수 있도록 하는 것입니다. 그러나 정적 재배치 기술에는 몇 가지 단점도 있습니다. 이 기사에서는 이러한 단점을 살펴보고 이를 개선할 수 있는 몇 가지 방법을 제안합니다. 첫째, 정적 재배치 기술은 메모리 조각화를 일으킬 수 있습니다. 프로그램이 실행되면 명령, 데이터 및 스택을 저장하기 위해 연속적인 메모리 공간을 할당합니다. 그러나 프로그램이 더 오래 실행됨에 따라 일부 메모리 블록이 해제될 수 있습니다.

Go 언어의 장점과 단점 Go 언어의 장점과 단점 Oct 26, 2023 am 09:46 AM

최신 프로그래밍 언어인 Go 언어는 단순성과 학습 용이성, 강력한 동시성 성능, 효율적인 메모리 관리 및 크로스 플랫폼 지원이라는 장점을 가지고 있습니다. 그러나 상대적으로 작은 생태계, 불완전한 일반 지원, 제한된 오류 처리, 일부 고급 기능 부족 등의 단점도 있습니다. 개발자가 Go 언어를 사용하기로 선택한 경우 특정 애플리케이션 시나리오와 요구 사항에 따라 절충과 선택을 해야 합니다.

Go 언어의 단점과 개선 방향에 대한 심층 분석 Go 언어의 단점과 개선 방향에 대한 심층 분석 Mar 27, 2024 pm 05:33 PM

컴퓨터 프로그래밍 분야에서 Go 언어는 높은 개발 효율성과 강력한 동시성 성능을 갖춘 프로그래밍 언어로 폭넓은 관심과 응용을 받아왔습니다. 그러나 다른 프로그래밍 언어와 마찬가지로 Go 언어에도 몇 가지 단점이 있으며 지속적인 개선과 최적화가 필요합니다. 이번 글에서는 Go 언어의 단점과 개선 방향을 심층적으로 살펴보고, 구체적인 코드 예시를 통해 분석해보겠습니다. 1. 단점 분석: 예외 처리는 충분히 유연하지 않습니다. Go 언어에서는 오류 처리 메커니즘이 주로 오류 값을 반환하는 방식으로 구현됩니다. 이 메커니즘은 간단하고 효율적이지만 복잡한 오류 처리에는 적합하지 않습니다.

Go 프로그래밍 언어의 강점과 약점에 대한 심층 분석 Go 프로그래밍 언어의 강점과 약점에 대한 심층 분석 Mar 09, 2024 pm 05:03 PM

Go 프로그래밍 언어의 장점과 단점에 대한 심층 분석 Golang이라고도 알려진 Go 언어는 Google에서 개발한 오픈 소스 프로그래밍 언어입니다. Go 언어는 2009년 출시 이후 소프트웨어 개발 분야에서 많은 주목을 받으며 네트워크 프로그래밍, 클라우드 컴퓨팅, 빅데이터 처리 등 다양한 분야에서 널리 사용되고 있습니다. 이 기사에서는 Go 언어의 장점과 단점을 살펴보고 구체적인 코드 예제를 통해 설명합니다. 장점 1. 강력한 동시 프로그래밍 기능 Go 언어에는 고루틴과 채널이 내장되어 있어 동시 프로그래밍이 간단하고 효율적입니다.

See all articles