실제로 MySQL을 마스터하는 방법?


13

PHP를 사용했던 것과 같은 시간 동안 mysql을 사용하고 있습니다. 그러나 저는 PHP에 대해 10 배 더 자신감이 있습니다. 또는 다른 프로그래밍 언어. 그러나 실제로 SQL을 실제로 파악하지 못하는 것 같습니다. 나는 선택, 업데이트, 삽입, 삭제, 조인 등을 할 수 있지만 더 복잡한 것들에 관해서는 길을 잃었습니다. 더 복잡한 select 문 작성 방법, 인덱스를 올바르게 사용하는 방법, 사용할 엔진 등

어떤 이유로 든 mysql 문서를 찾기가 쉽지 않지만 PHP는 쉽게 따라 할 수 있습니다.

나는 아마도 내 두뇌가 프로그래밍을 만드는 것이지만 SQL을 혼란스럽게하는 방식으로 연결되어 있다고 생각하기 시작했습니다. 모르겠어요 대부분의 사람들은 Regex가 너무 혼란 스럽다고 생각하지만 SQL 문을 작성하는 방법보다 과학적으로 더 합리적입니다. 제발 잘못 이해하지 마십시오. 나는 SQL을 싫어하지 않습니다. 정말로 그것을 좋아합니다. 나는 그것을 더 잘 이해하고 싶습니다.

실제로 MySQL을 마스터하는 가장 좋은 방법은 무엇입니까?

내가 "주인"이라고 말할 때 나는 전문가들 사이에서 전문가를 의미하지는 않는다. 나는 도움이 필요하지 않고 스스로 질문하는 대부분의 문제를 알아낼 수있을 정도로 똑똑하다는 것을 의미한다.


2
SQL이나 MySQL에 대해 이야기하고 있습니까? 왜냐하면 그것들은 매우 다를 수 있기 때문입니다. 복제 설정 및 관리는 복잡한 SQL 쿼리 작성과는 매우 다른 작업입니다. 나는 이것이 또한 시간의 함수라고 생각합니다. '동일한 시간'동안 PHP를 사용하더라도 SQL을 작성하는 것보다 PHP를 작성하는 데 훨씬 많은 시간을 소비했을 것입니다.
Steven Evers

@SnOrfus PHP로 더 많은 코드를 작성하는 것에 대한 좋은 지적이 있습니다. MySQL은 내가 사용한 유일한 관계형 데이터베이스 언어입니다. "SQL"이라고 말했을 때 나는 일반적으로 그 유형의 언어를 의미했습니다.
JD Isaacks

유용한 일을하십시오. 실제 세계에서 발생할 수있는 다양한 문제를 살펴보십시오. 이렇게하면 교과서 이론보다 복잡한 시나리오를 탐색하게됩니다. 콘솔에서 테스트하고 PHP를 사용하지 않고 원하는 결과를 얻을 수 있는지 확인하십시오. 예를 들어 Stanford가 출시 한 rhe free 데이터베이스 도입 클래스에는 소셜 네트워크와 관련된 몇 가지 멋진 연습이 있습니다.
제임스 P.

많은 사람들이 PHP를 싫어하지만 (여러 가지 이유로 매우 우수합니다) 문서는 훌륭합니다. PHP 문서가 MySQL 문서보다 쉽게 ​​따르는 이유 중 하나는 언어의 본질이 아니라 문서의 본질입니다.
TRiG

답변:


10

그걸 써

많은 사람들에게 관계형 데이터베이스의 작동 방식을 내재화하는 것은 어렵지만 매우 가치가 있습니다. SQL을 더 많이 사용할수록 두뇌에 도움이됩니다. 계속 밀어 내세요.

뭔가 이상하게 보일 경우 조사하십시오

