MySQL의 숨겨진 기능

숨겨진 기능을 가진 오랜 전통에서 MySQL의 숨겨진 기능 목록을 보자.

답변 당 하나의 기능을 사용하십시오.

참고 항목 :
Linux의
숨겨진 기능 PowerShell의
숨겨진 기능 Oracle 데이터베이스의
숨겨진 기능 Windows 2008의
숨겨진 기능 Solaris / OpenSolaris의
숨겨진 기능 SQL Server의
숨겨진 기능 IIS의 숨겨진 기능 (6.0 / 7.0)



답변

자주 사용되지는 않지만 더 장황한

전체 프로세스 목록 표시

편리,하지만 멋진 좋은으로 비 기업 쿼리 분석기 -과 같이 사용 가능

    mysql> 세트 프로파일 링 = 1;
    쿼리 OK, 영향을받는 0 개의 행 (0.00 초)

이 두 가지는 프로파일 테이블을 채우는 정크 쿼리입니다.

    mysql> select * from _test.customers;
    오류 1146 (42S02) : '_test.customers'테이블이 존재하지 않습니다

    mysql> select * from test.customers limit 0;
    빈 세트 (0.00 초)
    

프로파일 링 된 모든 쿼리 및 지속 시간 목록을 가져옵니다.

    mysql>은 프로파일을 보여준다;
    + ---------- + ------------ + ------------------------- ------ +
    | Query_ID | 기간 | 쿼리 |
    + ---------- + ------------ + ------------------------- ------ +
    | 1 | 0.00013400 | _test.customers에서 *를 선택하십시오 |
    | 2 | 0.01546500 | test.customers에서 *를 선택하십시오 |
    + ---------- + ------------ + ------------------------- ------ +

마지막 검색어에 대한 정보 표시는 “프로필 표시”일뿐입니다. 또는 검색어를 지정할 수 있습니다

    쿼리 2에 대한 mysql> show 프로파일;
    + ---------------------- + ---------- +
    | 상태 | 기간 |
    + ---------------------- + ---------- +
    | 시작 | 0.000053 |
    | 권한 확인 | 0.000007 |
    | 테이블 열기 | 0.000014 |
    | 시스템 잠금 | 0.000006 |
    | 테이블 잠금 | 0.000008 |
    | 초기화 | 0.000065 |
    | 최적화 | 0.000003 |
    | 실행 | 0.000201 |
    | 끝 | 0.000003 |
    | 쿼리 끝 | 0.000002 |
    | 품목 풀기 | 0.000020 |
    | 느린 쿼리 로깅 | 0.000002 |
    | 청소 | 0.000004 |
    + ---------------------- + ---------- +
    13 행 세트 (0.00 초)

특히 CPU, BLOCK IO 및 SWAPS와 같은 특정 정보를 요청할 수도 있습니다 ( 모두 맨 페이지에 있음 )

    mysql>은 쿼리 2에 대한 프로파일 CPU를 보여줍니다;
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | 상태 | 기간 | CPU_user | CPU_system |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    | 시작 | 0.000056 | 0.001000 | 0.000000 |
    | 권한 확인 | 0.000007 | 0.000000 | 0.000000 |
    | 테이블 열기 | 0.000010 | 0.000000 | 0.000000 |
    | 시스템 잠금 | 0.000005 | 0.000000 | 0.000000 |
    | 테이블 잠금 | 0.000007 | 0.000000 | 0.000000 |
    | 초기화 | 0.000059 | 0.000000 | 0.000000 |
    | 최적화 | 0.000003 | 0.000000 | 0.000000 |
    | 통계 | 0.015022 | 0.000000 | 0.000000 |
    | 준비 | 0.000014 | 0.001000 | 0.000000 |
    | 실행 | 0.000004 | 0.000000 | 0.000000 |
    | 데이터 전송 | 0.000245 | 0.000000 | 0.000000 |
    | 끝 | 0.000004 | 0.000000 | 0.000000 |
    | 쿼리 끝 | 0.000002 | 0.000000 | 0.000000 |
    | 품목 풀기 | 0.000021 | 0.000000 | 0.000000 |
    | 느린 쿼리 로깅 | 0.000002 | 0.000000 | 0.000000 |
    | 청소 | 0.000004 | 0.000000 | 0.000000 |
    + ---------------------- + ---------- + ---------- + ---- -------- +
    16 행 세트 (0.00 초)

로깅이 오버 헤드를 추가하므로 나중에 사용하지 않도록 설정하십시오.

    mysql> 세트 프로파일 링 = 0;
    쿼리 OK, 영향을받는 0 개의 행 (0.00 초)

답변

항상 일반적으로 알려 지거나 기억되지 않는 일부 MySQL 명령 .

읽기 및 붙여 넣기가 용이하도록 결과 세트 방향을 세로로 변경하십시오.

