blog

Mysql Summary()

Mysql 요약 [TOC] 서버 연결 및 연결 해제 mysql -h 주소 -P 포트 -u 사용자명 -p 비밀번호 데이터베이스 작업 현재 데이터베이스 보기 SELECT DATABAS...

Oct 21, 2025 · 25 min. read
シェア

Mysql요약

[TOC]

서버 연결 및 연결 해제하기

  • mysql -h 주소 -P 포트 -u 사용자 이름 -p 비밀번호
SHOW PROCESSLIST - 실행 중인 스레드 표시
SHOW VARIABLES - 시스템 변수 정보 표시하기

데이터베이스 작업

  • 현재 데이터베이스 보기 SELECT DATABASE();
  • 현재 시간, 사용자 이름, 데이터베이스 버전을 표시합니다 SELECT DATABASE();.
  • 기존 라이브러리 보기 데이터베이스 표시 [ '패턴']]
  • 현재 라이브러리 정보 보기 데이터베이스 만들기 표시 데이터베이스 이름
  • 라이브러리 옵션 정보 수정 데이터베이스 라이브러리 이름 옵션 정보 변경
  • 데이터베이스 삭제 [ 있는 경우 ] 데이터베이스 이름 또한 데이터베이스 및 해당 콘텐츠와 관련된 디렉터리도 삭제합니다.

테이블 연산

  • 테이블 옵션

    • 테이블이 설정되어 있지 않으면 데이터베이스 문자 집합을 사용합니다.
    • 저장 엔진 엔진 = 엔진_이름 다른 데이터 구조를 사용하는 데이터 관리에서 테이블은 다른 구조로 처리되어 작업의 다른 특성 등을 제공합니다. 공통 엔진: InnoDB MyISAM 메모리/햅 BDB 병합 예제 CSV MaxDB 보관 엔진마다 테이블 구조와 데이터를 다른 방식으로 보존하는 방식이 다릅니다. 엔진마다 테이블 구조와 데이터를 저장하는 방식이 다릅니다. MyISAM 테이블 파일 의미: .frm 테이블 정의, .MYD 테이블 데이터, .MYI 테이블 인덱스 InnoDB 테이블 파일 의미: .frm 테이블 정의, 테이블 스페이스 데이터, 로그 파일 SHOW ENGINES - 스토리지 엔진 상태 정보를 표시합니다. 엔진 이름 {LOGS|STATUS} 표시 - 스토리지 엔진 로그 또는 상태 정보를 표시합니다. 스토리지 엔진의 로그 또는 상태 정보를 표시합니다.
    • 증분 시작 번호 AUTO_INCREMENT = 행 수
    • 데이터 파일 디렉터리 데이터 디렉터리 = '디렉토리'
    • 인덱스 파일 디렉토리 인덱스 디렉토리 = '디렉토리'
    • 테이블 주석 COMMENT = '문자열'
    • 파티션 옵션 파티션 기준 ...
  • 모든 테이블 보기 SHOW TABLES[ LIKE 'pattern'] 테이블 이름에서 테이블 표시

  • 테이블 조직 보기 SHOW CREATE TABLE 테이블 이름 DESC 테이블 이름 / DESCRIBE 테이블 이름 / 설명 테이블 이름 / SHOW COLUMNS FROM 테이블 이름 [LIKE 'PATTERN'] SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']

  • 수정 양식

    • 테이블 이름 바꾸기 RENAME TABLE 원래 테이블 이름을 새 테이블 이름으로 RENAME TABLE 원래 테이블 이름을 라이브러리 이름으로 변경합니다. 테이블 이름
      • RENAME은 두 테이블 이름을 교환합니다.
    • 테이블의 필드 구성 수정 ALTER TABLE 이름 테이블 이름 작업 이름
  • 테이블 삭제 DROP TABLE[ IF EXISTS] 테이블 이름

  • 테이블 데이터 지우기 TRUNCATE [TABLE] 테이블 이름

  • 테이블 구조 복사하기 테이블 만들기 테이블 이름 복사할 테이블의 이름과 같습니다.

  • 테이블 구조 및 데이터 복사 CREATE TABLE 테이블 이름 [AS] SELECT * FROM 복사할 테이블 이름

데이터 조작

  • ADD INSERT [INTO] 테이블 이름 [] VALUES [, , ...] - 삽입할 값 목록에 모든 필드가 동일한 순서로 포함되어 있으면 필드 목록을 생략할 수 있습니다. - 여러 데이터 행을 동시에 삽입할 수 있습니다! REPLACE는 INSERT와 완전히 동일하며 서로 바꿔 사용할 수 있습니다. INSERT [INTO] 테이블 이름 SET 필드 이름=값 [, 필드 이름=값, ...]
  • 테이블 이름에서 필드 목록 선택 확인 [ 다른 절 ] - 여러 테이블의 여러 필드 가능 - 다른 절은 생략 가능 - 모든 필드에 대해 필드 목록을 *로 바꿀 수 있습니다.
  • 삭제 테이블 이름에서 삭제 [ 조건절 삭제 ] 조건절이 없는 경우 모두 삭제됩니다.
  • CHANGE UPDATE 테이블 이름 SET 필드 이름=새 값 [, 필드 이름=새 값] [업데이트 조건]

문자 집합 인코딩

  • MySQL, 데이터베이스, 테이블 및 필드 인코딩 가능

