SQL은 1987년부터 표준화되었으며 다음과 같이 유지됩니다 ISO/IEC 9075, 모든 엔진이 상단에 자체 방언을 추가하지만 이것이 바로 포맷터가 패턴 일치 대신 구문 분석해야 하는 이유입니다.
내가 검토해야했던 최악의 쿼리는 하나의 논리적 사고에 340 줄이었다: 하나로 작성된 Laravel SaaS에 대한 수익 보고서 DB::select() 원시 문자열,대문자에 대해 각각 다른 생각을 가지고 있었고 줄 바꿈에 대해서는 아무 것도 없었던 세 명의 개발자가 8 개월 동안 구축했습니다. 텍스트의 벽 어딘가에,a LEFT JOIN 조용히 가 되었습니다 INNER JOIN 리팩터링 중에 주문이 전혀 없는 고객이 보고서에서 사라졌습니다. 버그는 한 단어였습니다. 찾는 데 하루 반이 걸렸습니다. 논리가 어려워서가 아니라 쿼리가 어려웠기 때문입니다 읽을 수 없는그리고 읽을 수 없는 코드는 버그를 눈에 잘 띄게 숨깁니다.
Here's sql 에 관한 것: 데이터베이스는 당신의 포맷팅에 신경쓰지 않는다. 파서는 읽는다 select id,name from users where active=1 그리고 SELECT id, name FROM users WHERE active = 1 같은 문으로,같은 실행 계획을 생성하고,같은 행을 같은 시간에 반환합니다. SQL 을 포맷하는 것은 순전히 인간을 위한 것입니다 - 정확히 왜 it's 할 가치가 있는 지입니다. 왜냐하면 인간은 그것을 검토하고 오전 2 시에 디버깅하고 나중에 세 개의 작업을 상속하기 때문입니다. a query you can't skim is a query you can't verify.
안 SQL 포맷터 모든 쿼리를 켭니다 - 로그에서 붙여 넣기,ORM & # 39;s 디버그 출력,동료 & # 39;s 슬랙 메시지,레거시 저장된 절차 - 한 번의 클릭으로 일관되게 들여 쓰기,일관되게 케이스,검토 가능한 SQL 로 Toolz.dev 에 하나는 완전히 귀하의 브라우저에서 실행,이는 거의 모든 다른 텍스트보다 SQL 에 더 중요 you & # 39;d 온라인 도구에 붙여 넣기,프로덕션 쿼리는 스키마와 때로는 데이터를 전달하기 때문에.
이 가이드는 사용 방법, 실제로 중요한 서식 규칙(키워드 케이스, 들여쓰기 및 영원한 쉼표 전쟁), 포맷터가 매일 비용을 지불하는 워크플로를 다룹니다.
TL;DR: 쿼리를 붙여넣습니다 Toolz.dev SQL 포맷터 그리고 일관되게 들여쓰기되고 키워드 케이스가 있는 SQL - 즉시,무료, 클라이언트 측,가입이 없습니다. 포맷은 쿼리가 수행하는 작업이나 실행 속도를 절대 변경하지 않습니다; 사람이 이를 확인할 수 있는지 여부를 변경합니다. 채택할 가치가 있는 규칙: 대문자 키워드,줄당 하나의 절,각 절 아래에 들여쓰기,쉼표 스타일을 선택하고 이에 대한 논쟁을 중지합니다. XNUMX 과 페어링하십시오 JSON 포맷터 데이터베이스 위의 API 계층의 경우 텍스트 차이 도구 쿼리의 두 버전을 비교합니다.
주요 특징
원클릭 일관성 들여쓰기
Formatter's 코어 이동: 각 주요 절 - SELECT, FROM, WHERE, GROUP BY, ORDER BY - 아래에 들여쓰기된 열,조건 및 조인으로 자체 라인을 시작합니다. 이것은 "river" 구조 경험 SQL 리더 스캔 기준: 눈은 왼쪽 가장자리 읽기 절 키워드를 따라 내려간 다음 중요한 절로 다이빙합니다. 명확한 구조 검토가 포함된 60줄 형식의 쿼리입니다 더 빠르게 6 줄 형식이없는 것보다 구조가 당신을 위해 독서의 절반을하고 있기 때문에. 내 340 줄 공포 이야기는이 모양으로 20 분 리뷰 였을 것입니다 - 변경된 조인 유형은 눈에 띄게 잘못된 자체 라인에 혼자 앉아 있었을 것입니다.
키워드 사례 정규화
SELECT 대 select 진심으로 does't 어떤 데이터베이스에 중요 - SQL 키워드는 표준에 따라 대소문자를 구분하지 않으며, 모든 방언은 그것을 존중합니다. 그것은 codebase에 엄청나게 중요하지만, 혼합 케이싱은 구조적으로 동일한 쿼리를 다르게 보이게하는 시각적 노이즈이기 때문에 대문자 키워드는 구문 강조가없는 편집기에서 데이트하는 오래된 규칙입니다, 어디 SELECT 캡에서 ~였다 강조. 나는 아직도 대문자를 작성 - 키워드는 소문자 식별자에 대해 팝업,그리고 그것은 강조를 스트립 모든 컨텍스트 살아남: 로그,diffs, 일반 텍스트 이메일,터미널 출력. 포맷터는 다섯 사람이 작성한 코드베이스가 하나에 의해 작성된 것처럼 읽도록 선택한 규칙에 정상화.
ORM 및 로그 출력을 처리합니다
포맷팅이 가장 필요한 쿼리는 사람이 작성하지 않은 쿼리입니다: Eloquent 및 ActiveRecord 출력,Doctrine's 생성 조인,느린 쿼리 로그의 단일 라인 몬스터.ORM 출력은 기계 생성 별칭과 함께 한 줄로 도착합니다 (t0, t1, laravel_reserved_0), 그리고 원시 그것을 읽는 것은 두통을 얻을 방법입니다. 포맷터의 내 단일 가장 빈번한 사용: Laravel's 쿼리 로그 또는 망원경에서 쿼리를 잡아,포맷, 실제로 ORM 이하기로 결정 한 것을 볼 - 이는 모든 "why is this endpoint slow" 조사,바로 전에 EXPLAIN.
다중 방언 공차
실제 SQL 은 방언의 계열이다: MySQL's 백틱-인용 식별자,PostgreSQL's 큰따옴표 및 :: 캐스트,SQL Server's 대괄호 및 TOP, SQLite's 모든 것을 쉽게 처리합니다. 유용한 포맷터는 먼저 방언 선언을 요구하지 않고 모든 형식을 처리하며 "correcting"가 아닌 방언별 구문을 보존합니다. ANSI/ISO SQL 표준(ISO/IEC 9075)은 공통 코어를 정의하지만 실제로는 아무도 순수 표준 SQL을 작성하지 않으며 표준만 말하는 포맷터는 첫 번째 백틱에서 질식합니다.
의미론을 보존합니다
명시 적으로 말할 가치가 있기 때문에 it's 사람을 중지 공포: 서식은 결과를 변경할 수 없습니다. 공백과 키워드 케이스는 SQL 에서 의미하지 않습니다 - 하나의 역사적 경고는 그 문자열 리터럴 는 대소문자를 구분하여 비교되거나,대조법에 따라 비교되지 않으며,포맷터는 인용된 문자열의 안쪽에 절대 닿지 않습니다. 출력은 동일한 문,바이트가 중요한 바이트에 대한 바이트 실행입니다 EXPLAIN 당신이 그것을보고 싶다면 두 버전에: 동일한 계획.
여기서 실제로 중요한 것은 클라이언트 측입니다
SQL 은 온라인 도구에 일상적으로 붙여 넣는 가장 민감한 텍스트 범주입니다. 쿼리는 스키마를 드러냅니다 - 테이블 이름,열 이름,관계 - 로그에서 복사 된 쿼리는 종종 리터럴 값을 포함합니다: emails in WHERE 절,ID 범위,가끔은 쿼리 문자열에 전혀 없어야 하는 것. The Toolz.dev 포맷터 브라우저에서 모든 것을 처리합니다; 아무것도 전송되지 않습니다. SQL 의 경우 구체적으로 I & # 39;d 는 클라이언트 측 처리를 기능이 아닌 요구 사항으로 호출합니다 - 네트워크 탭에서 확인한 다음 긴장을 푸십시오.
SQL 포맷터를 사용하는 방법
1단계: 쿼리를 캡처합니다
SQL을 소스에서 복사합니다: 마이그레이션 파일, 저장된 프로시저, ORM's 디버그 출력(DB::listen() 또는 Laravel의 망원경, ActiveRecord::Base.logger rails 에서), slow-query log,또는 APM 도구의 쿼리 탭. 로그에서 왔다면 이스케이프된 따옴표나 매개변수 위치 지정자 (parameter placeholders) 가 있었을 수 있습니다?, $1) - that's fine,포맷 담당자는 자리 표시자를 처리하며,명확하게 보는 것이 종종 요점입니다.
2 단계: 붙여넣기 및 포맷
열다 SQL 포맷터, 붙여넣기, 그리고 포맷된 버전이 나타납니다. 방언 의식도 없고, 좋은 기본값을 얻기 위해 필요한 구성도 없습니다. 쿼리에 세미콜론으로 구분된 여러 명령문이 포함되어 있으면 별도의 명령문으로 포맷됩니다. - 마이그레이션 스크립트 전체를 읽는 데 유용합니다.
3 단계: 리뷰어처럼 읽기
이제 thing 서식이 존재합니까: 왼쪽 가장자리를 스캔합니다. 어떤 테이블이 결합되고,어떤 조인 유형이 있습니까? Does the WHERE 조항에는 귀하가 기대하는 조건이 있으며 다음과 같습니다 AND/OR 그룹화는 사용자의 방식을 괄호로 묶었습니다 생각하다 그들은 그룹화? (SQL의 연산자 우선 순위 puts AND 전에 OR그리고 두 가지의 괄호 없는 혼합은 잘못된 조인 유형 바로 다음에 리뷰에서 볼 수 있는 두 번째로 큰 버그 소스입니다.) 형식화된 SQL은 두 실수를 몇 초 안에 모두 표시합니다.
4단계: 다시 복사 - 선택적으로
코드베이스로 향하는 쿼리의 경우 형식화된 버전을 마이그레이션에 복사합니다 ->select() 원시 표현, the .sql 파일. 일회성 디버깅을 위해 don't battle round-tripping; 포맷된 복사본은 읽는 순간 그 목적을 달성했습니다. 한 곳 아닙니다 포맷된 SQL 을 붙여넣기 위해: 쿼리를 구성 문자열로 저장하는 시스템에 다시 someone's diff 툴링이 이제 공백 변경의 벽을 보여줄 것입니다.Format for reading always; reformat stored queries only when you're prepared to own the diff.
5 단계: 팀 컨벤션을 표준화
Formatter's 가장 큰 가치는 합성이다: 당신이 자동화할 수 있는 규칙을 골라내십시오 - 키워드 케이스와 들여쓰기 폭은 이 포맷터가 직접 통제하는 2 개입니다 - 코드베이스로 가는 길에 새로운 모든 것을 포맷하고,SQL 검토 마찰은 영구적으로 떨어지는 당신의 기여 가이드에 선택을 적으십시오. 선택한 특정 규칙은 동일한 것을 사용하는 모든 사람보다 훨씬 덜 중요합니다. 소프트웨어의 모든 포맷 논쟁에 해당하고 토론 중간에 거의 아무도 믿지 않는 문장입니다.
기술적인 심층 분석: 의견을 가질 가치가 있는 협약
키워드 케이싱. 대문자 키워드,소문자 식별자는 지배적인 관례이고 나의 추천이다. 인수 isn't 전통 - it's 견고성. 통나무,단말기, 코드 리뷰 주석 및 Slack 에 붙여진 Stack Overflow 답변에서 구문 강조가 사라진다; 대문자 키워드는 텍스트와 함께 이동하는 강조 표시 반론 (소문자 모든 것,편집기가 강조 표시하도록 함) 이 일관되고 I've 는 그것을 행복하게 사용하는 코드베이스에서 작업했다. What's not coherent 는 혼합이며,이는 선택을 강제하는 포맷터 없이 얻는 것이다.
한 줄에 한 절, 들여쓰기된 내용. 보상이 가장 높은 구조적 규칙입니다. SELECT 줄을 시작합니다; 그 열은 아래 (또는 짧은 경우 같은 줄에) 들여쓰기되어 있습니다. 각 JOIN 그것의 자신의 라인을 가져옵니다 ON 조건 표시 - 조인 조건 숨겨진 중간선은 잘못된 조인 버그가 숨겨져 있는 곳입니다. WHERE 조건은 줄당 하나씩 정렬되어 쌓입니다 AND/OR 각 줄을 선도하여 논리 구조가 수직으로 읽혀집니다. query's 조건이 열로 읽혀지면 누락된 조건이 a 로 표시됩니다 패턴의 간격인간의 눈이 유난히 잘 발견하는 것입니다.
쉼표 전쟁은. 후행 쉼표(각 열 뒤)를 자연스럽게 읽습니다; 선행 쉼표(각 열 앞, 줄 시작 시)는 구두점을 구조적으로 만듭니다:
-- Trailing (most common)
SELECT
u.id,
u.email,
o.total
-- Leading (the DBA classic)
SELECT
u.id
, u.email
, o.total
선행 쉼표 옹호자는 진정으로 좋은 두 가지 요점을 가지고 있습니다: 첫 번째를 제외한 모든 줄을 주석 처리하면 진술을 깨지 않으며 누락 된 쉼표는 왼쪽 여백에 즉시 표시됩니다. 후행 쉼표 옹호자는 하나를 가지고 있습니다: 당신이 쓰는 다른 모든 언어와 같이 후행 쉼표를 쓰고 그것에 대해 나쁜 느낌을 멈췄습니다 - 그러나 SQL 은 현대 JavaScript 또는 Python 과 달리 그렇습니다 아닙니다 마지막 란 후에 매달려있는 쉼표를 용서하십시오,왜이 논쟁이 전혀 존재하는지 그리고 왜 지도 작풍이 DBA 원형에서 죽기를 거부하는 지입니다. 가득 차있는 공개: Toolz.dev 체재자는 주류 측을 가지고 가고 뒤에 오는 쉼표를 방출합니다 - 그것에는 지도 쉼표 형태가 없습니다,그래서 만약에 you're 투입한 지도 쉼표 상점 이것이 그것이 won't 당신을 위해 다시 포맷하는 1 개의 관례인 집 작풍을 선택하고,일관되게 적용하고,넘어가십시오.
포맷이 수행하지 않는 작업. It doesn't optimized. 포맷된 SELECT * 5 테이블 조인을 가로지르는 것은 아름답게 들여쓰기된 성능 문제입니다. 서식은 전제 조건 최적화를 위해 - 읽을 수 없는 쿼리에 대해 추론할 수는 없지만 추론에는 여전히 필요합니다 EXPLAIN, 색인 인식, 그리고 당신의 data's 모양을 아는 것. 나는 파이프 라인을 다음과 같이 생각합니다: 형식, 읽기, EXPLAIN그런 다음 최적화합니다. 1단계를 건너뛰면 does't가 더 빨라집니다; 2단계부터 4단계까지 더 느려집니다. 동일한 분야가 API에서 한 레이어 위로 적용됩니다 JSON 포맷터 가이드 페이로드에 대해 구조적으로 동일한 주장을 합니다.
댓글은 살아남습니다. 축소화와 달리 서식은 주석을 유지합니다 - -- 라인 코멘트와 /* */ 블록은 온전하게 통과합니다. 그들을 사용하십시오. A -- deliberately LEFT JOIN: include customers with no orders 가입 위의 코멘트는 지금까지 작성된 가장 저렴한 버그 보험이며, it's 코멘트가 필요한 340 줄 공포 이야기입니다.
일반적인 사용 사례
코드 검토
풀 요청에서 포맷되지 않은 SQL 은 isn't 가 일어날 리뷰입니다 - 리뷰어's 눈은 텍스트의 벽에서 미끄러지고 승인은 어쨌든 착륙합니다. PR 을 열기 전에 쿼리를 포맷하는 것은 측정 가능한 보수를 가진 기본적인 예의입니다: 조인 유형,조건 그룹화 및 열 목록이 개별적으로 표시되므로 개별적으로 검토 할 수 있습니다. 모든 정품 SQL 버그 I 've 는 리뷰에서 잡혔습니다 - 잘못된 조인,괄호 안 OR, 그만큼 DELETE 절반이 누락되었습니다 WHERE 절 - 쿼리가 한 줄씩 읽을 수 있을 만큼 잘 포맷되어 있어서 잡았습니다.
ORM 생성 쿼리 디버깅
ORMs 는 마지막 점이 느릴 때까지 경이롭다,이 점에서 당신은 실제적인 SQL 를 볼 필요가 있다 - 그리고 ORM 산출은 항상 1 개의 조밀한 선이다. 그것을 체재하거든 이야기는 나타난다: 열망하는 선이 놓친 N+1 는 관계 정의를 조용히 추가해 결합하고,그 ORDER BY 색인되지 않은 열에. Laravel 작품에서 이것은 여러 번 - 시간 - 매주 의식입니다: 망원경, 복사, 포맷, wince, Eloquent 코드를 수정하고 반복하세요. 포맷터는 doesn't 자체 진단; 쿼리를 충분히 읽을 수 있게 만듭니다 너 할 수 있는.
유산 쿼리에 관한 고고학
모든 장수 시스템에는 그것들이 있다: 2015 년부터 저장된 프로시저,보고 뷰는 아무도 감히 건드리지 못한다,원래 author's 포맷팅 (즉,없음) 으로 구성 파일에 내장된 쿼리. 레거시 SQL 을 수정하기 전에 포맷을 지정하고 끝과 끝을 읽으십시오 - you'll 일상적으로 can't ever be true 인 조건을 찾고,더 이상 쓰기를 수신하지 않는 테이블에 조인하고,현재 team's 가정이 모순되는 논리를 먼저 포맷하면 "무서운 레거시 query" into "long but regible query," 어떤 다른 더 나은 문제입니다.
쿼리 버전 비교
릴리스 간에 report's 숫자가 변경되면 질문은 "query 에서 변경된 사항,"이며,답변에는 두 버전을 diffing 해야 합니다 - 둘 다 동일한 형식으로 먼저 작동하는 경우에만 작동합니다. 동일한 설정으로 둘 다 포맷한 다음 다음을 통해 실행하십시오 텍스트 차이 도구: 노이즈가 사라지고 두 개의 변경된 라인이 단독으로 서 있습니다. 이 정확한 시퀀스는 내 내부 결합 버그를 발견했습니다. 결국. 나는 지금 그것을한다 전에 그 이후가 아닌 하루 반의 혼란.
교육 및 문서화
튜토리얼,런북, 내부 문서의 SQL 은 작성자보다 스키마에 덜 익숙한 독자가 작성한 것보다 훨씬 더 많이 읽습니다. 대문자 키워드와 한 줄당 하나의 개념 구조가있는 형식화 된 예제는 극적으로 배우기 쉽습니다 - 구조는 내용과 함께 가르쳐줍니다. 내가 포함 된 쿼리가있는 문서를 작성하면 모든 사람이 먼저 포맷터를 통과합니다; docs 의 포맷되지 않은 SQL 은 독자에게 저자가 실제로 그것을 읽을 것으로 기대합니다.
서식 지정 규칙 비교
| 컨벤션 선택 | 옵션 A | 옵션 B | 내 테이크 |
|---|---|---|---|
| 키워드 케이스 | SELECT (대문자) |
select (소문자) |
대문자 - 강조 표시 없이 컨텍스트에서 살아남습니다 |
| 식별자 케이스 | snake_case | 테이블 정의를 일치시킵니다 | 일치 정의; 스키마와 절대 싸우지 마십시오 |
| 쉼표 | 후행 (id,) |
선도 (, id) |
후행은 가능하지만 선두는 방어 가능합니다. 하나만 선택하세요 |
| 절 레이아웃 | 한 줄에 한 절 | 컴팩트한 단일 라인 | 과거의 사소한 일에 대해 한 줄에 하나씩 |
AND/OR 배치 |
각 조건선을 선도합니다 | 이전 줄을 따라갑니다 | 선도 - 논리는 수직으로 읽습니다 |
| 가입 조건 | ON 자체 라인 또는 인라인으로 JOIN |
묻혀있는 중선 | 조인으로 볼 수 있습니다. 항상 |
| 들여쓰기 너비 | 2 개의 공간 | 4 개의 공간 | 어느 쪽이든; SQL은 JSON보다 적게 중첩되므로 여기서는 4가 괜찮습니다 |
이 행 중 어느 것도 잘못된 답을 가지고 있지 않으며,that's 는 정확하게 함정입니다 - 모든 옵션은 방어 가능하기 때문에,포맷터가 기계적인 결정을 내리지 않는 한 팀은 영원히 다시 소송을 제기합니다. 승리하는 동작은 지루합니다: 선택,구성, 모든 것을 포맷하고 실행 계획에 영향을 미치는 것들에 대해 회수 된 인수 시간을 보냅니다. 이 하나 주변의 나머지 일일 툴킷에 대해서는 다음을 참조하십시오 코딩 도구 가이드 그리고 더 넓습니다 웹 개발자 툴킷.
자주 묻는 질문
SQL 포맷터는 무엇을합니까?
SQL 포맷터는 query's 공백,줄 바꿈 및 키워드 케이싱을 일관되고 읽기 쉬운 구조로 다시 작성합니다 - 각 절은 자체 줄,조건 및 열이 들여쓰기되어 있고 키워드는 하나의 케이스로 정규화됩니다. statement's 의미는 그대로 유지됩니다: SQL 파서는 포맷을 완전히 무시하므로 포맷된 쿼리는 동일한 실행 계획으로 동일한 결과를 반환합니다. 변경은 순전히 쿼리를 검토,디버그 및 유지하는 인간을 위한 것입니다.
SQL 포맷팅은 쿼리 성능을 변경합니까?
아니요. 공백과 키워드 사례는 SQL에서 의미가 없습니다. 데이터베이스는 두 버전을 동일한 내부 표현으로 구문 분석하고 동일한 실행 계획을 생성하며 이를 실행하여 확인할 수 있습니다 EXPLAIN 각각에. 체재는 성과 일 자체 보다는 오히려 성과 일을 위한 전제 조건입니다: 당신은 깡통 & #39;t 인덱스에 관하여 이유와 당신이 깡통 & #39;t 읽었던 조인 순서에.
SQL 키워드는 대문자여야 할까요, 소문자여야 할까요?
둘 다 유효합니다 - SQL 키워드는 표준에 따라 대소문자를 구분하지 않습니다 - 따라서 이것은 정확성 규칙이 아닌 가독성 규칙입니다. 대문자 키워드 (SELECT, FROM, WHERE) 는 색상을 벗겨내는 컨텍스트에서 내장된 강조 표시 역할을 하기 때문에 가장 일반적인 선택으로 남아 있습니다: 로그, 차이점, 터미널 및 일반 텍스트 메시지. 어느 것을 선택하든 코드베이스 전반의 일관성은 선택 자체보다 훨씬 중요합니다.
SQL에서 주요 쉼표는 무엇이며 사람들은 왜 쉼표를 사용합니까?
선행-쉼표 스타일은 각 열 줄의 시작 부분에 쉼표를 배치합니다(, email) 이전 것의 끝 대신에. 첫번째를 제외하고 어떤 란든지 밖으로 주석 달기가 구문 과실을 결코 일으키지 않기 때문에 그것을 좋아하고,놓치는 쉼표는 좌 여백에 즉시 눈에 보인다 - 진짜 이점,SQL doesn't 가 마지막 란 후에 매달려 있는 쉼표를 현대 자바스크립트가 하는 방법 허용하기 때문에,뒤쫓는 쉼표는 더 일반적인 남아 있다; 둘 중 하나는 일관되게 적용되면 작동한다.
Eloquent 또는 ActiveRecord 와 같은 ORM 에서 생성 된 SQL 을 포맷 할 수 있습니까?
예,그리고 그것은's 포맷터의 최고의 용도 중 하나 - ORM 디버그 출력은 기계 생성 별칭 단일 밀집 라인으로 도착하고,포맷하는 것은 느린 엔드 포인트와 N + 1 문제를 진단하는 첫 번째 단계입니다. ORM & #39;s 로깅 (Laravel Telescope,ActiveRecord 로그) 에서 쿼리를 캡처하여 붙여 넣습니다 SQL 포맷터그리고 ORM이 도달하기 전에 실제로 구축한 내용을 읽어보세요 EXPLAIN.
포맷터가 MySQL,PostgreSQL 및 SQL Server 구문과 함께 작동합니까?
예 - 실용적인 포맷터는 주요 방언을 처리합니다' MySQL 백틱, PostgreSQL 이중 인용 식별자를 보존하는 특이한 점 :: 캐스트 및 SQL Server 대괄호를 다시 작성하지 않고 ANSI SQL 표준은 공유 코어를 정의하지만 순수 표준 SQL을 사용하는 프로덕션 데이터베이스가 없으므로 실제 쿼리에 유용하려면 포맷터가 방언 허용 오차가 필요합니다.
온라인 SQL 포맷터에 프로덕션 쿼리를 붙여넣는 것이 안전합니까?
SQL은 비정상적으로 민감하기 때문에 클라이언트 측에만 적용됩니다: 쿼리는 스키마를 노출하고 로그에서 복사된 쿼리에는 이메일이나 ID와 같은 리터럴 값이 포함되는 경우가 많습니다 WHERE 조항. 그만큼 Toolz.dev SQL 포맷터 전송되거나 저장된 것이 없이 브라우저의 모든 것을 처리합니다. 붙여넣는 동안 네트워크 탭을 시청하여 직접 확인하세요. 프로덕션에서 무엇이든 서버 기반 포맷터를 피하세요.
서식은 SQL 주석을 보존합니까?
네 - 둘 다요 -- 라인 코멘트와 /* */ 블록 주석은 삭제하는 축소와는 달리 그대로 통과합니다. 이렇게 하면 주석이 달린 쿼리와 주석이 인텐트를 전달하는 저장된 프로시저에 대해 서식이 안전해집니다. Use that: a one-line comment explaining a deliberate LEFT JOIN 또는 비정상적인 조건은 다음 개발자에 대한 가장 저렴한 보호 "fixing" was't 깨진 뭔가.



