MySQL
https://velog.io/@gwak2837/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8B%9C%EC%8A%A4%ED%85%9C-MySQL
이미지 썸네일 삭제
데이터베이스 시스템 MySQL
load data … SQL문으로 외부 데이터 파일을 불러올 수 있다. 텍스트 파일 불러오기데이터 파일의 레코드는 enter로 구분하고, 필드는 tab으로 구분한다.파일 경로는 \\ 또는 /로 구분ERROR 1290 (HY000): The MySQL server
velog.io
-
오른쪽 정렬오른쪽 정렬왼쪽 정렬왼쪽 정렬가운데 정렬가운데 정렬
- 삭제삭제
table => 모여서 database(table의 그룹)(스키마라고도 부른다)
스키마는 연관된 데이터를 묶는다.
Structured Query Language
CREATE DATABASE [스키마 이름];
DROP DATABASE [스키마 이름];
SHOW DATABASES;
USE [스키마이름];
SHOW TABLES;
표 => table
행 => record
열 => column
SQL CHECK SEAT 그림 검색하면 하나 첨부
ALTER TABLE 쿼리 조사 : 테이블 구조 변경
GRANT주는것도 추가
DESC [테이블명] => 구조표시
INSERT INTO topic (title, description, created, author, profile) VALUES(“MySQL”, “MySQL is…”, NOW(), “egoing”, “developer”);
앞에 괄호에 추가할 =컬럼 뒤에 매치되도록 밸류에 값
SELECT id, title FROM topic;
id, title 부분을 projection이라고 부르고 필요한 컬럼들을 적는다.
SELECT id, title FROM topic WHERE author=”egoing”;
SELECT id, title FROM topic WHERE author=”egoing” ORDER BY id DESC;
SELECT id, title FROM topic WHERE author=”egoing” ORDER BY id DESC LIMIT 2;
데이터가 막 1억개되는데 모두 출력해버리면 다운된다. 겪어봤지
셀렉트는 아주 필드가 많고 복잡하다.
SELECT에서 GROUP BY [COLUMN명]을 하면 그거별로 그룹화해서 보여줌
https://youtu.be/841GiylfTh0
UPDATE topic SET description=‘Oracle is…’ titile=‘Oracle’ WHERE id = 1;
웨어를 빼면 재앙이 올수있으니 주의
DELETE FROM topic WHERE id = 1;
역시나 where 주의
이래서 쿼리 안쓰고 하둡같은데 올려서 데이터 분석하나보다.
RENAME TABLE topic TO topic_backup;
데이터 베이스으 ㅣ본질은 crud이다. 이런 기능ㅇ ㅣ있다면 데이터베이스로 볼수 잇따. 하지만 여러종류가 있는 이유는 각자 혁신점이 있기 때문이다.
indexing은 자주 조회하는 데이터에 대해 미리 색인을 갖는 것(잘정리하는것)으로 조회속도가 빨라지는 핵심기술이다.
<조인편> 여러 테이블이 관계를 가질때 관계형 데이터베이스가 진가를 발휘한다. author_id를 보관하고 author테이블에서 그 아이디로 찾는다. (하나로 통짜라면 중복된 데이터가 너무 많다. 모든 정보통신기술에서 중요한건 중복의 제거이다.) => 데이터의 참조(author정보가 아니라 author_id)만을 갖는 방식 LEFT JOIN : 가장 인기있는 많이 쓰는 조인 mysql>(여기 코드적을때 이거 다 붙이자 멋잇게) mysql> SELECT topic.id AS topic_id, description, name, profile FROM**Topic LEFT JOIN author** ON topic.author_id = author.id; author를 topic에 붙이겠다. 왼쪽에 매핑되는 오른쪽 데이터가 없담녀 그냥 널로 표현한다. sql joins visualizer검색 mysql> SELECT topic.id AS topic_id, description, name, profile FROM**Topic LEFT JOIN author** ON topic.author_id = author.id LEFT JOIN profile ON author.profile_id = profile.pid; 이렇게 계속 이어서 붙일 수 잇음 표가 가로로 길어짐. 반대의 경우는 RIGHT OUTER JOIN이다. 오른쪽기준으로 붙인다. INNER JOIN은 널이 없어 성능은 좋지만 엄격해서 쓰기 어렵다. FULL OUTER JOIN은 양쪽에 없는것까지다 포함이다. LEFT JOIN/RIGHT JOIN의 합집합이다.(중복은 제거된다는말) mysql> ( SELECT topic_id, description, name, profile FROM topic LEFT JOIN author ON topic.author_id = author.id ) UNION DISTINCT ( SELECT topic_id, description, name, profile FROM topic RIGHT JOIN author ON topic.author_id = author.id ); 이것과 FULL OUTER JOIN이 같다. 하지만 많이 쓰지는 않는다 역시 EXCLUSIVE LEFT JOIN 한쪽에만 있는것을 찾는건데 문법으로 따로있진않고 WHERE절로 NULL을 찾아서 가능하다. mysql> SELECT topic.id AS topic_iud, description, name, profile FROM topic FULL OUTER JOIN author ON topic.author._d= author.id **WHERE id = NULL**; **explain**SELECT topic.id AS topic_iud, description, name, profile FROM topic FULL OUTER JOIN author ON topic.author._d= author.id; explain을 앞에 붙이면 병복지점에 대한 워닝을 얻을 수 있따. 인덱스 **index** 2012-03-23 02:16:56 **index** 색인, 조회할 때 원하는 행을 빠르게 찾을 수 있게 준비해둔 데이터 **인덱스의 종류** primary: 중복되지 않는 유일한 키 normal : 중복을 허용하는 인덱스 unique : 중복을 허용하지 않는 유일한 키 foreign : 다른 테이블과의 관계성을 부여하는 키 full text : 자연어 검색, myisam에서만 지원 **예제** * 0열 선택0열 다음에 열 추가 * 1열 선택1열 다음에 열 추가 * 0행 선택0행 다음에 행 추가 셀 전체 선택 열 너비 조절 행 높이 조절 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 **DROP** **TABLE** IF EXISTS `student`; **CREATE** **TABLE** `student` ( `id` tinyint(4) NOT NULL AUTO_INCREMENT, `**name**` **char**(4) NOT NULL, `address` **varchar**(50) NOT NULL, `department` enum(‘국문과’,’영문과’,’컴퓨터공학과’,’전자공학과’,’물리학과’) NOT NULL, `introduction` text NOT NULL, `number` **char**(255) NOT NULL, **PRIMARY** **KEY** (`id`), **UNIQUE** **KEY** `idx_number` (`number`) USING BTREE, **KEY** `idx_department` (`department`), **KEY** `idx_department_name` (`department`,`address`), FULLTEXT **KEY** `idx_introduction` (`introduction`) ) ENGINE=MyISAM AUTO_INCREMENT=9 **DEFAULT** CHARSET=utf8; **INSERT** **INTO** `student` **VALUES** (1, ‘이숙경’, ‘청주’, ‘컴퓨터공학과’, ‘저는 컴퓨터 공학과에 다닙니다. computer’, ‘0212031’); **INSERT** **INTO** `student` **VALUES** (2, ‘박재숙’, ‘서울’, ‘영문과’, ‘저는 영문과에 다닙니다.’, ‘0512321’); **INSERT** **INTO** `student` **VALUES** (3, ‘백태호’, ‘경주’, ‘컴퓨터공학과’, ‘저는 컴퓨터 공학과에 다니고 경주에서 왔습니다.’, ‘0913134’); **INSERT** **INTO** `student` **VALUES** (4, ‘김경훈’, ‘제천’, ‘국문과’, ‘제천이 고향이고 국문과에 다닙니다.’, ‘9813413’); **INSERT** **INTO** `student` **VALUES** (6, ‘김경진’, ‘제주’, ‘국문과’, ‘이번에 국문과에 입학한 김경진이라고 합니다. 제주에서 왔어요.’, ‘0534543’); **INSERT** **INTO** `student` **VALUES** (7, ‘박경호’, ‘제주’, ‘국문과’, ‘박경호입니다. 잘 부탁드립니다.’, ‘0134511’); **INSERT** **INTO** `student` **VALUES** (8, ‘김정인’, ‘대전’, ‘영문과’, ‘김정인입니다. 대전에서 왔고, 영문과에 다닙니다.’, ‘0034543’); * 셀 병합 * 행 분할 * 열 분할 * 너비 맞춤 * 삭제 **primary key** 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다. where 문을 이용해서 데이터를 조회할 때 가장 고속으로 데이터를 가져올 수 있다. 테이블마다 딱 하나의 primary key를 가질 수 있다. * 0열 선택0열 다음에 열 추가 * 1열 선택1열 다음에 열 추가 * 0행 선택0행 다음에 행 추가 셀 전체 선택 열 너비 조절 행 높이 조절 1 **select** * **from** student **where** id=3; * 셀 병합 * 행 분할 * 열 분할 * 너비 맞춤 * 삭제 **unique key** 테이블 전체를 통틀어서 중복되지 않는 값을 지정해야 한다. (== primary key) 고속으로 데이터를 가져올 수 있다. 여러개의 unique key를 지정할 수 있다. * 0열 선택0열 다음에 열 추가 * 1열 선택1열 다음에 열 추가 * 0행 선택0행 다음에 행 추가 셀 전체 선택 열 너비 조절 행 높이 조절 1 **select** * **from** student **where** number=0534543; * 셀 병합 * 행 분할 * 열 분할 * 너비 맞춤 * 삭제 **normal key** 중복을 허용한다. primary, unique 보다 속도가 느리다. 여러개의 키를 지정할 수 있다. * 0열 선택0열 다음에 열 추가 * 1열 선택1열 다음에 열 추가 * 0행 선택0행 다음에 행 추가 셀 전체 선택 열 너비 조절 행 높이 조절 1 **select** * **from** student **where** department=‘국문과’ * 셀 병합 * 행 분할 * 열 분할 * 너비 맞춤 * 삭제 **Full Text** mysql의 기본설정(ft_min_word_len)이 4로 되어 있기 때문에 최소 4글자 이상을 입력하거나 이 값을 조정해야 한다. mysql은 전문 검색 엔진이 아니기 때문에 한글 검색이 잘 안된다. 전문검색엔진으로 lucene, sphinx 참고 스토리지 엔진 중 myisam에서만 사용가능 * 0열 선택0열 다음에 열 추가 * 1열 선택1열 다음에 열 추가 * 0행 선택0행 다음에 행 추가 셀 전체 선택 열 너비 조절 행 높이 조절 1 **SELECT** introduction, MATCH(introduction) AGAINST(‘영문과에’) **FROM** student **WHERE** MATCH (introduction) AGAINST(‘영문과에’); * 셀 병합 * 행 분할 * 열 분할 * 너비 맞춤 * 삭제 **중복키** 하나의 키에 여러개의 칼럼을 포함 * 0열 선택0열 다음에 열 추가 * 1열 선택1열 다음에 열 추가 * 0행 선택0행 다음에 행 추가 셀 전체 선택 열 너비 조절 행 높이 조절 1 **select** * **from** student **where** department=‘국문과’ AND address=‘제주’; * 셀 병합 * 행 분할 * 열 분할 * 너비 맞춤 * 삭제 **인덱스의 정의 방법** 자주 조회되는 칼럼에 적용 조회 시 오랜시간을 소모하는 컬럼에 적용 데이터가 긴 경우 인덱스를 사용하지 않는다. - DBMS(DataBase Management System) RDBMS(관계형) use Database1; select * from mydb.buy; 명시적으로 디비명.테이블로하면 use랑상관없이 가져온다 select name, id => 입력한 순서대로 출력됨 현재 데이터베이스에 어떤 테이블이 있는지 show table status; 상세 show tables; 이름만 CREATE TABLE member( memberID varchar(10) not null, // varchars는 실제로 3개만 쓴다면 3개만 잡는다 memberAddress varchar(100) primary key(memberID) // 멤버아이디를 PK로 한다 ) DROP TABLE member INSERT INTO member VALUES(‘lee’, ‘동작구’); INSERT INTO member VALUES (‘lee’, ‘동작구’), (‘kim’, ‘동탄’), (‘you’, ‘동탄); // 이렇게 여러개도 가능 UPDATE SET salary = 180 WHERE id = 3; DELETE FROM member WHERE id = 3; 조인편>