mysql 54

[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

[MySQL] 중복 데이터 SELECT

개요 테이블 스키마 수정 작업을 위핸 SELECT INSERT를 하려고 했더니, 중복 키 에러가 발생하면서 데이터 복사가 불가능한 상황이다. 중복 데이터가 몇 개인지 확인해보도록 한다. 예시 테이블 스키마 # 기존 테이블 스키마 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 TABLE IF NOT EXISTS `docs` ( `id` int(6) unsigned NOT NULL, `rev` int(3) unsigned NOT NULL, `co..

Database 2022.09.13

[MySQL] 테이블 컬럼 확인

개요 2022.01.09 - [MySQL/MariaDB] 테이블 목록 확인 2022.03.12 - [MySQL] 테이블 용량 확인 에서 테이블 정보를 확인하는 방법을 몇 가지 정리했는데, 이 글에서는 테이블의 컬럼 정보를 확인하는 방법을 정리해둔다. SHOW 명령어 SHOW COLUMNS를 사용하면 컬럼의 이름, 데이터형, 기본값, NULL 허용 여부 등을 확인할 수 있다. SHOW COLUMNS FROM ; -- 예시 SHOW COLUMNS FROM docs; 코멘트 등의 추가정보가 필요한 경우, FULL 키워드를 추가하면 된다. SHOW FULL COLUMNS FROM ; -- 예시 SHOW FULL COLUMNS FROM docs; Query SELECT 문을 이용해서 컬럼 정보를 확인할 수도 있다..

Database 2022.09.02

[MySQL] SQL Error [1136] [21S01]: Column count doesn't match value count at row 1

Column count doesn't match value count at row 1 대개 테이블에 데이터를 추가할 때 발생하는 에러로, 추가할 데이터의 컬럼 수와 테이블의 컬럼 수가 다르거나 데이터 타입이 다를 때 발생한다. 예시 아래와 같은 스키마를 가진 docs 테이블이 있다고 하자. CREATE TABLE IF NOT EXISTS `docs` ( `id` int(6) unsigned NOT NULL, `rev` int(3) unsigned NOT NULL, `content` varchar(200) NOT NULL, PRIMARY KEY (`id`,`rev`) ) DEFAULT CHARSET=utf8; 이 테이블에 아래의 INSERT 명령을 실행하면, 에러가 발생하는 것을 알 수 있다. INSERT..

Database 2022.07.17

[MySQL] STR_TO_DATE - 문자열을 날짜형 데이터로 변환

STR_TO_DATE() 날짜, 시간 데이터를 지정한 포맷의 데이터로 변환할 때는 DATE_FORMAT 함수를 사용한다. 이와 반대로 특정 포맷의 데이터를 날짜, 시간 데이터로 변환할 때는 STR_TO_DATE 함수를 사용할 수 있다. 용법 STR_TO_DATE(string, format) # string : 변환할 물자열 # format : 사용할 형식 사용하는 포맷은 DATE_FORMAT 함수에서 사용하는 것과 동일해서 별도로 적어놓지는 않는다. 참고 : 2022.06.15 - [MySQL] NOW, DATE_FORMAT STR_TO_DATE 예시 자주 사용하는 형태를 몇 가지 정리한다. YYYY-MM-DD hh:mm:ss 사용한 포맷에 날짜와 시간 부분 모두 포함된 경우에는 DATETIME 형의 데..

Database 2022.07.15

[MySQL] 날짜형 데이터 기본값 설정

개요 데이블에 데이터를 추가할 때 값을 지정하지 않은 컬럼이 존재하는 경우, 기본적으로 NULL로 추가된다. 다만 필요시 데이터 추가 시 기본값을 지정할 수 있는데, DATE, DATETIME과 같은 날짜형 데이터를 사용하는 테이블에 데이터를 추가할 때 데이터 추가 시의 시각을 기본값으로 사용하고자 한다. DEFAULT 테이블 스키마를 정의할 때 DEFAULT 절을 이용해 컬럼의 명시적 또는 암시적 기본값을 설정할 수 있다. 간단히 DFEAULT 키워드 뒤에 기본값에 해당하는 값을 정의하는 방식으로 설정한다. CREATE TABLE t1 ( -- DEFAULT i INT DEFAULT -1, c VARCHAR(10) DEFAULT '', price DOUBLE(16,2) DEFAULT 0.00 ); My..

Database 2022.07.10

[MySQL] SELECT INSERT

SELECT INSERT 특정 테이블에서 데이터를 조회한 결과를 다른 테이블에 삽입하는 걸 간단히 SELECT INSERT라고 한다. 컬럼 추가와 같이 많은 데이터가 저장된 테이블 스키마를 변경해야 하는 경우, 스키마를 변경하는 것보다 TO_BE 스키마를 가진 테이블을 생성하여 데이터를 복사한 후, 테이블 이름을 변경하는 것이 좀더 수행 시간을 절약할 수 있기 때문에 종종 사용하게 된다. INSERT INTO SELECT 구문이라고도 말한다. 한 테이블의 모든 열 복사 INSERT INTO table2 SELECT * FROM table1 WHERE condition; 예시 ) 아래와 같은 데이터가 저장된 Customers 테이블을 Suppliers라는 테이블로 복사하려고 한다. 테이블 스키마는 다음과 ..

Database 2022.07.09
1 2 3 4 5 6