데이터 유형

  1. 숫자 유형(수학)
  • int(M) M은 총 비트 수를 나타냅니다.

    • 부호화된 비트는 기본적으로 존재하며, 부호화되지 않은 속성은
    • 표시 너비, 숫자가 필드에 설정된 자릿수를 정의하기에 충분하지 않은 경우 0으로 앞부분을 채우고 영점 채우기 속성 수정 예: int(5) 숫자 '123'을 삽입하고 '00123' 뒤에 채웁니다.
    • 요구 사항이 충족된다면 작을수록 좋습니다.
    • 1은 부울 값이 참이고 0은 부울 값이 거짓임을 의미하며, MySQL에는 부울 유형이 없으며 정수 0과 1로 표현됩니다. 일반적으로 부울 타입을 표현하기 위해 tinyint(1)을 사용합니다.
  • b. 부동 소수점 유형 바이트 범위 부동 소수점(단정도) 4바이트 더블(배정밀도) 8바이트 부동 소수점 유형은 부호 비트 부호 없음 특성과 표시 폭 제로필 특성을 모두 지원합니다. 정수와 달리 앞뒤에 0이 채워집니다. 부동소수점 유형을 정의할 때는 총 자릿수와 소수점 이하 자릿수를 지정해야 합니다. float(M, D) double(M, D) 여기서 M은 총 자릿수이고 D는 소수점 이하 자릿수입니다. M과 D의 크기에 따라 실수의 범위가 결정됩니다. 고정된 범위의 정수와 달리. M은 총 자릿수와 표시 폭을 모두 나타냅니다. 과학적 표기법 표현을 지원합니다. 부동 소수점 숫자는 대략적인 값을 나타냅니다.

  • c. 고정 소수점 - 가변 길이 소수점(M, D) M은 총 자릿수를, D는 소수점 이하 자릿수를 나타냅니다. 정확한 값을 저장하며 부동 소수점 숫자의 반올림과 달리 데이터에 변화가 발생하지 않습니다. 부동소수점 숫자를 문자열로 변환하여 저장하며, 9자리마다 4바이트로 저장됩니다.

  1. 문자열 유형
  • a. 문자, 바이트 문자 고정 길이 문자열, 빠르지만 공간 낭비 바이트 문자 가변 길이 문자열, 느리지만 공간 절약 M은 저장할 수 있는 최대 길이를 나타내며 바이트가 아닌 문자 수입니다. 인코딩에 따라 공간을 차지하는 양이 다릅니다. char, 인코딩에 관계없이 최대 255자. varchar, 인코딩과 관련된 최대 65535자. 유효한 레코드의 최대 크기는 65535바이트를 초과할 수 없습니다. UTF8 최대 21844자, GBK 최대 32766자, LATIN1 최대 65532자 varchar는 가변 길이이므로 저장 공간을 사용하여 길이를 저장해야 하며, 데이터가 255바이트 미만인 경우 1바이트가 사용되며 그 반대의 경우 2바이트를 저장해야 합니다. varchar의 최대 유효 길이는 최대 행 크기와 사용되는 문자 집합에 따라 결정됩니다. 최대 유효 길이는 65532바이트인데, 이는 varchar 저장 문자열에서 첫 바이트가 비어 있고 데이터가 없으며 문자열의 길이를 저장하는 데 2바이트가 필요하므로 유효 길이는 64432-1-2 = 65532바이트가 되기 때문입니다. 예: 테이블이 다음과 같이 정의된 경우 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; N의 최대값은 무엇인가요? Answer:/3

  1. 날짜/시간 유형 PHP는 타임스탬프 형식을 쉽게 지정할 수 있으므로 일반적으로 정수를 사용하여 타임스탬프를 저장합니다. 날짜 8바이트 날짜 및 시간 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 날짜 3바이트 날짜 1000-01-01 ~ 9999-12-31 타임스탬프 4바이트 타임스탬프 19700101000000 ~ 2038-01-19 03:14:. 07 시간 3바이트 시간 -838:59:59 ~ 838:59:59 연도 1바이트 연도 1901 - 5125

날짜 YYYY-MM-DD hh:mm:ss 타임스탬프 YYYY-MM-DD hh:mm:ss YYYYMMDDhhmmss YYYYMMDDhhmmss YYYYMMDDhhmmss YYYY-MM-DD YYYY-YYY-MM-DD 날짜 YYYY-YYY-YYY-YYYY-YYYY-MM-DD YYYYMMDD YYMMDD YYYYMMDD YYMMDD 시간 hh:mm:ss hhmmss hhmmss 연도 YYYY YYYY YYYY YYYYYY

  1. 열거형 및 컬렉션
  • 열거형 열거형(val1, val2, val3...) 알려진 값 중 단일 선택. 최대값은 65535입니다. 열거형 값은 2바이트 정수로 저장됩니다. 각 열거형 값은 저장되는 순서대로 1부터 하나씩 증가합니다. 열거형 값은 문자열로 저장되지만 정수로 저장됩니다. NULL 값의 인덱스는 NULL입니다. 빈 문자열 오류 값의 인덱스는 0입니다.

  • set set(VAL1, VAL2, VAL3...) 테이블 탭 생성 ); 탭 값에 삽입 ; 최대 64개의 서로 다른 멤버. 총 8바이트의 bigint로 저장됩니다. 비트 연산 형태를 취합니다. 테이블이 생성되면 SET 멤버 값의 후행 공백은 자동으로 제거됩니다.

유형 선택

  • 열거형 및 컬렉션
  1. 기능적 이행
  2. 효율적인 처리를 위한 최소한의 저장 공간
  3. PHP
  • 함수 만족
  1. 저장소 전용, 사용 가능한 문자열
  2. 계산, 조회 등을 위해 4바이트 부호 없는 정수, 즉 부호 없는 값으로 저장할 수 있습니다.
    1. PHP 함수 변환 ip2long은 정수로 변환할 수 있지만 기호를 전달하는 데 문제가 있습니다. 부호 없는 정수로 포맷해야 합니다. sprintf 함수를 사용하여 문자열의 형식을 sprintf("%u", ip2long('192.168.3.134'))로 지정한 다음 long2ip를 사용하여 정수를 다시 IP 문자열로 변환합니다.
    2. MySQL 함수 convert INET_ATON('127.0.0.1') IP를 정수로 변환 INET_NTOA(2130706433) 정수를 IP로 변환합니다.

