Auto Increment 컬럼이란 자동 증가 값을 가지는 컬럼으로 값을 직접 대입할 수 없습니다. 중간에 값을 삭제한다고 해서, 삭제된 값을 재사용 하지 않으며레코드가 적재될 때마다 1씩 증가하게 됩니다. Auto Increment 초기화 방법 1. Truncate Truncate 를 하면 Auto Increment 값이 초기화가 됩니다. 12345678910111213141516171819202122232425262728293031323334CREATE TABLE t1 ( id INT(11) NOT NULL AUTO_INCREMENT, t1_text VARCHAR(50), PRIMARY KEY(id)) AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4; INSERT INTO t..
mysql
트랜잭션 격리 수준 기본적으로 트랜잭션은 시작과 끝 사이에서 데이터를 일관성있게 읽어들이는 것을 의미합니다.즉 다른 세션에서 변경된다고 하더라도 커밋이 이루어질때까지 또다른 세션은 변경작업을 확인할 수 없게 됩니다. 그렇지만, 트랜잭션의 격리 수준에 따라 위의 내용은 맞지 않을 수 있습니다.트랜잭션의 격리 수준은 4 단계로 이루어 집니다. 트랜잭션 레벨은 아래에서 확인할 수 있습니다.mysql> show variables like 'tx_isolation'; +---------------+------------------+ | Variable_name | Value | +---------------+------------------+ | tx_isolation | READ-UNCOMMITTED | +--..
MySQL 은 실행한 쿼리를 파일 혹은 테이블에 기록하는 기능을 제공합니다. 기록과 관련된 프로퍼티 프로퍼티 설명 general_log 로깅기능의 활성화 여부를 설정 general_log_file 로깅기록시 파일위치 및 명칭을 지정하며, log_output 이 FILE 인 경우 활성화 log_output 로깅기록의 저장장소 TABLE, FILE ,NONE 프로퍼티 설정 값 확인 방법Master-mysql> SHOW VARIABLES LIKE 'general_log%'; +------------------+-------------------------+ | Variable_name | Value | +------------------+-------------------------+ | general_log..
인덱스를 사용하는 이유 책에서 목차라고 생각하시면 편합니다.사용자는 목차를 보고 원하는 페이지를 바로 펼칠 수 있습니다. 즉, 인덱스를 사용하는 가장 큰 이유는 쿼리의 성능을 높이기 위해서 입니다.테이블에 다수의 레코드들이 정렬되어 있지 않고 무작위로 배열되어 있을 때, 특정 데이터를 찾기 위해서는 해당 테이블 전체를 검색해야 합니다.인덱스는 무작위 배열된 데이터를 정렬한 뒤, 필요로 하는 데이터만 가지고 오기 때문에 사용자는 빠른 결과를 받을 수 있습니다. 인덱스 생성시 고려사항 그렇다면 무작정 인덱스를 생성하면 좋을까요?아닙니다.인덱스 종류에 따라 물리적인 공간을 요구하기 때문에 무분별한 인덱스는 오히려 용량만 차지하게 됩니다.또한 옵티마이저는 생성한 인덱스 중 어느 인덱스를 선택해야 비용이 낮은지 ..
MySQL 은 이중화 기법으로 비동기, 반동기 방식 2가지를 제공한다. 참고로 Goldilocks 에서는 이중화 방식으로 Cyclone 툴인 비동기 방식, Cluster 인 완전한 동기화 방식을 지원합니다. 비동기 방식마스터 측은 슬레이브에 반영되었는지에 대한 여부를 판단하지 않습니다.따라서 네트워크 비용 + 슬레이브 동기화 비용이 빠지기 때문에 사용자는 빠른 응답을 받게됩니다.그러나 만약 네트워크 장애가 발생한다면 마스터와 슬레이브의 갭 차이는 벌어지게 됩니다. 반동기 방식마스터 측은 슬레이브에 릴레이 로그 기록까지를 동기화 범주로 판단합니다.이후 이 로그를 이용하여 슬레이브의 실 데이터베이스 업데이트는 판단하지 않습니다.여기에서는 네트워크 비용 + 슬레이브 동기화 비용이 추가됩니다.그렇지만 장애 발생..
MySQL 소켓 번호를 변경하는 방법을 알아보겠습니다. MySQL 을 설치시 기본 소켓 포트는 3306 입니다.netstat 로 열린 포트를 확인해보면 알 수 있습니다.$ netstat -na | grep 3306tcp6 0 0 :::3306 :::* LISTEN 포트를 변경하는 방법1. my.cnf 파일을 다음과 같이 수정합니다. [mysqld] DSN 으로 되어있는 곳에, port 프로퍼티를 추가 후 값을 설정합니다.[mysqld] port=33072. MySQL 을 재구동 합니다.3. 변경된 포트를 확인합니다.$ netstat -na | grep 3307 tcp6 0 0 :::3307 :::* LISTEN 혹은 ps 로도 확인할 수 있습니다.$ ps -ef | grep 3307mysql 30055 ..
테이블을 조인 할 때, Nested Loops, Sort Merge, Hash Join 결합을 많이 사용합니다. Nested Loops외부 테이블(Outer Table)에서 조건에 만족하는 레코드를 검색한 후, 결합 조건에 일치하는 레코드를 내부 테이블(Inner Table)에서 조인하는 방식입니다.Outer Join 에서 만족하는 레코드가 적을수록 NL 조인에서 효율이 좋습니다.조인 조건에 해당하는 컬럼들은 인덱스를 가지고 있어야 합니다. Sort Merge Join외부 테이블(Outer Table) 에서 조건에 만족하는 레코드를 검색한 후, 조인 키를 기준으로 정렬작업을 수행합니다.내부 테이블(Inner Table) 에서 조건에 만족하는 레코드를 검색한 후, 조인 키를 기준으로 정렬작업을 수행합니다...
Mysql 은 mysqldump 유틸리티를 통하여 데이터베이스 혹은 테이블을 Export, Import 할 수 있습니다. 구문은 다음과 같습니다.mysqldump -u [USER_NAME] -p [PASSWORD] [DB_NAME] [TABLE_NAME] 1. mysql 의 데이터베이스를 덤프$ mysqldump -u root --password mysql > mysql.sql Enter password: 2. mysql 데이터베이스의 T1 테이블을 덤프 혹은 여러개의 테이블을 덤프할경우$ mysqldump -u root -p mysql T1 > t1.sql Enter password: $ mysqldump -u root -p mysql T1 T2 > t1_t2.sql Enter password: Dum..
MySQL 에서는 SHOW 명령어로 데이터베이스의 정보를 조회할 수 있습니다. 많은 옵션들을 지원하고 있지만, 지극히 주관적으로 자주 사용되는 옵션에 대해서 정리해보겠습니다. 옵션 설명 DATABASES 데이터베이스 목록 CREATE DATABASE [DATABASE_NAME] 해당 데이터베이스 생성 SQL 구문 출력 ENGINES 플러그인된 데이터베이스 엔진의 정보 및 사용가능 여부 출력 TABLES 데이터베이스의 테이블 목록 CREATE TABLE [TABLE_NAME] 해당 테이블 생성 SQL 구문 출력 TABLES LIKE [TABLE_NAME] 데이터베이스의 해당 테이블 목록 INDEX FROM [TABLE_NAME] 해당 테이블의 인덱스 정보 출력 COLUMNS FROM [TABLE_NAME]..
MySQL 에서 쿼리 수행 시 다음과 같은 오류가 나오면서 구문이 수행되지 않은 경우 해결방법입니다.ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. SET PASSWORD 구문을 사용하여 비밀번호를 설정한 뒤 구문을 수행합니다.mysql> SET PASSWORD = PASSWORD('root'); Query OK, 0 rows affected, 1 warning (0.05 sec) mysql> COMMIT; Query OK, 0 rows affected (0.00 sec) mysql> SELECT 1; +---+ | 1 | +---+ | 1 | +---+ 1 ..