사용자 도구

사이트 도구


database:mysql:basic

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
database:mysql:basic [2018/07/31 14:27]
kwon37xi
database:mysql:basic [2023/10/31 09:49] (현재)
kwon37xi [테이블/컬럼 정보보기]
줄 1: 줄 1:
 ====== MySQL 기본 명령어 정리 ====== ====== MySQL 기본 명령어 정리 ======
 +  * [[database:mysql:datatype|MySQL Data Type]]
 MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지... MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지...
  
줄 19: 줄 19:
  
 외부 서버에서 접속이 불가하면 [[database:mysql:config|MySQL 설정]]에서 ''bind-address'' 항목을 살펴본다. 외부 서버에서 접속이 불가하면 [[database:mysql:config|MySQL 설정]]에서 ''bind-address'' 항목을 살펴본다.
 +
 +원격 서버 접속
 +<code sh>
 +# hostname:3306
 +mysql --protocol=tcp -h 'hostname' -P 3306 -u [username]  -p [database-name]
 +</code>
 +
 +===== SSL mode 오류 =====
 +  * ''ERROR 2026 (HY000): SSL connection error: error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol'' 오류 발생.
 +  * SSL 접속이 기본값으로 바뀌면서 SSL 설정이 안 된 서버 접속시 오류 발생 ''%%--%%ssl-mode=disabled'' 옵션 주면 일반 접속으로 됨.
 +  * [[https://serverfault.com/jobs?so_medium=StackOverflow&so_source=SiteNav|ssl - Cannot conect MySQL (error 2026) after upgrade to Ubuntu 20.04 - Server Fault]]
 +
 +혹은 ''my.cnf'' 에 다음 설정을 한다.
 +<code>
 +[client] 
 +ssl-mode=DISABLED
 +</code>
 +
 ===== 비밀번호 변경 ===== ===== 비밀번호 변경 =====
 MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다. MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.
줄 50: 줄 68:
  
 -- 권한 확인 'username'@'hostname' -- 권한 확인 'username'@'hostname'
-SHOW GRANTS FOR 'username'@'%' +SHOW GRANTS FOR user_name; 
 +SHOW GRANTS FOR 'username'@'%';
 </code> </code>
  
줄 63: 줄 82:
  
 -- 생성과 전체 권한 일괄 부여 -- 생성과 전체 권한 일괄 부여
-GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';+GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhostIDENTIFIED BY 'password';
 </code> </code>
  
줄 71: 줄 90:
  
 <code sql> <code sql>
-GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';+GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'%' IDENTIFIED BY 'password';
 </code> </code>
 위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다. 위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
줄 77: 줄 96:
 특정 권한만 주려면, 아래와 같은 형태로 권한을 나열한다. 특정 권한만 주려면, 아래와 같은 형태로 권한을 나열한다.
 <code sql> <code sql>
-GRANT INSERT, UPDATE, SELECT, DELETE,SHOW DATABASES, SHOW VIEW ON dbname.* TO username@'localhost' IDENTIFIED BY 'pwd';+GRANT INSERT, UPDATE, SELECT, DELETE,SHOW DATABASES, SHOW VIEW ON dbname.* TO 'username'@'localhost' IDENTIFIED BY 'pwd';
 </code> </code>
  
줄 110: 줄 129:
 mysql> CREATE DATABASE dbname; mysql> CREATE DATABASE dbname;
  
-mysql> CREATE DATABASE dbname ENGINE = INNODB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;+# 없으면 생성한다. 
 +mysql> CREATE DATABASE IF NOT EXISTS dbname; 
 + 
 +mysql> CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  
 # 현재 존재하는 데이터베이스 목록을 보여준다. # 현재 존재하는 데이터베이스 목록을 보여준다.
줄 178: 줄 200:
 Open tables: 1 Queries per second avg: 0.021 Open tables: 1 Queries per second avg: 0.021
 -------------- --------------
 +</code>
 +
 +===== 호스트별 커넥션 갯수 =====
 +<code sql>
 +select SUBSTRING_INDEX(HOST,':',1) as host, count(*) as cnt
 +from information_schema.processlist
 +group by SUBSTRING_INDEX(HOST,':',1);
 </code> </code>
  
줄 244: 줄 273:
 WHERE T2.key IS NULL; WHERE T2.key IS NULL;
 </code> </code>
 +
 +===== STRAIGHT_JOIN =====
 +  * MySQL 이 join 순서 최적화를 잘 못할경우 **무조건 왼쪽 테이블 먼저 조회하게** 강제하는 옵션
 +  * 인덱스 힌트와 비슷한 역할을 하므로, 가급적 사용하지 않는게 좋다.
 +<code sql>
 +-- C, A, B 순서로 데이터를 읽어서 조인한다.
 +SELECT STRAIGHT_JOIN * FROM C
 +LEFT JOIN A
 +ON C.A_ID = A.A_ID
 +LEFT JOIN B
 +ON C.B_ID = B.B_ID  
 +ORDER BY <가급적 C테이블의 컬럼>
 +</code>
 +  * [[https://marobiana.tistory.com/35|MySql] JOIN 속도를 빠르게! EXPLAIN, STRAIGHT_JOIN]]
  
 ===== mysql에서 쿼리 결과 세로로 보기 ===== ===== mysql에서 쿼리 결과 세로로 보기 =====
줄 284: 줄 327:
 SHOW TABLE STATUS like 'member%'; -- 테이블 이름 매칭 조건 SHOW TABLE STATUS like 'member%'; -- 테이블 이름 매칭 조건
  
--- 테이블의 컬럼 정보를 주석까지 포함해 보여준다.+-- 테이블의 컬럼 정보를 collation 등 아주 상세하게, 주석까지 포함해 보여준다. 
 SHOW FULL COLUMNS FROM [테이블이름]; SHOW FULL COLUMNS FROM [테이블이름];
 </code> </code>
줄 304: 줄 347:
  inner join `COLUMNS` c on t.TABLE_NAME = c.TABLE_NAME  inner join `COLUMNS` c on t.TABLE_NAME = c.TABLE_NAME
 order by t.TABLE_SCHEMA, t.TABLE_NAME order by t.TABLE_SCHEMA, t.TABLE_NAME
 +</code>
 +
 +===== Group By 의 비 Grouping 컬럼 정보 concat =====
 +  * [[https://ra2kstar.tistory.com/56|초보개발자 이야기. :: MySQL : 필드(Field)를 구분자로 묶어 출력하기 (CONCAT)]]
 +<code sql>
 +SELECT keyword, GROUP_CONCAT( syn SEPARATOR  '-' )  -- syn 컬럼들이 '-' 로 묶인 문자열로 나온다.
 +FROM syn_common
 +GROUP BY keyword
 +</code>
 +
 +===== GROPU BY, DISTINCT =====
 +  * ''GROUP BY''를 하면서, ''COUNT(DISTINCT colName)'' 을 하면, 동일 그룹에 속하는 ''colName'' 이 중복은 제거 상태로 카운팅 된다.
 +  * [[https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_count-distinct|GROUP BY functions - COUNT(DISTINCT)]]
 +
 +===== 전체 테이블의 행수 =====
 +  * 특정 데이터베이스 스키마에 있는 테이블들의 행수를 조회한다.
 +<code sql>
 +select TABLE_NAME, TABLE_ROWS
 +from information_schema.TABLES
 +where TABLE_SCHEMA='<schema_name>'
 +order by TABLE_ROWS desc;
 </code> </code>
  
database/mysql/basic.1533014862.txt.gz · 마지막으로 수정됨: 2018/07/31 14:27 저자 kwon37xi