MySQL에서는 하나의 테이블에 있는 여러 열에 FOREIGN KEY(외래 키) 제약 조건을 추가할 수 있습니다. 다만 중요한 조건이 있는데, 자식 테이블의 각 외래 키는 반드시 서로 다른 부모 테이블을 참조해야 합니다.예제를 통한 이해먼저 customer2라는 테이블이 있고, 이 테이블의 cust_unq_id 필드에 PRIMARY KEY(기본 키) 제약 조건이 설정되어 있다고 가정해 보겠습니다.mysql> describe customer2; +-------------+-------------+------+-----+-----
MySQL은 참조 무결성을 위한 외래 키(Foreign Key)는 지원하지만, CHECK 제약 조건은 공식적으로 지원하지 않습니다. 하지만 다행히도 트리거(Trigger)를 활용하면 CHECK 제약 조건과 동일한 효과를 구현할 수 있습니다. 아래 예제를 통해 그 방법을 자세히 살펴보겠습니다.예제 시나리오: 자동차 등록번호 형식 검증다음과 같이 고정된 형식의 등록 번호를 저장하는 car 테이블이 있다고 가정해 보겠습니다. 형식 규칙은 영문자 2개 – 숫자 3개 – 영문자 2개(예: AB-235-YZ)입니다.mysql> CREAT
MySQL의 범위를 벗어난 날짜 처리 방식MySQL은 범위를 벗어난(out-of-range) 날짜나 유효하지 않은(invalid) 날짜를 만났을 때, 설정된 SQL MODE에 따라 서로 다른 방식으로 반응합니다.만약 ALLOW_INVALID_DATES 모드가 활성화되어 있다면, MySQL은 오류나 경고를 발생시키지 않고 범위를 벗어난 값을 모두 0으로 변환하여(즉, 0000-00-00 00:00:00 형태로) 테이블에 그대로 저장합니다.ALLOW_INVALID_DATES 모드 적용 예시다음과 같이 SQL MODE를 변경한 후, 범위
MySQL ZEROFILL이란 무엇인가?MySQL에서 숫자 컬럼에 ZEROFILL 속성을 지정하면, 해당 필드의 표시 값이 컬럼 정의에서 지정한 표시 너비(display width)만큼 자동으로 0(zero)으로 채워집니다. 이 기능은 주문 번호, 회원 번호처럼 일정한 자릿수를 유지해야 하는 데이터를 다룰 때 특히 유용합니다.ZEROFILL 사용 예제실제 동작을 확인하기 위해 showzerofill이라는 테이블을 생성하고 값을 삽입해 보겠습니다.mysql> Create Table showzerofill(Val1 INT(5) Z
기존 테이블의 열에 설정된 FOREIGN KEY(외래 키) 제약 조건은 ALTER TABLE 문과 DROP 키워드를 함께 사용하여 손쉽게 제거할 수 있습니다. 기본 문법 ALTER TABLE table_name DROP FOREIGN KEY constraint_name 여기서 constraint_name은 테이블을 생성할 때 외래 키 제약 조건에 부여한 이름을 의미합니다. 만약 제약 조건 이름을 별도로 지정하지 않았다면, MySQL이 자동으로 제약 조건 이름을 생성합니다. 이 경우 SHOW CREATE TABLE 문을 실행하면
MySQL 외래 키 검사 비활성화 및 다시 활성화하기 MySQL에서는 SET 구문 하나만으로 세션 단위의 외래 키 검사(foreign key checks)를 간단히 끄거나 켤 수 있습니다. 대량의 데이터를 옮기거나 스키마를 변경할 때 유용하게 활용됩니다. 1. 외래 키 검사 비활성화 mysql> SET foreign_key_checks = 0; Query OK, 0 rows affected (0.00 sec) 2. 외래 키 검사 다시 활성화 mysql> SET foreign_key_checks = 1; Query OK,
두 개의 테이블이 외래 키(Foreign Key)로 연결되어 있을 때, 부모 테이블에서 자식 테이블에도 존재하는 레코드를 삭제하면 참조 무결성 문제가 발생할 수 있습니다. 이러한 상황에서 데이터 무결성을 유지하기 위해 사용할 수 있는 대표적인 방법은 다음과 같습니다.ON DELETE CASCADEON DELETE CASCADE 옵션은 부모 테이블에서 특정 값이 삭제될 때, 해당 외래 키 값을 참조하는 자식 테이블의 레코드까지 함께 자동으로 삭제하는 방식입니다. 예를 들어 고객 정보를 담는 부모 테이블에서 한 고객을 삭제하면, 그 고
MySQL에서 CHAR와 NCHAR는 모두 고정 길이(fixed length) 문자열 데이터 타입입니다. 두 타입 모두 컬럼을 생성할 때 지정한 길이만큼의 저장 공간을 미리 확보하며, 입력된 문자열이 지정된 길이보다 짧으면 나머지 공간은 공백으로 채워진다는 공통점이 있습니다.하지만 두 타입은 내부적으로 사용하는 문자 집합과 바이트 처리 방식에서 뚜렷한 차이를 보이며, 이러한 차이는 한글이나 다른 다국어 데이터를 저장할 때 특히 중요하게 작용합니다.CHAR와 NCHAR의 주요 차이점 비교구분CHARNCHAR전체 이름CHARACTERN
CHAR와 VARCHAR는 모두 MySQL에서 문자 데이터를 저장하는 데 사용되는 데이터 타입으로, 겉보기에는 매우 유사해 보입니다. 하지만 데이터를 저장하고 검색하는 방식에서 중요한 차이점을 가지고 있으며, 이러한 차이는 실제 데이터베이스 설계와 성능에 큰 영향을 미칩니다.CHAR와 VARCHAR의 주요 차이점CHAR 데이터 타입VARCHAR 데이터 타입정식 명칭은 CHARACTER입니다.정식 명칭은 VARIABLE CHARACTER(가변 문자)입니다.값을 고정 길이로 저장하며, 지정된 길이에 맞추기 위해 남는 공간은 공백 문자로
MySQL에서 문자열을 저장할 때 가장 많이 비교되는 데이터 타입은 CHAR와 VARCHAR입니다. 두 타입 모두 문자열을 저장할 수 있고 최대 길이를 지정할 수 있다는 공통점이 있지만, 내부적인 저장 방식이 다르기 때문에 어떤 것을 선택할지는 저장하려는 데이터의 성격에 따라 달라집니다. CHAR와 VARCHAR의 핵심 차이 CHAR는 고정 길이(fixed-length) 문자열 타입입니다. 선언된 길이만큼 공간을 항상 확보하며, 입력된 값이 그보다 짧으면 남는 공간은 공백으로 채워집니다. VARCHAR는 가변 길이(variable
MySQL PRIMARY KEY와 UNIQUE 제약 조건의 차이점MySQL에서 PRIMARY KEY(기본 키)와 UNIQUE 제약 조건은 모두 컬럼에 중복된 값이 저장되지 않도록 데이터의 고유성을 보장하는 역할을 합니다. 하지만 두 제약 조건은 생성 가능한 개수, 인덱스 생성 방식, NULL 값 처리 등에서 뚜렷한 차이를 보입니다.핵심 차이점 한눈에 보기PRIMARY KEYUNIQUE 제약 조건하나의 테이블에는 기본 키를 오직 하나만 생성할 수 있습니다.하나의 테이블에 여러 개의 UNIQUE 제약 조건을 추가할 수 있습니다.기본 키
MySQL에서 VARCHAR 값은 저장될 때 길이 접두사(length prefix) + 실제 데이터 형태로 기록됩니다. 이 길이 접두사는 해당 값이 몇 바이트인지를 나타내며, 1바이트 또는 2바이트로 저장됩니다.길이 접두사란?VARCHAR는 가변 길이 문자열 타입이기 때문에, 각 행마다 실제 저장된 값의 길이가 다를 수 있습니다. MySQL은 이를 구분하기 위해 값 앞에 길이 정보를 별도로 붙여 저장하며, 이것이 바로 길이 접두사입니다. 덕분에 MySQL은 값을 읽을 때 정확히 어디까지가 데이터인지 판단할 수 있습니다.1바이트 vs
데이터베이스를 운영하다 보면 특정 테이블에 어떤 제약 조건(PRIMARY KEY, NOT NULL, AUTO_INCREMENT 등)이 설정되어 있는지 확인해야 할 때가 많습니다. MySQL에서는 SHOW CREATE TABLE 문을 사용하면 해당 테이블에 적용된 제약 조건은 물론, 테이블 생성 시 정의된 다양한 세부 정보까지 한 번에 확인할 수 있습니다.SHOW CREATE TABLE 기본 문법SHOW CREATE TABLE table_name;여기서 table_name은 제약 조건과 구조 정보를 확인하고자 하는 테이블의 이름입니다
MySQL에서는 ALTER TABLE 문과 ADD 키워드를 함께 사용하면 이미 생성된 테이블의 여러 열에 PRIMARY KEY(기본 키) 제약 조건을 추가할 수 있습니다. 이처럼 두 개 이상의 열을 조합해 구성한 기본 키를 복합 기본 키(Composite Primary Key)라고 부르며, 각 열 단위가 아닌 열 값들의 조합 전체가 테이블 내에서 유일해야 한다는 점이 특징입니다.예제다음과 같은 Room_allotment 테이블이 있다고 가정해 보겠습니다.mysql> Create table Room_allotment(Id Int
MySQL에서 이미 생성된 테이블에 여러 열에 걸쳐 적용된 복합 PRIMARY KEY(기본 키) 제약 조건이 설정되어 있을 때, 이를 제거하려면 ALTER TABLE 문과 함께 DROP PRIMARY KEY 구문을 사용하면 됩니다.복합 PRIMARY KEY란?복합 PRIMARY KEY는 두 개 이상의 열을 조합하여 하나의 기본 키로 지정하는 방식입니다. 단일 열만으로는 고유성을 보장할 수 없지만, 여러 열의 조합으로 각 행을 고유하게 식별해야 하는 경우에 유용하게 사용됩니다.예제: Room_allotment 테이블다음과 같이 Roo
FOREIGN KEY(외래 키)는 두 테이블 간의 데이터를 연결하는 데 사용되는 하나의 열 또는 여러 열의 조합입니다. 즉, FOREIGN KEY 제약 조건은 항상 두 개의 테이블 사이의 관계를 의미합니다. 또한 한 테이블의 PRIMARY KEY(기본 키)가 다른 테이블의 FOREIGN KEY와 연결되기 때문에 데이터 무결성(data integrity)을 강화하는 데에도 중요한 역할을 합니다. FOREIGN KEY 기본 문법 FOREIGN KEY [column_name] REFERENCES [Primary Key를 가진 테이블명]
이미 생성되어 있는 MySQL 테이블에도 ALTER TABLE 문을 사용하면 손쉽게 FOREIGN KEY(외래 키) 제약 조건을 추가할 수 있습니다. 외래 키는 두 테이블 간의 관계를 설정하고 데이터의 참조 무결성을 보장해 주는 중요한 기능입니다.기본 문법외래 키를 추가하는 기본적인 SQL 문법은 다음과 같습니다.ALTER TABLE 테이블명 ADD FOREIGN KEY (열_이름) REFERENCES 기준_테이블명(기준_열_이름);사용 예시예를 들어, Orders1 테이블에 외래 키 제약 조건을 추가하고, 이것이 Primary K
MySQL에서는 하나의 테이블 안에서 두 개 이상의 필드에 대해 FOREIGN KEY(외래 키) 제약 조건을 추가할 수 있습니다. 다만 반드시 지켜야 할 조건이 있는데, 바로 자식 테이블의 각 외래 키는 서로 다른 부모 테이블을 참조해야 한다는 점입니다. 즉, 여러 외래 키가 동일한 부모 테이블을 중복 참조하는 구조가 아니라, 각 외래 키가 고유한 부모 테이블과 연결되어야 합니다.예시를 통한 이해1. 부모 테이블 확인하기cust_unq_id 필드에 PRIMARY KEY 제약 조건이 설정된 customer2 테이블이 있다고 가정해 보
부모 테이블과 자식 테이블의 관계: 일대다(One-to-Many)MySQL에서 외래 키(Foreign Key) 제약 조건으로 연결된 부모 테이블과 자식 테이블 사이의 관계는 일대다(One-to-Many) 관계입니다. 즉, 부모 테이블의 하나의 레코드가 자식 테이블의 여러 레코드와 연관될 수 있습니다.customer와 orders 테이블 예제두 개의 테이블인 customer(고객)와 orders(주문)를 예로 들어 이 관계를 쉽게 이해할 수 있습니다. 여기서 customer는 부모 테이블이고, orders는 자식 테이블입니다. 한 명
외래 키(Foreign Key)는 참조 무결성(referential integrity)을 강제함으로써 데이터의 일관성과 무결성을 자동으로 유지하도록 도와주는 제약 조건입니다. 이는 customer(고객)와 orders(주문)라는 두 개의 테이블 예시를 통해 쉽게 이해할 수 있습니다.부모 테이블과 자식 테이블의 관계여기서 customer는 부모 테이블(parent table)이고, orders는 자식 테이블(child table)입니다. 외래 키 제약 조건이 설정되어 있기 때문에 존재하지 않는 고객에 대한 주문은 생성할 수 없습니다.