Chrome에서이 검색 엔진을 설정하여 "m [검색 쿼리]"를 입력하여 문서를 검색하기 만하면됩니다 (dev.mysql.com의 검색 속도) : {google : baseURL} search? {google : RLZ} {google : acceptedSuggestion} {google : originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site : dev.mysql.com/doc/refman/5.1/en+%s

문서에 답이 없으면 freenode에서 #mysql을 열어 누군가가 통찰력을 제공 할 수 있는지 확인하십시오.

읽다!

관계형 데이터베이스가 어떻게 작동하는지 이해하면 MySQL이 작성하는 마법의 쿼리로 수행하는 작업에 대해 조금 더 알고 싶을 것입니다. 고성능 MySQL을 강력히 추천 합니다. 시간이 매우 가치가 있습니다.


1
좋은 소식은 이미 추천 한 책이 아직 많이 읽지 않았다는 것입니다. 감사! 크롬 검색을 설정하는 방법에 대한 지침은 +1입니다.
JD Isaacks

책을 읽었지만 아직 읽지 않았습니다.
crosenblum

@tehShrike 크롬에서 어떻게 했습니까?
jaybny

@jaybny url 바를 마우스 오른쪽 버튼으로 클릭하고 "검색 엔진 편집"으로 이동
TehShrike

9

무엇보다도 조인에 대해 철저히 이해하십시오. 내부 및 왼쪽 조인 만이 아닙니다. 크로스 조인이 수행하는 작업과 전체 외부 조인을 확인하십시오. 특정 유형의 조인을 선택하게하는 상황을 알고 있어야합니다. 상호 교환 할 수 없으며 왼쪽 조인을 사용하는 쿼리는 내부 조인을 사용하는 쿼리와 다른 결과를 반환 할 수 있습니다. (그것은 명백 할 것이라고 생각할 것이지만 사람들이 문제를 설명하는 데있어서 무작위로 다른 조인을 시도하는 너무 많은 질문을 읽었습니다.)

다음으로 집계와 작동 방식을 실제로 이해합니다. Mysql을 사용하면 표준 방식으로 그룹 바이를하지 않아도됩니다. 그러나 그룹 별 조항을 올바르게 정의 할 수있는 원칙을 갖도록하십시오. 그것은 당신이하고있는 일을 이해하는 데 도움이되며 지식을 다른 데이터베이스로보다 쉽게 ​​옮길 수있게합니다.

사례 진술이 무엇을하는지 배우십시오.

복잡한 쿼리를 수행 할 때 청크 작업을 배웁니다. 각 청크에서 예상 한 결과가 있는지 확인하십시오. 예를 들어, 지난 3 개월 동안 반품 된 주문과 반품 사유 및 고객의 연락처 정보에 대한보고 조회를 작성해야한다고 가정하십시오. 첫 단계는 지난 3 개월 동안 주문을 반품하는 것입니다. 당신이 그 확고한 것을 알고 있으면, 당신은 반환 이유에 대한 정보를 추가 할 수 있습니다. 해당 솔리드를 확보 한 후 반품 한 고객을 추가 할 수 있습니다. 당신이 그 고체를 가지고 있다면, 그 사람의 연락처 정보를 추가하십시오. 각 단계에서 결과를 확인하고 의미가 있는지 확인하십시오. 이 경우 아마도 반품 주문 당 하나의 레코드로 끝나기를 원할 것입니다. 중간 단계에서 결과 수가 증가하거나 감소하면 쿼리에 문제가있는 것입니다. 때때로 빌딩 블록에서 정보가 올바른지 확인하기 위해 추가 필드를보고 싶을 것입니다. 나는 이것들을 별도의 줄에 넣고 다음 단계를 진행하면서 주석을 달아서 (내가 옳은 것을 알면 끝에서 제거) 다른 주름을 추가하면 쿼리가 재밌어지면 쉽게 다시 볼 수 있습니다. 결과의 모양을 완전히 이해하지 않으면 복잡한 쿼리를 올바르게 수행 할 수 없습니다. 일부 결과를 반환했기 때문에 괜찮아 보인다고 생각하면 잘못된 결과가 시간의 대부분을 보장합니다. m 오른쪽) 따라서 다른 주름을 추가하면 검색어가 재미있어지면 쉽게 다시 볼 수 있습니다. 결과의 모양을 완전히 이해하지 않으면 복잡한 쿼리를 올바르게 수행 할 수 없습니다. 일부 결과를 반환했기 때문에 괜찮아 보인다고 생각하면 잘못된 결과가 시간의 대부분을 보장합니다. m)) 다른 주름을 추가하면 쿼리가 재미있게된다면 쉽게 다시 볼 수 있습니다. 결과의 모양을 완전히 이해하지 않으면 복잡한 쿼리를 올바르게 수행 할 수 없습니다. 일부 결과를 반환했기 때문에 괜찮아 보인다고 생각하면 잘못된 결과가 시간의 대부분을 보장합니다.

