MySQL에서 NULL 값을 허용하면서도 기본값은 NULL이 아닌 빈 문자열()로 설정된 열을 만들고 싶다면 DEFAULT 키워드를 사용하면 됩니다.기본 문법ALTER TABLE yourTableName ADD yourColumnName yourDataType NULL DEFAULT ;예제 테이블 생성하기먼저 예제를 위한 테이블을 생성해 보겠습니다. 다음 쿼리를 실행합니다.mysql> CREATE TABLE AllowNullDefaultNotNullDemo -> ( -> Id int NOT NULL A
MySQL에서 특정 컬럼의 값이 숫자로 끝나는 레코드만 조회하고 싶다면 REGEXP 연산자를 사용하면 됩니다. 정규 표현식 패턴 [[:digit:]]$를 활용하면 문자열의 마지막이 숫자(digit)인 행만 손쉽게 필터링할 수 있습니다.기본 문법SELECT * FROM yourTableName WHERE yourColumnName REGEXP [[:digit:]]$;여기서 [[:digit:]]는 0부터 9까지의 숫자 한 글자를 의미하고, 끝에 붙는 $는 문자열의 끝을 나타냅니다. 즉, 문자열 마지막이 숫자로 종료되는 조건이 됩니다.예
MySQL 단일 열 다중 삽입 문법MySQL에서 하나의 열(column)에 여러 개의 값을 한 번에 삽입하려면 INSERT 문에서 값을 쉼표로 구분하여 나열하는 방식을 사용합니다. 기본 문법은 다음과 같습니다.INSERT INTO 테이블이름(컬럼이름)VALUES(값1),(값2),(값3),(값4),.........N;이처럼 각 값을 괄호로 묶고 쉼표로 연결하면, 하나의 INSERT 문으로 여러 행을 동시에 추가할 수 있습니다. 이는 개별적으로 INSERT 문을 반복 실행하는 것보다 성능 면에서도 유리합니다.예제 테이블 생성문법을 실제
MySQL에서 TTL(Time To Live) 개념처럼 유효 기간이 지난 레코드를 자동으로 정리하려면 이벤트 스케줄러(Event Scheduler)를 활용하는 것이 가장 효과적입니다. 이벤트 스케줄러는 SQL 작업의 실행을 주기적으로 예약하고 관리해 주는 MySQL 내장 기능으로, 별도의 외부 스크립트 없이도 데이터베이스 차원에서 만료된 데이터를 손쉽게 삭제할 수 있습니다.먼저 테스트용 테이블을 생성한 뒤, 매일 한 번씩 자동으로 실행되는 이벤트를 등록하는 순서로 진행하겠습니다.1단계: 테이블 생성하기예제에 사용할 테이블을 먼저 만
셀프 조인(SELF JOIN)은 하나의 테이블이 자기 자신과 조인되는 기법으로, 같은 테이블 내의 행들을 서로 비교하거나 연관 지어야 할 때 유용하게 사용됩니다. 이 글에서는 실제 예제를 통해 MySQL에서 셀프 조인을 사용하는 방법을 단계별로 살펴보겠습니다.1단계: 테이블 생성하기먼저 셀프 조인을 실습할 테이블을 만들어 보겠습니다. 아래 쿼리를 실행하여 SelfJoinDemo 테이블을 생성합니다.mysql> create table SelfJoinDemo -> ( -> Id int NOT NULL AUTO
MySQL에서 새 사용자 생성 후 접근이 거부되는 이유MySQL에서 새 사용자를 만들고 모든 권한을 부여했는데도 여전히 Access Denied(접근 거부) 오류가 발생한다면, 대부분의 원인은 권한 테이블이 아직 갱신되지 않았기 때문입니다. 사용자를 생성하고 GRANT 문으로 권한을 부여한 후에는 반드시 FLUSH PRIVILEGES 명령을 실행해야 변경 사항이 정상적으로 적용됩니다.FLUSH PRIVILEGES 기본 문법권한 설정을 다시 로드하는 구문은 아래와 같습니다.FLUSH PRIVILEGES;이 명령은 mysql 데이터베이
여러 개의 SELECT 조건을 하나의 쿼리로 병합해 처리하려면 GROUP BY 절과 HAVING 절을 함께 활용해야 합니다. 이 글에서는 실제 테이블 생성부터 데이터 삽입, 그리고 병합 쿼리 작성까지 단계별로 자세히 살펴보겠습니다.예제 테이블 생성하기먼저 개념을 이해하기 위해 간단한 테이블을 만들어 보겠습니다. 아래 쿼리로 MergingSelectDemo 테이블을 생성합니다.mysql> create table MergingSelectDemo-> (-> RoomServicesId int,-> RoomId int,
MySQL에서 쿼리 결과의 특정 열 값을 마치 열 이름(컬럼명)처럼 표시하고 싶다면 CASE 문을 활용하면 됩니다. 이는 흔히 피벗(Pivot)이라고 불리는 기법으로, 행 단위로 저장된 데이터를 열 형태로 재구성할 때 매우 유용합니다.기본 문법열 값을 열 이름으로 바꾸는 기본적인 문법은 다음과 같습니다.SELECT yourIdColumnName, MAX(CASE WHEN yourColumnName1 = yourValue1 THEN yourColumnName2 ELSE NULL END) AS yourValue1,
MySQL 8.0 이전 버전에는 ROW_NUMBER() 윈도우 함수가 기본적으로 제공되지 않습니다. 하지만 사용자 정의 변수(user-defined variable)를 활용하면 동일한 효과를 손쉽게 얻을 수 있습니다. 아래에서 문법과 실제 예제를 통해 그 방법을 자세히 살펴보겠습니다.사용자 변수로 ROW_NUMBER 흉내 내기핵심 원리는 간단합니다. 조회 시마다 변수 값을 1씩 증가시켜 각 행에 순차적인 번호를 부여하는 방식입니다. 기본 문법은 다음과 같습니다.SELECT (@yourVariableName:=@yourVariable
MySQL에서 전체 행 수를 정확하게 세는 방법MySQL 테이블에 저장된 모든 행(row)의 개수를 정확하게 확인하려면 집계 함수인 COUNT(*)를 사용해야 합니다. COUNT(*)는 NULL 값을 포함한 테이블의 모든 행을 빠짐없이 계산해 주기 때문에, 전체 레코드 수를 구할 때 가장 확실한 방법입니다.기본 문법은 다음과 같습니다.select count(*) as anyAliasName from yourTableName;여기서 anyAliasName은 결과 컬럼에 붙일 별칭(alias)으로, 원하는 이름을 자유롭게 지정할 수 있
MySQL에서 첫 번째 문자만 검색/교체하기MySQL에서 문자열 안에 여러 번 등장하는 특정 문자 중 첫 번째로 나타난 문자만 검색하여 교체하려면 일반적인 REPLACE() 함수만으로는 부족합니다. 이때는 CONCAT(), REPLACE(), 그리고 INSTR() 함수를 조합하여 사용하면 원하는 결과를 얻을 수 있습니다.1. 사용자 정의 세션 변수 설정먼저 테스트에 사용할 사용자 정의 세션 변수를 설정하는 쿼리는 다음과 같습니다.mysql> set @Sentence=Thks ks is a my string;Query OK, 0
MySQL에서 타임스탬프 값의 일부(예: 연도)만 조회하고 싶다면 YEAR() 함수를 사용하면 됩니다. 기본 문법은 다음과 같습니다.SELECT YEAR(yourTimestampColumnName) AS anyAliasName FROM yourTableName;문법을 더 쉽게 이해하기 위해 실제 예제 테이블을 만들어 단계별로 살펴보겠습니다.1. 예제 테이블 생성먼저 TIMESTAMP 타입의 컬럼을 가진 테이블을 생성합니다.mysql> CREATE TABLE SelectPartOfTimestampDemo-> (-> I
Java에서 MySQL 데이터베이스에 연결할 때 서버의 신원 확인 없이 SSL 연결을 설정하는 것은 권장되지 않습니다라는 경고 메시지가 출력되는 경우가 있습니다. 이 경고를 간단히 비활성화하려면 JDBC URL에 다음 옵션을 추가하면 됩니다.autoReconnect=true&useSSL=falseJDBC URL 전체 작성 형식완전한 JDBC URL 문법은 아래와 같습니다.String jdbcURL = jdbc:mysql://localhost:포트번호/데이터베이스명?autoReconnect=true&useSSL=fals
MySQL에서 IF() 함수 안에 서브쿼리(하위 쿼리)를 사용할 때는 반드시 서브쿼리를 괄호(parenthesis)로 감싸야 합니다. 그렇지 않으면 문법 오류가 발생합니다.기본 문법서브쿼리를 괄호로 묶는 기본적인 문법은 다음과 같습니다.SELECT IF((SELECT COUNT(*) FROM yourTableName), Yes, No) AS anyAliasName;위 쿼리는 테이블에 레코드가 하나라도 존재하면 Yes를, 존재하지 않으면 No를 반환합니다.예제 테이블 생성문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니
MySQL에서 타임스탬프(timestamp) 값을 오름차순으로 정렬하려면 ORDER BY ASC 절과 TIMESTAMP() 함수를 함께 사용할 수 있습니다.기본 문법TIMESTAMP() 함수를 활용해 타임스탬프 값을 오름차순으로 정렬하는 기본 문법은 다음과 같습니다.SELECT timestamp( yourTimestampColumnName ) as anyAliasName From yourTableName order by 1 ASC예제 테이블 생성위 문법을 실제로 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다
MySQL에서 LIMIT 사용 시 전체 행 수 구하기MySQL에서 LIMIT 절을 사용해 일부 행만 조회하면서도, 조건에 맞는 전체 행의 개수를 함께 알고 싶은 경우가 자주 있습니다. 이럴 때 SQL_CALC_FOUND_ROWS 키워드를 활용하면 됩니다. 기본 문법은 다음과 같습니다.SELECT SQL_CALC_FOUND_ROWS * FROM yourTableName LIMIT 0, yourLastValue;문법을 제대로 이해하기 위해 실제 예제 테이블을 만들어 단계별로 살펴보겠습니다.1. 예제 테이블 생성먼저 아래 쿼리로 테이블을
MySQL 외래 키 생성 구문MySQL에서 두 테이블 간의 관계를 설정하려면 외래 키(Foreign Key)를 사용해야 합니다. 외래 키는 한 테이블의 컬럼이 다른 테이블의 기본 키(Primary Key)를 참조하도록 하여 데이터 무결성을 보장하는 중요한 제약 조건입니다.외래 키를 생성하는 기본 구문은 다음과 같습니다.ALTER TABLE 참조할_테이블명 ADD CONSTRAINT 제약조건_이름 FOREIGN KEY(외래키_컬럼명) REFERENCES 원본_테이블명(기본키_컬럼명);예제 테이블 생성하기구문을 실제로 이해하기 위해 두
MySQL에서 작은따옴표() 삽입하기MySQL에 작은따옴표()와 같은 특수 문자를 삽입하려면 역슬래시(\)를 붙인 이스케이프 문자 \를 사용해야 합니다. 작은따옴표는 문자열을 감싸는 구분 기호로 해석되기 때문에, 그대로 입력하면 쿼리 오류가 발생합니다.기본 문법INSERT INTO yourTableName(yourColumnName) VALUES(yourValue\s);예제 테이블 생성실제 동작을 확인하기 위해 먼저 테이블을 생성해 보겠습니다.mysql> CREATE TABLE AvoidInsertErrorDemo-> (
MySQL에서 1970년 이전의 날짜를 다루는 방법MySQL에서 1970년 이전의 날짜를 저장하거나 조회해야 한다면 DATE 데이터 타입을 사용해야 합니다. 자주 사용되는 TIMESTAMP 타입은 유닉스 타임스탬프 기준으로 인해 1970년 1월 1일부터 2038년까지만 표현할 수 있는 반면, DATE 타입은 1000년부터 9999년까지의 훨씬 넓은 범위를 지원하기 때문입니다.DATE 타입은 시간 정보 없이 날짜(연·월·일)만 다룰 때 적합합니다.DATE 타입의 기본 형식과 범위MySQL의 DATE 타입은 아래와 같은 형식으로 데이터
MySQL에서 TIME 타입으로 저장된 값은 기본적으로 HH:MM:SS 형태로 초까지 함께 출력됩니다. 하지만 실무에서는 화면에 시간과 분만 깔끔하게 보여주고 싶은 경우가 많습니다. 이럴 때 DATE_FORMAT() 함수를 사용하면 간단하게 해결할 수 있습니다.DATE_FORMAT() 함수 기본 문법SELECT DATE_FORMAT(컬럼명, %k:%i) AS 별칭 FROM 테이블명;형식 지정자로 %H:%i를 사용해도 동일한 결과를 얻을 수 있습니다. 두 지정자의 차이점은 다음과 같습니다.%k : 시간을 0~23 범위로 표시하되, 한