[MySQL] VARCHAR vs TEXT
·
스터디/Database
목차 1. VARCHAR 의 크기 제약테이블을 정의할 때 아래와 같이 varchar 또는 text 로 컬럼을 정의합니다.alter table test_tb name varchar(100) not null; MySQL은 기본적으로 하나의 행(ROW)이 가질 수 있는 최대 행 크기를 65535 바이트로 제한하고 있습니다. 다음과 같은 테이블 생성 쿼리를 실행하면 실패하는 것을 확인할 수 있습니다.- 하나의 행이 가질 수 있는 최대 크기 = 65535byte- varchar 컬럼이 가질 수 있는 최대 크기 = 16383자리 mysql> CREATE TABLE long_varchar (id INT PRIMARY KEY, fd1 VARCHAR(1000000));ERROR 1074 (42000): Column ..
[MySQL] PK 컬럼 순서와 Index
·
스터디/Database
목차   1. PK 컬럼 순서의 중요성인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성됩니다.많은 인덱스가 생성되므로 입력/수정/삭제 시 불필요한 내부 작업이 증가해 성능에 악영향을 미칠 수 있습니다. 2. PK 구성과 Index 이용스키마를 생성하기 이전에 데이터 모델의 PK 순서를 조절하지 않은 채 테이블을 생성하면 인덱스를 이용하지 못해 테이블 Full Scan 현상이 발생할 경우가 있습니다.예시 테이블create table multi_pk_table( student_id varchar(255) not null, year datetime not null, semester int not null, ..
[MySQL] 대용량 테이블 스키마 변경하기
·
스터디/Database
목차 1. ALTER TABLE 아래와 같은 단순 DDL 구문으로 테이블의 스키마를 변경할 수 있습니다. ALTER TABLE [테이블명] MODIFY COLUMN [변경할 컬럼명][변경할 컬럼 타입] 예시 코드 ALTER TABLE user MODIFY COLUMN name varchar(10); 2. 대용량 데이터 테이블 스키마 변경하기 데이터가 100만, 1000만 정도일때 테이블 스키마 변경은 alter table로 가능했습니다. 천만건이라도 alter table은 5분안에 끝났기 때문입니다. 하지만 1억건이 넘어가면 이야기가 달라집니다. 3~4시간동안 진행될수도 있기 때문에 다른 방법으로 진행해야합니다. 전체적인 작업 과정은 다음과 같습니다. 복사테이블 생성 -> 복사테이블에 원본 테이블 데이터..
[MySQL] TEXT Column cannot set default value
·
스터디/Database
text 타입을 가지는 컬럼의 default 값을 설정하려고 할 때 "TEXT Column cannot set default value" 이라는 에러가 발생하여 그 원인을 찾아보았습니다! TEXT 컬럼 default value 설정 CREATE TABLE `test_table` ( `col1` INT(11) NOT NULL AUTO_INCREMENT, `col2` TEXT, `col3` INT(11) DEFAULT NULL, `col4` TINYINT(1) DEFAULT '0', PRIMARY KEY (`col1`) ); 먼저 위와 같은 쿼리로 test_table을 생성합니다. ALTER TABLE `table1` change `col2` `col2` text default ''; col2 컬럼의 디폴트..
[DB] MySQL CharacterSet과 Collation
·
스터디/Database
Character Set character set은 텍스트 데이터를 어떤 방식으로 인코딩하여 저장할 것인지를 결정하는 값입니다. 한글 인코딩을 위해 가장 널리 사용되는 인코딩 방식으로는 UTF-8과 EUC-KR이 존재하지만 show character set; 명령어를 통해서 지원하는 인코딩 목록을 확인 할 수 있습니다. Collation Collation은 정해진 character set에 의해 저장된 데이터들이 어떤 방식으로 정렬(order by) 될지를 결정하는 옵션입니다. 물론 직관적인 자료 (int나 date type)에서는 collation의 차이가 크게 의미 없습니다. 하지만 문자열을 정렬하는 방식에서는 차이가 있습니다. A와 가, 또는 A와 a 와 같은 문자열 정렬 방식을 설정하는 것은 설정..
[MySQL] 다중 테이블 업데이트, 여러 테이블 update 하기
·
스터디/Database
MySQL에서 한 번의 쿼리로 여러 개의 테이블을 update 처리해야하는 경우가 종종 있습니다. 이때 사용하는 쿼리는 매우 간단!! UPDATE 테이블A a, 테이블B b SET a.column = value, b.column = value WHERE [ 조건문 ] 위 쿼리를 이용하여 기존 행에 새로운 값을 설정합니다. 새로운 값을 덮어씌워 이전 값을 재정의합니다. 단, 여러 테이블을 업데이트하는 구문은 ORDER BY 구문이나 LIMIT 구문과 함께 사용할 수 없습니다. JOIN을 이용하는 경우 아래와 같이 사용할 수 있습니다. UPDATE 테이블A a, 테이블B b SET a.column = value, b.column = value WHERE a.column = b.column 참고: https:..