열 속성

  1. PRIMARY 기본 키

    • 레코드를 고유하게 식별하고 기본 키로 사용할 수 있는 필드입니다.
    • 테이블에는 기본 키가 하나만 있을 수 있습니다.
    • 기본 키는 고유합니다.
    • 기본 키 필드의 값은 null일 수 없습니다.
    • 기본 키는 여러 필드로 함께 구성될 수 있습니다. 이 경우 필드 목록 뒤에 선언된 메서드는 필수입니다. 예: 테이블 만들기 tab , 나이 int, 기본 키 );
  2. 고유 고유 인덱스를 사용하면 필드 값도 복제할 수 없습니다.

  3. NULL 제약 조건 null은 데이터 유형이 아니라 열의 속성입니다. 현재 열이 아무 의미도 없는 null이 될 수 있는지 여부를 나타냅니다. null, 비어 있을 수 있습니다. 기본값입니다. null, 널이 될 수 없음. 탭 값에 삽입 ; - 필드가 널이 허용되는지 여부에 따라 첫 번째 필드의 값이 널로 설정됨을 의미합니다.

  4. 자동 증가 제약 조건 자동 증가는 인덱싱되어야 합니다. 자동 증가에는 하나의 필드만 존재할 수 있습니다. 기본값은 1부터 시작하는 자동 증가입니다. 이 값은 테이블 속성 auto_increment = x로 설정하거나 테이블 tbl auto_increment = x를 변경하여 설정할 수 있습니다;

  5. 댓글 댓글 예: 테이블 탭 댓글 '댓글 내용'을 작성합니다;

  6. 외래 키가 존재하는 테이블을 슬레이브 테이블이라고 하고, 외래 키가 가리키는 테이블을 마스터 테이블이라고 합니다.

    역할: 데이터 일관성, 무결성 유지, 외래 키 테이블에 저장된 데이터를 제어하는 것이 주된 목적입니다.

    구문: 외래 키 [마스터 테이블 레코드 삭제 시 동작] [마스터 테이블 레코드 업데이트 시 동작] 이 때, 슬레이브 테이블의 외래 키가 마스터 테이블의 기존 값으로 제한되어야 한다는 것을 감지해야 합니다. 외래 키가 연결되지 않은 경우 외래 키 열이 null이 아닌 경우 외래 키를 null로 설정할 수 있습니다.

    마스터 테이블 레코드가 변경되거나 업데이트될 때 작업을 지정할 수 없으면 현재 마스터 테이블의 작업이 거부됩니다. 업데이트 또는 삭제 시 지정한 경우: 삭제 또는 업데이트 시 다음 작업을 사용할 수 있습니다:

    1. 계단식 작업인 캐스케이드입니다. 마스터 테이블 데이터가 업데이트되고 슬레이브 테이블이 업데이트됩니다. 마스터 테이블 레코드가 삭제되고 슬레이브 테이블의 관련 레코드도 삭제됩니다.
    2. 마스터 테이블 데이터가 업데이트되고 슬레이브 테이블의 외래 키가 null로 설정됩니다. 마스터 테이블 레코드가 삭제되고 슬레이브 테이블의 관련 레코드 외래 키가 null로 설정됩니다. 단, 외래 키 열이 not null 속성에 의해 제약되지 않아야 한다는 점에 유의하세요.
    3. 제한하여 상위 테이블 삭제 및 업데이트를 거부합니다.

    외래 키는 InnoDB 스토리지 엔진에서만 지원된다는 점에 유의하세요. 다른 엔진은 지원되지 않습니다.

테이블 작성 사양

- Normal Format, NF
 - 각 테이블에는 하나의 엔티티 정보가 있습니다.
 - 각각 기본 키로 ID 필드가 있습니다.
 - ID +  
- 1NF, 첫 번째 패러다임
 필드를 더 이상 분할할 수 없습니다. 첫 번째 패러다임이 충족됩니다.
- 2NF, 두 번째 패러다임
 첫 번째 패러다임을 충족하는 동안 부분 종속성이 발생할 수 없습니다.
 일치하는 기본 키를 제거하면 부분 종속성을 피할 수 있습니다. 단일 열 키워드를 추가합니다.
- 3NF, 세 번째 패러다임
 두 번째 패러다임을 충족하는 동안에는 종속성을 전달할 수 없습니다.
 한 필드가 기본 키에 종속되어 있고 해당 필드에 종속된 다른 필드가 있습니다. 이것은 전달 종속성입니다.
 하나의 테이블에 하나의 엔티티 정보에서 데이터를 구현합니다.

SELECT

a. select_expr - 모든 필드에 *를 사용할 수 있습니다. SELECT * FROM TB; - 표현식을 사용할 수 있습니다. SELECT STU, 29+25, NOW() FROM TB; - 각 열에 별칭을 사용할 수 있습니다. 열 식별을 간소화하고 여러 열 식별자의 중복을 피하는 데 이상적입니다. - as 키워드를 사용하거나 as를 생략합니다. select stu+10 as add10 from tb; - 표현식을 사용할 수 있습니다.

c. WHERE 절 - 가져온 데이터 소스에서 필터링합니다. - 정수 1은 참을 나타내고 0은 거짓을 나타냅니다. - 표현식은 연산자와 피연산자로 구성됩니다. - 연산자: 변수, 값, 함수 반환값 - 연산자: =, <=>, <>, ! =, <=, <, >=, >, ! , &&, ||, in null, like, in, between, is , and, or, not, xor is/is not plus ture/false/known, 값의 참 여부를 확인하는 <=>은 <>과 동일하며, <=>는 null 비교에 사용할 수 있습니다.

d. GROUP BY 절, 그룹화 절 GROUP BY 필드/별칭 [정렬 기준] 그룹화 후 정렬이 수행됩니다. 오름차순: ASC, 내림차순: DESC.

 [함수 합산]GROUP BY와 함께 사용합니다:
count NULL이 아닌 고유 값의 개수 count(*)\카운트
sum  
max 최대값 찾기
min 최소값 찾기
avg 평균 구하기
group_concat 그룹 조인에서 NULL이 아닌 값이 포함된 문자열 결과를 반환합니다. 그룹 내 문자열 연결.

