mysql 70

[MySQL/MariaDB] 서버 원격 접속 허용

개요 AWS EC2에 MySQL 서버를 설치하고 다른 서버에 접속을 시도했다. EC2에 적용한 보안 그룹은 아웃바운드와 인바운드 모두 허용되어 있고 MySQL 서버도 실행 중이고, 접속을 시도한 계정은 모든 대역의 IP를 허용하고 있었다. 하지만 접속이 되지 않았다……. telnet 연결조차 되고 있지 않은 상태다. 원인 MySQL은 기본적으로 localhost의 연결만 수신하기 때문에 같은 서버 내에서만 접근할 수 있다. 원격 접속이 필요하다면 아래 두 가지 방법 중 하나를 선택할 수 있다. SSH 터널을 통한 접속 MySQL 서버가 원격 연결을 허용하도록 구성 이 글에서는 MySQL 서버가 원격 연결을 허용하도록 구성해보려고 한다. MySQL 서버 구성 변경 MySQL 서버와 클라이언트가 전용 네트워..

Database 2023.03.25

[MySQL] 데이터형 변환 (CAST/CONVERT)

개요 MySQL은 비교나 검색을 수행할 때 데이터 타입이 다른 경우 내부적으로 같은 타입으로 변환하여 처리한다. 또 사용자가 명시적으로 데이터 타입을 변환할 수 있도록 연산자와 함수를 제공하고 있다. CAST 인수로 전달받은 값을 지정한 데이터 타입으로 변환한다. 변환할 타입은 AS 절로 명시하며, 사용할 수 있는 타입은 BINARY, CHAR, DATE, DATETIME, TIME, DECIMAL, JSON (MySQL 5.7.8 이상), NCHAR, SIGNED [INTEGER], UNSIGNED [INTEGER]이다. CAST(expr AS type) 예시 ) SELECT 4 / 2, 4 / '2', 4 / CAST('2' AS UNSIGNED); # 실행 결과 | 4 / 2 | 4 / '2' | ..

Database 2023.02.09

[MySQL] 접속 명령어

개요 어째 매번 mysql-client로 접속할 때마다 접속 명령어를 검색하고 있는 것 같아 기록한다. mysql-client 설치 먼저 mysql-client 설치가 필요하다. OS에 따라 yum, apt 등으로 설치한다. # CentOS/Linux2 yum install mysql # Ubuntu apt install mysql-client 접속 mysql 명령어를 통해 MySQL 서버에 접속한다. mysql # -u, --user : MySQL 서버에 접속할 계정 # -p, --password : MySQL 서버에 접속할 때 사용할 비밀번호. 지정하지 않으면 대화형으로 입력한다. # -h, --host=name: 접속할 MySQL 서버 # -P, --port : MySQL 서버에 접속할 때 사용할 ..

Database 2022.12.12

[MySQL] JOIN/UNION을 사용한 FULL OUTER JOIN

개요 2022.06.12 - [MySQL] JOIN에서 정리했지만 MySQL에서는 FULL OUTER JOIN을 지원하지 않는다. 하지만 OUTER JOIN과 UNION을 이용하면 FULL OUTER JOIN을 할 수 있다. SQL SQL은 다음과 같은 구조이다. 2개 테이블 JOIN SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.id = t2.id UNION SELECT * FROM t1 RIGHT OUTER JOIN t2 ON t1.id = t2.id 3개 테이블 JOIN SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.id = t2.id LEFT OUTER JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 R..

Database 2022.12.08

[MySQL] SubQuery - 스칼라 서브 쿼리

SubQuery 서브 쿼리란 다른 쿼리 내에 포함되어 있는 SELECT 쿼리문을 의미한다. 서브쿼리를 포함하고 있는 쿼리를 외부 쿼리, 부모 쿼리, 메인 쿼리라고 부르고 서브 쿼리를 내부 쿼리, 자식 쿼리라고 부른다. 서브 쿼리는 괄호로 감싸서 표현된다. 예시 ) SELECT name, height FROM userTbl WHERE height > (SELECT height FROM userTbl WHERE name in ('김경호') ); 서브쿼리에서는 메인 쿼리의 컬럼을 사용할 수 있지만, 메인 쿼리에서는 서브 쿼리의 컬럼을 사용할 수 없다. 서브 쿼리 장점 쿼리를 구조화하여, 쿼리의 부분을 명확히 구분할 수 있다. 복잡한 JOIN, UNION과 같은 동작을 수행할 수 있는 방법을 제공한다. 복잡한 ..