mysql> SELECT CURDATE(), CURTIME()\G
*************************** 1. row ***************************
CURDATE(): 2009-06-26
CURTIME(): 12:10:37

기록에 남기면서 현재 입력중인 쿼리를 취소하십시오.

mysql> SELECT CURDATE(), CURTIME()\c
mysql>

자주 사용하는 $ EDITOR로 쿼리 또는 마지막 쿼리를 편집하십시오.

mysql> SELECT CURDATE(), CURTIME()\e
mysql> \e

콘솔의 출력을 지우십시오.

mysql> \! clear

MD5 해시로 결과 집합을 비교하십시오.

mysql> pager md5sum -
PAGER set to 'md5sum -'
mysql> SELECT CURDATE(), CURTIME();
d24e22e4e2d33dfda9f01ba934b7676a  -
mysql> nopager
PAGER set to stdout

프롬프트를 변경하십시오.

mysql> prompt (\u@\h) [\d]>\_
PROMPT set to '(\u@\h) [\d]>\_'
(dan@localhost) [test]>

주어진 문자열 (예 : Bash)에 대한 명령 기록을 검색하십시오.
검색어를 입력하고 ^ R을 반복하여 결과를 순환하십시오.

^R
(reverse-i-search)`DATE': SELECT CURDATE(), CURTIME();

답변

내가 배운 몇 가지 트릭 :

이전에 저장 한 파일을 실행하려면

source filename      # Alternatively you can enter "\\. filename".

사용하다 “\!” 쉘 명령에 액세스합니다. 예를 들면 다음과 같습니다.

\\! ls c*sql   # To list all your SQL files in directory starting with "c".

따라서 편집기 옵션을 사용하지 않고 명령문을 파일에 쓰려면 다음을 입력하십시오.

\\! echo 'select * from emp where job ="salesman" '   > test2.sql   # Editor option seems easier to me though!

입력하면

\\T filename

그러면 지정한 filemame으로 지시문 및 쿼리 결과를 지정 / 인쇄 할 수 있습니다. \\t이것을 끄려면 사용하십시오 .

\\G“;”대신 쿼리를 종료하십시오 . 열 대신 행 형식으로 출력을 표시하기 위해.

SHOW 문과 함께 Where … LIKE 절을 사용하여 배제하지 마십시오. 예를 들면 다음과 같습니다.

SHOW STATUS LIKE '%cache%';

마지막으로 my.cnf파일 사용 을 보지 않고 MySQL 데이터 디렉토리의 위치를 ​​찾으려면 다음을 사용하십시오.

SHOW VARIABLES LIKE 'datadir';

답변

나는 개인적으로 SHOW명령을 좋아한다

당신은 할 수 있습니다
SHOW PROCESSLIST-mysql에 실행중인 모든 연결을
SHOW CREATE TABLE TableName보려면
SHOW CREATE PROCEDURE ProcedureName– 테이블 을 만드는 데 사용되는 SQL
SHOW VARIABLES을 보려면 -SP를 만드는 데 사용되는 SQL 을 보려면-모든 시스템 변수를 보려면

전체 목록을 여기에서 얻으십시오


답변

실제로 문서화 되었지만 매우 성가시다 : 잘못된 데이터에 대한 자동 날짜 변환.

MySQL 5.0.2 이전에, MySQL은 불법적이거나 부적절한 데이터 값을 용서하고 데이터 입력을위한 올바른 값으로 강제합니다. MySQL 5.0.2 이상에서는 기본 동작으로 유지되지만 서버 SQL 모드를 변경하여 잘못된 값에 대한보다 전통적인 처리를 선택하여 서버가이를 거부하고 발생하는 명령문을 중단 할 수 있습니다.

MySQL이 입력을 근처의 유효한 날짜로 조정하지 않고 대신 0000-00-00정의에 따라 유효하지 않은 날짜를 저장하는 경우 “운이 좋을 때”가 있습니다 . 그러나이 경우에도이 값을 자동으로 저장하지 않고 MySQL이 실패하기를 원했을 수도 있습니다.


답변

MySQL을 다른 데이터베이스와 차별화하는 또 다른 기능은 REPLACE INTO명령입니다. 넌 할 수있어:

REPLACE INTO T1 (Col1, Col2 )
SELECT Col1, Col2 FROM T2;

update 문을 작성하는 것처럼 replace 문을 작성할 수도 있습니다.

REPLACE INTO T1
SET Col1 = 'SomeValue1'
, Col2   = 'SomeValue2'

답변

실제로 숨겨진 기능은 아니지만 덜 알려져 있으며 UPDATE 또는 INSERT를 수행하기 전에 무언가 존재하는지 확인하기 위해 쿼리를 저장하는 데 많이 사용합니다.

INSERT ... ON DUPLICATE KEY UPDATE

설명서는 여기