다음은 생각하지 않아도 SQL에서 수행 할 수있는 몇 가지 기본 사항 목록입니다.

  1. 먼저 조인이없고 (*가없는) 똑바로 위로 선택하십시오.
  2. 둘 이상의 테이블을 결합하고 모든 테이블에있는 레코드를 얻는 방법을 알아야합니다.
  3. 둘 이상의 테이블을 결합하고 모든 테이블에있는 레코드를 가져 오지만 일대 다 관계의 많은면에서 테이블에서 하나의 레코드 만 리턴하는 방법을 알아야합니다.
  4. 하나의 테이블에서 레코드를 가져올 수 있지만 연관된 테이블에서는 얻을 수 없어야합니다.
  5. 보고서에 대한 데이터를 집계 할 수 있어야합니다
  6. 하나의 레코드를 테이블에 삽입 할 수 있어야합니다
  7. 테이블에서 하나의 레코드를 업데이트 할 수 있어야합니다
  8. 테이블에서 하나의 레코드를 삭제할 수 있어야합니다
  9. 커서없이 테이블에 레코드 그룹을 삽입 할 수 있어야합니다.
  10. 커서없이 테이블에서 레코드 그룹을 업데이트 할 수 있어야합니다.
  11. 커서없이 테이블에서 레코드 그룹을 삭제할 수 있어야합니다.
  12. 하나의 트랜잭션에서 여러 작업을 수행하고 오류 트래핑을 처리 할 수 ​​있어야합니다
  13. 레코드 통합을 생성하고 UNION vice UNION ALL 사용시기를 알아야합니다.
  14. CASE를 사용하여 일부 기준에 따라 한 필드의 데이터를 변경할 수 있어야합니다.

기본 SQL 지식에 익숙해지면 데이터베이스 구조를 익히십시오. 구조를 이해하고 물건이 저장된 위치를 생각할 필요가 없기 때문에 다른 사람들보다 훨씬 빠르게 지원하는 매우 복잡한 db에 대해 복잡한 쿼리를 작성할 수 있습니다. 테이블 구조와 외래 키 관계와 조회 값이 저장되는 위치 및 열의 의미 (이름뿐만 아니라 데이터가 보유되는 의미)를 이해하면 해당 데이터베이스를 쿼리하는 데 전문가가 될 수 있습니다. 새 작업에서 가장 먼저하는 일은 db 구조를 완전히 이해하는 것입니다.


3

내 생각에 SQL을 배우기 위해 (그리고 이것이 실제로 당신이 요구하는 것이므로, MySQL 관련 사항은 나중에 올 수 있습니다), PHP 스타일 프로그래밍 의 제어 흐름 에서 자신을 제거해야합니다 . 선언적 언어의 패러다임에서 구체적으로 생각하십시오.

SQL은 수행 방법이 아니라 원하는 것을 정의합니다. 후자를 정신적으로 제거하려고 시도하면 전자가 제 시간에 따라갑니다. 이 계층을 마음에 새기고 MySQL (또는 Oracle 등)이 어떻게 고민 하는지 생각해 보자 .

애플리케이션 로직은 PHP의 SQL / 프로시 저럴 / OO 코드에서 발생할 수 있습니다. 예를 들어, 데이터베이스에 무언가를 쿼리 할 때 사용자 테이블과 권한 테이블을 일관되게 조인하여 여러 개의 사전 쿼리를 수행하는 대신 적절한 권한을 보장 할 수 있습니다. insert into ... select ...데이터 유효성 검사를 위해 명명 된 값 대신 유사한 선택 ( )을 통해 삽입을 수행 할 수 있습니다 .

어쨌든, 나는 Codd 프리미티브 에 초점을 맞추고 선택, 프로젝션, 조인, 노조 및 차이를 이해 하는 것이 좋습니다 . 하루가 끝나면 개념은 간단하며 개념을 통해 수행하려는 작업의 80 %를 달성 할 수 있습니다. 나머지는 따를 수 있습니다.


두 번째 단락에 대한 훌륭한 조언을 위해 +1하고 그렇게 생각하지 않았습니다!
JD Isaacks

2

내가 무엇이든 "마스터"하는 가장 빠른 방법은 그것에 도전하는 것이었다. 일련의 데이터를 가져 와서 조회하고 싶은 다른 항목을 8-10 개 작성하십시오. 학년 그룹 평균으로 그룹화 된 모든 사람의 평균 연령을 가장 가까운 정수로 반올림하려는 학생 그룹입니다. 그런 다음 쿼리를 작성하십시오. 하나의 테이블로 시작한 다음 더 추가하십시오. 연습 데이터 조인 및 내장 함수.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.