조건절인 HAVING 절은 where와 기능 및 용도는 동일하지만 실행 시점이 다릅니다. where는 테스트 데이터의 시작 부분인 원본 데이터 필터링에서 실행됩니다. having은 결과를 다시 필터링합니다. having 필드는 쿼리여야 하며, where 필드는 데이터 테이블에 존재해야 합니다. where는 필드에 별칭을 사용할 수 없지만 having은 사용할 수 있습니다. 이는 WHERE 코드가 실행될 당시 열 값이 결정되지 않았을 수 있기 때문입니다. WHERE는 합계 함수를 사용할 수 없습니다. SQL 표준에 따르면 HAVING은 GROUP BY 절의 열 또는 집계 함수에 사용된 열을 참조해야 합니다.

f. ORDER BY 절, 정렬 필드/별칭 정렬 기준 [,정렬 필드/별칭 정렬 기준]으로 정렬 절 순서... 오름차순: ASC, 내림차순: DESC 여러 필드의 정렬을 지원합니다.

g. LIMIT 절, 결과 수 제한 절 처리된 결과의 수만 제한합니다. 처리된 결과는 인덱스 0부터 시작하여 레코드가 나타나는 순서대로 하나의 집합으로 간주합니다. limit 시작 위치, 항목 수 인덱스 0에서 시작하려면 첫 번째 매개 변수를 생략합니다. limit 항목 가져오기

h. 구분, 모두 옵션 구분 중복 레코드 제거 기본값은 모두, 모든 레코드입니다.

UNION

여러 SELECT 쿼리의 결과를 단일 결과 집합으로 결합합니다.
SELECT ... UNION [ALL|DISTINCT] SELECT ...
기본 DISTINCT 메서드, 즉 반환된 모든 행이 고유합니다.
각 SELECT 쿼리를 괄호로 묶는 것이 좋습니다.
ORDER BY 정렬할 때. 결합을 위해 LIMIT를 추가해야 합니다.
각 SELECT 쿼리에는 동일한 수의 필드가 필요합니다.
각 선택 쿼리의 필드 목록은 결과의 필드 이름이 첫 번째 선택 문을 기반으로 하므로 일관성이 있어야 합니다.

하위 쿼리

- 하위 쿼리는 괄호로 묶어야 합니다.
  • 에서부터 테이블의 요구 사항이 뒤따르는 경우 하위 쿼리 결과에 별칭을 지정해야 합니다.
    • 각 쿼리 내의 조건을 단순화합니다.
    • FROM 유형은 원래 테이블의 잠금을 해제하는 데 사용할 수 있는 임시 테이블을 결과로 생성하는 데 필요합니다.
    • 하위 쿼리는 테이블을 반환합니다. 테이블 유형 하위 쿼리. SELECT * FROM AS SUBFrom where ID>1;
  • where type
    • 하위 쿼리는 값인 스칼라 하위 쿼리를 반환합니다.

    • 하위 쿼리에 별칭을 지정할 필요가 없습니다.

    • 열 하위 쿼리 하위 쿼리가 열을 반환하는 경우. 쿼리 존재 및 존재하지 않음 조건을 완료하려면 in 또는 not in을 사용합니다. 하위 쿼리가 데이터를 반환하는 경우 1 또는 0을 반환합니다. 판단 조건에 자주 사용됩니다. SELECT COLUMN1 FROM T1 WHERE EXISTS ;

    • 행 서브쿼리 쿼리 조건은 행입니다. SELECT * FROM T1 WHERE IN ; 행 생성자: 또는 ROW(col1, col2, ...) 행 생성자는 종종 두 개 이상의 열을 반환하는 하위 쿼리와 비교하는 데 사용됩니다.

    • 특수 연산자 ! = all()은 not in = some()과 같고, any는 some의 별칭입니다. = some()은 not in과 같지 않으며, 둘 중 하나와 같지 않습니다. all, some은 다른 연산자와 함께 사용할 수 있습니다.

조인 쿼리는 여러 테이블의 필드를 조인하며 조인 조건을 지정할 수 있습니다.

  • 내부 연결
    • 기본값은 내부 연결이며 내부 연결은 생략할 수 있습니다.

    • 데이터가 존재하는 경우에만 연결을 전송할 수 있습니다. 즉, 연결 결과에 빈 줄이 표시될 수 없습니다. 켜짐 연결 조건을 나타냅니다. 조건 표현식은 where와 유사합니다. 조건을 생략하거나 where를 사용하여 연결 조건을 표현할 수도 있습니다. using도 있지만 동일한 필드 이름이 필요합니다. using(필드명)

  • 외부 연결
    • 데이터가 존재하지 않는 경우 조인 결과에도 데이터가 표시됩니다.
    • 왼쪽 외부 조인 왼쪽 조인 데이터가 존재하지 않는 경우 왼쪽 테이블 레코드가 나타나고 오른쪽 테이블은 null로 채워집니다.
    • 오른쪽 외부 조인 오른쪽 조인 데이터가 존재하지 않는 경우 오른쪽 테이블 레코드가 나타나고 왼쪽 테이블은 채워지지 않습니다.

정보, 추가 정보에서 정보.id, 정보.이름, 정보.stu_num, 추가_정보.취미, 추가_정보.성별을 선택합니다. 여기서 정보.stu_num = 추가_정보.stu_id입니다;

가져오기 내보내기 테이블 이름에서 *를 아웃파일 파일 주소 [제어 형식]으로 선택 *; - 테이블 데이터 내보내기 데이터 [로컬] 인파일 파일 주소 [바꾸기|무시]를 테이블 테이블 이름 [제어 형식]으로 로드; - 데이터 가져오기 생성된 데이터의 기본 구분 기호는 탭 로컬입니다. 지정하지 않으면 데이터 파일이 서버에 있어야 합니다. 대체 및 무시 키워드는 기존 고유 키 레코드의 중복 처리를 제어합니다.

INSERT

select 문으로 얻은 데이터는 insert를 사용하여 삽입할 수 있습니다.

값() 괄호 안에 열 순서대로 표시되는 모든 필드의 값을 제공해야 하는 열 지정은 생략할 수 있습니다. 또는 SET 구문을 사용할 수 있습니다. INSERT INTO tbl_name SET field=value,... ;

를 사용하여 한 번에 여러 값을 사용할 수 있습니다;