Database 2022.12.07

[MySQL] DDL 조회

개요 데이터베이스에서 이미 생성되어 있는 테이블, View의 DDL을 추출하려고 한다. 방법을 정리해둔다. Table DDL 테이블은 CREATE TABLE 문으로 생성할 수 있다. CREATE TABLE 문 앞에 SHOW를 붙이면 해당 테이블의 DDL을 추출할 수 있다. SHOW CREATE TABLE -- 예시 SHOW CREATE TABLE docs; View DDL VIEW의 DDL도 같은 명령으로 확인할 수 있다. SHOW CREATE TABLE -- 예시 SHOW CREATE TABLE view_docs; 참고 문서 https://rangstv.tistory.com/6

Database 2022.11.30

[MySQL] 사용자 정의 변수 (@)

사용자 정의 변수 사용자가 직접 정의하는 변수로, 한 명령문에서 값을 저장하고 다른 명령문에서 참조할 수 있다. 이를 통해 한 명령문에서 다른 명령문으로 값을 전달할 수 있다. 사용자 정의 변수는 @var_name으로 작성하며, 변수 이름은 영문, 숫자, ., _, 등으로 구성될 수 있다. 그리고 대소문자를 구분하지 않는다. 또한 세션(session) 단위로 유지되기 때문에, 한 클라이언트에서 정의한 사용자 변수는 다른 클라이언트에서 사용할 수 없다. 선언 (SET) SET 문을 실행해서 사용자 졍의 변수를 선언할 수 있다. SET @var_name = VALUE # 예시 SET @var = 1; 선언 (SELECT) SELECT 문을 실행해서 사용자 정의 변수를 선언할 수도 있다. SET문을 실행할 때..

Database 2022.11.02

[MySQL] 날짜/시간 연산 (어제 날짜 구하기)

개요 MySQL에서 오늘의 날짜를 구하는 방법은 2022.06.15 - [MySQL] NOW, DATE_FORMAT에서 정리했었다. 그렇다면 어제 날짜는 어떻게 구할 수 있을까? DATE_ADD, DATE_SUB 함수를 사용하는 방법을 정리해둔다. DATE_ADD DATE_ADD() 함수는 날짜에 시간/날짜 간격을 추가한 날짜를 반환한다. DATE_ADD(date, INTERVAL value addunit) -- date : 변경할 날짜값. -- value : 더할 시간/날짜 간격. 음수/양수 모두 사용할 수 있다. -- addunit : 더할 시간/날짜 간격의 단위 addunit의 아래와 같은 값을 사용할 수 있다. MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QU..

Database 2022.10.25

[MySQL] Index 개념

Index 테이블에서 원하는 데이터를 빠르게 찾기 위해 사용하는 자료구조로, 검색에 자주 사용하는 필드 값으로 만들어진 테이블의 사본이라고 생각할 수 있다. 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터를 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 주로 책의 맨 처음 또는 마지막에 포함되어 있는 색인에 비유된다. MySQL은 데이터를 검색할 때 첫 번째 필드부터 차례대로 테이블 전체를 검색한다. 하지만 인덱스를 이용하면 인덱스에서 검색할 데이터가 어디에 있는지 확인하고, 데이터가 저장된 물리적 주소에서 데이터를 가져오는 방식으로 동작하기 때문에 빠른 검색을 기대할 수 있다. 사용 이유 인덱스의 가장 큰 특징은 데이터가 정렬되어 있다는 점이다. WHERE 절의 효율성 ORDE..

Database 2022.09.18

[MySQL] 중복 데이터 제외 전체 데이터 SELECT

개요 2022.09.13 - [MySQL] 중복 데이터 Select에서 확인한 중복 데이터는 제외하고, 데이터를 신규 테이블에 SELECT INSERT 하려고 한다. 중복 키 에러가 발생하는 경우 무시하는 INSERT IGNORE 구문도 사용할 수 있겠지만, 이 글에서는 중복 데이터를 제외한 전체 데이터를 SELECT 하는 방법을 사용하려고 한다. 예시 테이블 스키마 # 기존 테이블 스키마 CREATE TABLE IF NOT EXISTS `docs` ( `id` int(6) unsigned NOT NULL, `rev` int(3) unsigned NOT NULL, `content` varchar(200) NOT NULL ) DEFAULT CHARSET=utf8; # 신규 테이블 스키마 CREATE TAB..

Database 2022.09.14
1 2 3 4 5 6 7