쿼리 결과를 삽입할 값으로 전달할 수 있습니다. INSERT INTO tbl_name SELECT ... ;

DELETE DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]

조건별 삭제.

삭제할 최대 레코드 수를 지정합니다.

정렬하여 삭제할 수 있습니다. 정렬 기준 + 제한

유사한 조인 구문을 사용하여 여러 테이블 삭제를 지원합니다. 에서 삭제하려면 테이블 조인 작업 조건을 사용하여 여러 테이블 1, 2에서 데이터를 삭제해야 합니다.

TRUNCATE

TRUNCATE [TABLE] tbl_name 데이터 비우기 테이블 재구성 삭제

차이점: 1, 잘라내기는 테이블을 삭제한 다음 생성하는 것이고, 삭제는 항목별로 삭제하는 것이고, 잘라내기는 자동 증가 값을 재설정하는 것입니다. 3, 잘라내기는 삭제된 항목 수를 알 수 없지만 삭제는 알 수 있습니다. 4, 잘라내기는 분할된 테이블에서 사용할 때 파티션을 유지합니다.

백업 및 복원

백업은 테이블의 데이터와 함께 데이터 구조를 저장합니다. 이 작업은 mysqldump 명령을 사용하여 수행합니다.

  • 내보내기 mysqldump [옵션] db_name [테이블] mysqldump [옵션] --database DB1 [DB2 DB3...] mysqldump [옵션] -all-database
  1. 테이블 내보내기 mysqldump -u 사용자 이름 -p 비밀번호 라이브러리 이름 테이블 이름 > 파일 이름
  2. 여러 테이블 내보내기 mysqldump -u 사용자 이름 -p 비밀번호 라이브러리 이름 table1 table2 table3 > 파일 이름
  3. 모든 테이블 내보내기 mysqldump -u 사용자 이름 -p 비밀번호 라이브러리 > 파일 이름

Can -w 전달 가능 WHERE 조건

  • 가져오기(데이터)
  1. mysql에 로그인한 상태: 소스 백업 파일
  2. 로그인하지 않고 mysql -u 사용자 이름 -p 비밀번호 라이브러리 이름 <백업 파일

View

보기란: 보기는 쿼리에 의해 내용이 정의되는 가상의 테이블입니다. 실제 테이블과 마찬가지로 뷰에는 이름이 있는 일련의 열과 행으로 이루어진 데이터가 포함되어 있습니다. 하지만 뷰는 데이터베이스에 저장된 데이터 값 집합으로 존재하지 않습니다. 행 및 열 데이터는 뷰를 자유롭게 정의하는 쿼리가 참조하는 테이블에서 가져오며 뷰가 참조될 때 동적으로 생성됩니다. 뷰에 테이블 구조 파일은 있지만 데이터 파일은 없습니다. 기초 테이블에 대한 참조가 있는 경우 뷰의 역할은 필터링과 유사합니다. 뷰를 정의하는 필터는 현재 또는 다른 데이터베이스의 하나 이상의 테이블 또는 다른 뷰에서 가져올 수 있습니다. 보기를 통한 쿼리에는 제한이 없으며 보기를 통해 데이터를 수정하는 데에도 제한이 거의 없습니다. 보기는 데이터베이스 쿼리 SQL 문에 저장되며, 주로 보안상의 이유로 보기는 사회보장기금 테이블과 같은 일부 데이터를 숨길 수 있으며 보기를 사용하여 이름, 주소만 표시하고 사회보장번호와 급여 수 등은 표시하지 않을 수 있으며, 다른 이유는 복잡한 쿼리를 쉽게 이해하고 사용할 수 있도록 하기 위한 것입니다.

  • CREATE VIEW CREATE [또는 REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [] AS select_statement

    • 뷰 이름은 고유해야 하며 동시에 테이블과 함께 이름을 바꿀 수 없습니다.
    • 뷰에서 select 문으로 쿼리된 열 이름을 사용하거나 해당 열 이름을 직접 지정할 수 있습니다.
    • 뷰에서 실행되는 알고리즘은 ALGORITHM을 통해 지정할 수 있습니다.
    • column_list가 있는 경우 이 값은 SELECT 문에서 검색한 열 수와 같아야 합니다.
  • 뷰 구조 표시 뷰 생성 뷰 뷰_이름

  • 보기 삭제

    • 뷰를 삭제한 후에도 데이터는 그대로 유지됩니다.
    • 여러 뷰를 동시에 삭제할 수 있습니다. 보기 삭제 [있는 경우] 보기_이름 ...
  • 뷰 구조 수정

    • 뷰에 대한 모든 업데이트가 테이블에 매핑되는 것은 아니므로 일반적으로 뷰는 수정되지 않습니다. ALTER VIEW view_name [] AS select_statement
  • 역할 보기

    1. 비즈니스 로직 간소화
    2. 클라이언트에서 실제 테이블 구조 숨기기
  • 뷰 알고리즘 MERGE 병합 뷰의 쿼리 문을 병합하며, 실행 전에 외부 쿼리를 병합해야 합니다! TEMPTABLE 임시 테이블 뷰가 실행된 후 임시 테이블을 만든 다음 외부 쿼리를 수행합니다! 미정의 미정의는 MySQL이 자율적으로 적절한 알고리즘을 선택한다는 의미입니다.

트랜잭션

트랜잭션은 논리적 연산 집합으로, 연산 집합을 구성하는 개별 단위는 모두 성공하거나 모두 실패합니다. - 연속된 SQL의 일괄 성공 또는 일괄 실행 취소가 지원됩니다. - 트랜잭션은 데이터 야간 학습 측면에서 데이터베이스의 특징입니다. - 자동 커밋 기능을 지원하는 InnoDB 또는 BDB 스토리지 엔진을 활용해야 합니다. - InnoDB는 트랜잭션에 안전한 엔진으로 알려져 있습니다.

  • 트랜잭션이 열리면 실행된 모든 SQL 문은 현재 트랜잭션 내의 SQL 문으로 간주됩니다.

  • 트랜잭션 커밋 커밋.

  • 트랜잭션 롤백 롤백; 작업의 일부에 문제가 발생한 경우 트랜잭션을 열기 이전으로 매핑합니다.

  • 거래의 특성

    1. 원자성 트랜잭션은 트랜잭션의 모든 작업이 수행되거나 수행되지 않는 분할할 수 없는 작업 단위입니다.
    2. 일관성 트랜잭션 전후의 데이터 무결성은 일관성이 있어야 합니다.
      • 외부 데이터는 트랜잭션의 시작과 끝에서 일관성을 유지합니다.
      • 트랜잭션 전체에 걸쳐 작업이 일관되게 진행됨
    3. 격리 여러 사용자가 동시에 데이터베이스에 액세스하는 경우 한 사용자의 트랜잭션이 다른 사용자의 트랜잭션에 의해 간섭을 받을 수 없으며, 여러 개의 동시 트랜잭션 간의 데이터는 서로 격리되어야 합니다.
    4. 지속성 트랜잭션이 커밋되면 데이터베이스의 데이터에 대한 변경 사항은 영구적으로 유지됩니다.
  • 트랜잭션 구현

    1. 트랜잭션에서 지원하는 테이블 유형이 필요합니다.
    2. 일련의 관련 작업을 수행하기 전에 트랜잭션을 엽니다.
    3. 전체 작업 세트가 완료되고 모두 성공하면 커밋되며, 실패가 발생하여 롤백을 선택하면 트랜잭션이 시작된 백업 지점으로 돌아갑니다.
  • 트랜잭션은 InnoDB의 자동 커밋 기능을 사용하여 수행됩니다. 일반적인 MySQL 문을 실행하면 현재 데이터 커밋 작업이 다른 클라이언트에 표시됩니다. 트랜잭션은 "자동 커밋" 메커니즘을 일시적으로 해제하는 것으로, 영구적인 데이터 작업을 커밋하려면 커밋해야 합니다.

  • 다음 사항에 유의하십시오.

    1. 데이터 정의 언어 문은 데이터베이스를 생성하거나 취소하는 문, 테이블 또는 스토어에 대한 서브루틴을 생성, 취소 또는 변경하는 문과 같이 롤백할 수 없습니다.
    2. 트랜잭션은 중첩할 수 없습니다.
  • 세이브포인트 세이브포인트 세이브포인트 이름 - 트랜잭션 세이브포인트 설정 세이브포인트로 롤백 세이브포인트 이름 - 세이브포인트로 롤백 릴리즈 세이브포인트 세이브포인트 이름 - 세이브포인트를 삭제합니다.

  • InnoDB 자동 커밋 기능 설정 자동 커밋 = 0|1, 0은 자동 커밋이 꺼짐을 의미하고, 1은 자동 커밋이 켜짐을 의미합니다.

    • 닫히면 정상 작업의 결과도 다른 클라이언트에게 표시되지 않으며 데이터 작업을 지속하려면 커밋을 커밋해야 합니다.
    • 자동 커밋을 해제하여 트랜잭션을 켤 수도 있습니다. 그러나 자동 커밋 설정은 트랜잭션 시작과 달리 다음에 설정을 다시 변경할 때까지 서버 설정을 영구적으로 변경합니다. 트랜잭션 시작은 트랜잭션이 켜지기 전의 상태를 기록하며, 트랜잭션이 커밋되거나 롤백되면 다시 켜야 합니다.

잠금 테이블

테이블 잠금은 다른 클라이언트의 부적절한 읽기 및 쓰기를 방지하기 위해서만 사용됩니다. MyISAM은 테이블 잠금을 지원하고, InnoDB는 행 잠금을 지원합니다.

  • 테이블 잠금 잠금 tbl_name [별칭] [AS 별칭]
  • 잠금 해제 테이블 잠금 해제

Trigger

트리거는 해당 테이블에서 특정 이벤트가 발생할 때 활성화되는 테이블과 연결된 명명된 데이터베이스 개체입니다.
듣기: 레코드 추가, 수정, 삭제.
  • 트리거 생성하기 CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt 파라미터: trigger_time은 트리거가 동작한 시간입니다. 트리거가 트리거를 활성화하는 문 이후에 트리거되는지 또는 그 이후에 트리거되는지를 나타내기 위해 이전 또는 이후가 될 수 있습니다. 트리거를 활성화하는 문 유형을 지정합니다. INSERT: 테이블에 새 행이 삽입되면 트리거를 활성화합니다. UPDATE: 행이 변경되면 트리거를 활성화합니다. DELETE: 테이블에서 행이 삭제되면 트리거를 활성화합니다. tbl_name: 수신 중인 테이블로, 영구 테이블이어야 하며 TEMPORARY 테이블이나 뷰와 연결되어 있지 않아야 합니다. 또는 뷰와 연결되어서는 안 됩니다. trigger_stmt: 트리거가 활성화될 때 실행할 문입니다. 여러 문을 실행하려면 BEGIN.... END 복합문 구조를 사용합니다.

  • 삭제 트리거 삭제 [스키마_이름.]트리거_이름

이전 및 새 데이터 대신 이전 및 "새" 데이터 업데이트 작업, 업데이트 전은 이전, 업데이트 후는 "새"를 사용할 수 있습니다. 삭제 작업, 이전 작업만. 추가 작업, "새" 작업만.

  • 다음 사항에 유의하십시오.

    1. 트리거 동작 시간과 이벤트가 동일한 테이블에는 두 개의 트리거가 있을 수 없습니다.
  • LOCK TABLES tbl_name [AS alias]
  • 분기 문 if 조건 다음 실행문 elseif 조건 다음 실행문 else 실행문 end if;

  • 가장 바깥쪽 문 종결자 구분 기호 수정 사용자 지정 종결자 SQL 문 사용자 지정 종결자

구분 기호 ; - 원래 세미콜론으로 다시 변경합니다.

  • 문 블록 래핑 시작 문 블록 종료

  • 특별 구현

SQL프로그래밍

-// 로컬 변수

  • 변수 선언 선언 var_name[,...] type [기본값] 이 문은 지역 변수를 선언하는 데 사용됩니다. 변수의 기본값을 제공하려면 기본 절을 포함하세요. 값은 표현식으로 지정할 수 있으며 상수일 필요는 없습니다. 기본 절이 없으면 초기 값은 null입니다.

  • 할당 집합 및 선택 문을 사용하여 변수에 값을 할당합니다.

    • 참고: 함수 내에서 전역 변수를 사용할 수 있습니다.

-// 글로벌 변수

  • 값 정의 및 할당 set 문은 변수에 값을 정의하고 할당합니다. set @var = value; select into 문을 사용하여 변수를 초기화하고 값을 할당할 수도 있습니다. 이 경우 select 문은 하나의 행만 반환해야 하지만 둘 이상의 필드가 될 수 있으므로 동시에 둘 이상의 변수에 값을 할당해야 하며, 변수 수는 쿼리의 열 수와 같아야 합니다. 할당 문은 select로 실행되는 표현식으로 생각할 수도 있습니다. 가 관계 연산자로 취급되지 않도록 하려면 대신 :=를 사용하세요. SELECT @var:=20; SELECT @v1:=ID, @v2=name FROM T1 LIMIT 1; SELECT * FROM TBL_NAME WHERE @var:=30;
  • 사용자 정의 변수 이름 선택 문에서 사용자 정의 변수와 시스템 식별자 간의 충돌을 피하기 위해 사용자 정의 변수는 변수 이름 앞에 @ 기호로 시작합니다. @var=10;

    • 변수는 정의된 후 전체 세션 주기 동안 유효합니다.

-// 제어 구조

  • if 문 if search_condition then statement_list

    [elseif search_condition then statement_list] ... [else statement_list] end if;

  • CASE 문 CASE 값 WHEN [비교-값] THEN 결과 [WHEN [비교-값] THEN 결과 ...] [ELSE 결과] END

  • 동안 루프 [시작_레이블:] 동안 검색_조건 do 문_목록 끝 동안 [끝_레이블];

  • 동안 루프를 루프 내에서 일찍 종료해야 하는 경우 레이블을 사용해야 하며, 쌍으로 표시해야 합니다.

    • 루프 종료 전체 루프 종료 현재 루프 종료 반복 레이블을 종료하여 종료할 루프를 결정합니다.

-// 기본 제공 기능

  • 집계 함수 count() sum(); max(); min(); avg(); group_concat()

  • 기타 일반 함수 md5(); default().

-// 저장 함수, 사용자 정의 함수

  • 신규 CREATE FUNCTION function_name RETURNS 반환값 유형 함수 본문

    • 함수 이름은 법적 식별자이어야 하며 기존 키워드와 충돌하지 않아야 합니다.
    • 함수는 특정 데이터베이스에 속해야 하며, 그렇지 않으면 현재 데이터베이스에 속하는 함수를 실행하기 위해 db_name.funciton_name 형식을 사용할 수 있습니다.
    • 매개변수 부분은 '매개변수 이름'과 '매개변수 유형'으로 구성됩니다. 여러 개의 매개변수는 쉼표로 구분합니다.
    • 함수 본문은 사용 가능한 여러 mysql 문, 흐름 제어, 변수 선언 및 기타 문으로 구성됩니다.
    • 시작.... 끝 문 블록을 사용해야 합니다.
    • 반환 문이 있어야 합니다.
  • 삭제 함수 [만약 존재한다면] 함수_이름을 삭제합니다;

  • 'partten' 같은 함수 상태 표시하기 함수 만들기 함수_이름 표시하기 보기;

  • ALTER FUNCTION function_name 옵션 수정하기

-// 저장 프로시저, 사용자 정의 함수

  • 정의 저장 프로시저는 SQL로 구성된 데이터베이스에 저장되는 코드 조각입니다. 저장 프로시저는 일반적으로 등록, 수업료 결제, 주문 입력 등과 같은 비즈니스 로직을 완료하는 데 사용됩니다. 일반적으로 함수는 다른 프로시저에 대한 서비스로 간주되는 특정 함수에 초점을 맞추고 다른 문에서 해당 함수를 호출해야 하는 반면, 저장 프로시저는 호출 실행을 통해 자체적으로 실행되는 것이므로 다른 문에서 호출할 수 없습니다.

  • CREATE PROCEDURE sp_name 프로시저 본문을 생성합니다.

매개 변수 목록 : 함수의 매개 변수 목록과 다르며 매개 변수 유형 IN을 지정해야 함, 입력 유형 OUT을 의미하고 출력 유형 INOUT을 의미하며 혼합 유형을 의미합니다.

반환값이 없다는 점에 유의하세요.

저장 프로시저 저장 프로시저는 실행 가능한 코드의 모음입니다. 함수보다는 비즈니스 로직에 더 중점을 둡니다. 호출: 호출 프로시저 이름

  • 다음 사항에 유의하십시오.

  • 반환값이 없습니다.

  • 단독으로만 호출할 수 있으며 다른 문과 산재되어서는 안 됩니다.

  • 파라미터 IN|OUT|INOUT 파라미터 이름 데이터 유형 IN 입력: 호출 중 프로시저 본문의 내부 파라미터에 데이터를 입력 OUT 출력: 호출 중 프로시저 본문의 처리된 결과를 클라이언트에 반환 INOUT 입력/출력: 입력과 출력 모두 가능합니다.

  • 구문 CREATE PROCURE 프로세스 이름 BEGIN 프로세스 본문 END

사용자 및 권한 관리

  • 루트 비밀번호 재설정
  1. CREATE PROCEDURE sp_name

  2. [Linux] /usr/local/mysql/bin/safe_mysqld -skip-grant-tables & [Windows] mysqld -skip-grant-tables
  3. 반환 값이 없습니다.

  4. UPDATE user SET PASSWORD=PASSWORD("password") WHERE user = "root";
  5. 권한을 플러시합니다.

사용자 정보 테이블: mysql.user

  • 권한을 플러시합니다.
  • 사용자 추가 [비밀번호] 비밀번호로 식별되는 사용자 생성 사용자 사용자 이름
    • mysql 데이터베이스에 대한 글로벌 CREATE USER 권한이 있거나 INSERT 권한이 있어야 합니다.
    • 사용자를 만들 수만 있고 권한을 부여할 수는 없습니다.
    • 사용자 이름은 따옴표로 묶어야 합니다(예: 'user_name'@'192.168.1.1').
    • 비밀번호도 일반 숫자 비밀번호와 마찬가지로 따옴표가 필요합니다.
    • 비밀번호를 일반 텍스트로 지정하려면 PASSWORD 키워드를 무시하세요. PASSWORD() 함수가 반환하는 믹스인으로 비밀번호를 지정하려면 PASSWORD 키워드를 포함하세요.
  • 사용자 이름 바꾸기 RENAME USER old_user TO new_user
  • 비밀번호 설정 비밀번호 설정 = PASSWORD('비밀번호') - 현재 사용자의 비밀번호 설정 사용자 이름에 대한 비밀번호 설정 = PASSWORD('비밀번호') - 특정 사용자의 비밀번호 설정
  • 사용자 삭제 사용자 삭제 사용자 이름
  • 권한 보기 사용자 이름에 대한 그랜트 보기
    • 현재 사용자 권한 보기 SHOW GRANTS; 또는 현재_사용자에 대한 GRANTS 표시 또는 현재_사용자에 대한 GRANTS 표시().
  • 권한 수준
  • 부여 또는 취소를 사용하려면 부여 옵션 권한이 있어야 하며 부여 또는 취소하려는 권한에 대해 이 권한을 사용해야 합니다. 전역 수준: 전역 권한은 지정된 서버의 모든 데이터베이스에 적용되며, mysql.user GRANT ALL ON *. * 및 REVOKE ALL ON *. *는 전역 권한만 부여 및 취소합니다. 데이터베이스 수준: 데이터베이스 권한은 지정된 데이터베이스의 모든 대상에 적용되며, mysql.db, mysql.host GRANT ALL ON db_name.* 및 REVOKE ALL ON db_name.*은 데이터베이스 권한만 부여 및 취소합니다. 테이블 수준: 테이블 권한은 지정된 테이블의 모든 열에 적용됩니다. mysql.talbes_priv GRANT ALL ON db_name.tbl_name 및 REVOKE ALL ON db_name.tbl_name은 테이블 권한만 부여하고 취소합니다. 칼럼 계층 구조: 칼럼 권한은 지정된 테이블의 단일 칼럼에 적용됩니다. mysql.columns_priv REVOKE를 사용할 때는 권한이 부여된 칼럼과 동일한 칼럼을 지정해야 합니다.
  • 권한 목록
ALL [PRIVILEGES] - GRANT OPTION을 제외한 모든 단순 권한을 설정합니다.
ALTER - ALTER TABLE을 사용할 수 있습니다.
ALTER ROUTINE - 저장된 서브루틴 변경 또는 취소
CREATE - CREATE TABLE은 허용됩니다.
CREATE ROUTINE - 저장된 서브루틴 생성
CREATE TEMPORARY TABLES - 임시 테이블을 생성할 수 있습니다.
CREATE USER - 사용자 생성, 사용자 삭제, 사용자 이름 변경 및 모든 권한 취소가 허용됩니다.
CREATE VIEW - CREATE VIEW 허용
DELETE - DELETE 허용
DROP - DROP TABLE 허용
EXECUTE - 사용자가 저장된 서브루틴을 실행할 수 있도록 합니다.
FILE - SELECT 허용...INTO OUTFILE및 데이터 인파일 로드
INDEX - 인덱스 생성 및 인덱스 삭제가 허용됩니다.
INSERT - INSERT 허용
LOCK TABLES - SELECT 권한이 있는 테이블에 LOCK TABLES를 사용할 수 있습니다.
PROCESS - 전체 프로세스 목록 표시가 허용됩니다.
REFERENCES - 구현되지 않음
RELOAD - FLUSH 허용
REPLICATION CLIENT - 사용자가 슬레이브 또는 마스터 서버의 주소를 요청할 수 있습니다.
REPLICATION SLAVE - 복제된 슬레이브 서버의 경우
SELECT - SELECT 허용
SHOW DATABASES - 모든 데이터베이스 표시
SHOW VIEW - SHOW CREATE VIEW가 허용됩니다.
SHUTDOWN - mysqladmin 종료 허용
SUPER - CHANGE MASTER, KILL, PURGE MASTER LOGS 및 SET GLOBAL 문, mysqladmin 디버그 명령의 사용을 허용하며 최대치에 도달한 경우에도 연결할 수 있습니다._connections 
UPDATE - UPDATE 허용
USAGE - "권한 없음”SELECT a,b
GRANT OPTION - 권한 부여 허용
  • 사용자 삭제 DROP USER
  • 기타

    1. 각 라이브러리 디렉터리에는 현재 데이터베이스를 보관하는 옵션 파일 db.opt가 존재합니다.
    1. 댓글: 한 줄 댓글 # 댓글 내용 여러 줄 댓글 댓글 내용 한 줄 댓글 - 댓글 내용
    1. 패턴 와일드카드: _ 단일 문자 % 임의의 문자 수, 0자도 가능 작은따옴표는 이스케이프 처리해야 함 '
    1. CMD 명령줄 문 종결자는 표시된 결과에만 영향을 주는 ";", "\G", "\g"가 될 수 있습니다. 그 외에는 여전히 세미콜론으로 끝납니다. 구분 기호는 현재 대화 상자의 문 종결자를 수정합니다.
    1. SQL은 대소문자를 구분하지 않습니다.
    1. 기존 문 지우기: \c

출처:

Read next

프론트엔드 모노레포 대형 웨어하우스 권한 설계 사고와 구현

이 글에서는 프론트엔드 사일로 모노레포에 대해 설명하기 위해 실무 과정에서 몇 가지 문제점을 발견하고 점차적으로 베스트 프랙티스를 구체화했습니다.

Oct 21, 2025 · 13 min read