SyntaxHighlighter.all(); 'Database (DB) ' 카테고리의 글 목록 :: 게을러지고 싶어 부지런한 개발자

구분자로 자르기

문자열: 'ABC\DE\FGH'

1)   '\' 기준으로 앞에서 자르기

SELECT LEFT('ABC\DE\FGH', CHARINDEX('\', 'ABC\DE\FGH')-1);

결과: ABC

2) '\' 기준으로 중간에서 자르기

SELECT SUBSTRING('ABC\DE\FGH', CHARINDEX('\', 'ABC\DE\FGH')+1, LEN('ABC\DE\FGH')-CHARINDEX('\', 'ABC\DE\FGH')-CHARINDEX('\', REVERSE('ABC\DE\FGH')));

결과: DE

3) '\' 기준으로 뒤에서 자르기

SELECT RIGHT('ABC\DE\FGH',CHARINDEX('\', REVERSE('ABC\DE\FGH'))-1);

결과: FGH

 

길이로 자르기

문자열: 'ABCDEFGH'

1) 앞에서 자르기

SELECT LEFT('ABCDEFGH', 3);

결과: ABC

2) 중간에서 자르기

SELECT SUBSTRING('ABCDEFGH', 4, 2);

결과: DE

3) 뒤에서 자르기

SELECT RIGHT('ABCDEFGH', 3);

결과: FGH

 

 

 

1. 테이블의 생성과 동시에 데이터까지 모두 복사하는 방법

SELECT * INTO [생성할 테이블명 ] FROM [원본 테이블명]

 

2. 테이블을 생성할 때 원하는 컬럼만 복사하는 방법

SELECT [원하는 컬럼명] INTO [생성할 테이블명 ] FROM [원본 테이블명]

 

3. 테이블을 생성할 때 테이블 구조만 복사하는 방법

SELECT * INTO [생성할 테이블명 ] FROM [원본 테이블명] WHERE  1=2

테이블을 복사할 때 테이블에서 테이터는 없이 테이블 구조만 복사할 때는 'WHERE  1=2'와 같은 쿼리를 실해시키면 테이블의 구조만 복사할 수 있다.

 

4. 테이블은 이미 있고 데이터만 복사하고 싶을 경우 사용하는 방법

INSERT INTO [ 데이터를 넣을 테이블명 ] SELECT * FROM [원본 테이블명]

 

5. 이를 응용해보면 아주 유용하게 사용할 수 있다.

INSET INTO [데이터를 넣을 테이블명](컬럼1, 컬럼2) SELECT 복사할 컬럼1, 복사할 컬럼2 FROM [원본 테이블명] GROUP BY 컬럼1

위와 같이 응용해모면 이미 있는 테이블에 원하는 컴럼만 정렬하여 데이터을 넣을 수도 있다. 

 



* 주의사항 : 복사 쿼리로 테이블의 구조와 레코드는 복사할 수 있으나 Primary Key, Foreign Key, Default, Index등은 복사를 할 수 없다.


MySQL 접속 및 데이터 베이스 추가

# mysql -u root -p

 

사용자 계정을 추가하기 전에 먼저 현재 생성된 사용자 계정을 확인한다.

mysql > use mysql;    // mysql database 선택
mysql > select host, user, password from user;    // user 테이블 살펴보기

 

사용자 추가 (권한추가)
mysql > create user 사용자ID;   // 사용자 추가

mysql > create user 사용자ID@localhost identified by '비밀번호'// 사용자(user)를 추가하면서 패스워드까지 설정

 

기존에 사용하던 계정에 외부 접근 권한을 부여하려면, Host를 '%' 로 하여 똑같은 계정을 추가한다

mysql > create user 사용자ID@'%' identified by '비밀번호';  // '%' 의 의미는 외부에서의 접근을 허용

mysql > drop user '사용자ID'@localhost;    // 사용자 삭제

mysql > drop user 사용자ID;  // 사용자 삭제


 

사용자에게 데이터베이스 사용권한 부여

mysql > GRANT ALL PRIVILEGES ON DB명.테이블 TO 계정아이디@host IDENTIFIED BY '비밀번호';

// 계정이 이미 존재 하는데 'identified by '비밀번호' 부분을 추가하면 비밀번호가 변경된다

mysql> GRANT ALL privileges ON DB명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호';
mysql> GRANT ALL privileges ON DB명.* TO 계정아이디@''%' IDENTIFIED BY '비밀번호';

mysql > grant all privileges on DB명.* to 계정아이디@'%' identified by '비밀번호' ; // 모든 원격지에서 접속 권한추가 

mysql > grant all privileges on test.* to 계정아이디@locahost identified by '비밀번호';

// 계정아이디 에게 test 데이터베이스 모든 테이블에 대한 권한 부여 

 

mysql> grant select, insert, update on test.* to 계정아이디@locahost identified by '비밀번호';

// 계정아이디에게 test 데이터베이스 모든 테이블에 select, insert, update 권한 부여

 

mysql> grant all privileges on *.* to 계정아이디@locahost identified by '비밀번호' with grant option;

// 계정아이디에게 모든 데이터베이스 모든 테이블에 권한 부여

 

mysql > flush privileges;     // 변경된 내용을 메모리에 반영(권한 적용)

 


사용자에게 부여된 권한 확인

mysql > SHOW GRANTS FOR test@localhost;  -- userid 와 host명까지 붙여서 검색해야 함

mysql > SHOW GRANTS FOR test@'%';

mysql > SHOW GRANTS FOR test@'200.100.100.50';

숫자 타입

1. 정수 타입 

2. 고정 소수점 타입

3. 부동 소수점 타입 

 

 

문자열 타입

1. CHAR와 VARCHAR

  • 공통점: 둘 다 문자열 데이터를 저장
  • 차이점:  CHAR은 문자열 길이 한 번 설정되면 그대로 고정. VARCHAR는 길이 고정되지 않는 가변 길이

2. BINARY와 VARBINARY

3. BLOB과 TEXT

4. ENUM

5. SET

 

 

날짜와 시간 타입 

1. DATE, DATETIME, TIMESTAMP

  • DATE: 날짜를 저장할 수 있는 타입 (YYYY-MM-DD) 
  • DATETIME: 날짜 + 시간까지 저장할 수 있는 타입(YYYY-MM-DD HH:MM:SS)
  • TIMESTAMP: 날짜와 시간을 나타내는 타임스탬프를 저장할 수 있는 타입. 사용자가 별다른 입력을 주지 않으면 데이터가 마지막으로 입력되거나 변경된 시간이 저장되므로, 최종 변경 시각을 저장하고 확인하는 데 유용

2. TIME : 시간을 저장 (HH:MM:SS) 

3. YEAR : 연도를 저장

 

YEAR(4)는 4자리의 연도를 저장할 수 있습니다.

 

1. 4자리 숫자로 저장하면, 저장할 수 있는 범위는 1901년부터 2155년까지가 됩니다.

2. 4자리 문자열로 저장하면, 저장할 수 있는 범위는 1901년부터 2155년까지가 됩니다.

3. 숫자 0을 저장하면, 2000년이 아닌 0000년으로 저장되므로, 2000년은 반드시 문자열 '0' 또는 '00'으로 입력해야 함. 

유효하지 않은 연도는 '0000'으로 저장됩니다.

 

 

패턴매칭:  1) 와일드 카드

- 문자열 내에서 임의의 문자나 문자열을 대체하기 위해 사용되는 기호

% 0개 이상의 문자를 대체함 ex) SELECT * FROM Reservation WHERE Name NOT LIKE '장%';
_ 1개의 문자를 대체함  ex) SELECT * FROM Reservation WHERE RoomNum LIKE '20__';

패턴매칭:  2) REGEXP

- LIKE 연산자보다 더욱 복잡한 패턴을 검색하고 싶을 때 사용 

- REGEXP 연산자는 정규 표현식을 토대로 하는 패턴 매칭 연산을 제공 

- 만약 해당 패턴과 불일치한 데이터 찾고자할 땐 NOT REGEXP 연산자 사용 

. 줄 바꿈 문자(\n)를 제외한 임의의 한 문자를 의미함.
* 해당 문자 패턴이 0번 이상 반복됨.
+ 해당 문자 패턴이 1번 이상 반복됨.
^ 문자열의 처음을 의미함.
$ 문자열의 끝을 의미함.
| 선택을 의미함.(OR)
[...] 괄호([]) 안에 있는 어떠한 문자를 의미함.
[^...] 괄호([]) 안에 있지 않은 어떠한 문자를 의미함.
{n} 반복되는 횟수를 지정함.
{m,n} 반복되는 횟수의 최솟값과 최댓값을 지정함.

ex) Name 필드(속성)의 값이 '홍'으로 시작하거나, '산'으로 끝나는 레코드(행)를 선택

SELECT * FROM Reservation WHERE Name REGEXP '^홍|산$';

데이터베이스(Database)란? 

: 특정 조직이 업무 수행에 필요한 관련성 있는 통합, 저장, 운영, 공유된 데이터 집합 (ISOS)

 

통합데이터(Integrated Data): 자료의 중복을 배제/최소화한 데이터 집합

저장데이터(Stored Data): 컴퓨터가 접근가능한 저장매체에 저장된 데이터 집합

운영데이터(Operational Data): 조직의 업무 수행에 반드시 필요한 데이터 집합

공유데이터(Shared Data): 여러 응용 시스템이 동시/공동으로 사용 가능한 데이터 집합

 

- 이는 중복된 데이터를 없애고, 자료를 구조화하여, 효율적인 처리를 할 수 있도록 관리되며, 데이터베이스는 DBMS(Database Management System)이 관리. (DBMS 종류 : 오라클, Mysql, MariaDB, 등등) 

 

 

데이터베이스의 특징 

-실시간 접근성(real Time Accessibility): 내가 원할 때마다 언제든 바로 접근해서 자료 처리

-계속적인 진화(Continuous Evolution): 삽입, 삭제, 갱신 --> 항상 최신의 데이터를 유지해야 함 

-동시공유(Concurrent Sharing): 여러 명 같이 쓸 수 있어야 함 

-내용에 의한 참조(Content Reference): 주소가 아닌 데이터의 내용, 값에 따라 참조할 수.

 

 

DBMS (Database Management System)

: 사용자-데이터베이스 간 인터페이스 역할 (중간역할)

 

- 필수기능 : DB내용에 대한 정의기능(Definition Facility), 조작기능(Manipulation), 제어기능(Control)

장단점: 데이터 중복성 종속성 최소화; 일관성&무결성 유지; 사용자 간 데이터 공유 가능

 

 

SQL (Structured Query Language)

- 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어 

속성 설명 주요 명령어

DDL (Data Definision Language)

데이터베이스의 구조를 정의, 수정, 삭제 등 위해 사용되는 언어 CREATE, ALTER, DROP 
DML (Data Manipulation Language) 데이터베이스 내의 자료를 검색, 삽입, 갱신, 삭제 위해 사용되는 언어 SELECT, DELETE, INSERT, UPDATE
DCL (Data Control Language)  데이터베이스 데이터의 대해 무결성 유지, 병행 수행 제어, 보호와 관리 COMMIT, ROLLBACK, GRANT, REVOKE 

 

 

관계형 데이터베이스(relational database) 

- 테이블(=릴레이션)로 이루어져 있으며, 이 테이블은 키(key)와 값(value)의 관계를 나타냄

 

<< 특징 >>

- 데이터의 분류, 정렬, 탐색 속도가 빠름

- 데이터의 무결성 보장

- 기존에 작성된 스키마를 수정하기 어려움

 

- 아래는 테이블 예시며, 관계형 데이터베이스는 아래와 같이 구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있음

 

1) 행(row): 관계된 데이터의 묶음 (= 튜플 또는 레코드)

2) 열(column): 각각의 유일한 이름, 자신만의 타입을 가짐 (= 속성 또는 필드) 

3) 값(value): 각각의 행과 열에 대응하는 값 

4) 키(key) : 행의 식별자로 이용되는 열을 기본키(primary)라고 함 

즉, 테이블에 저장된 행을 고유하게 식별하는 후보키(candidate key) 중에서 설계자가 지정한 속성 

5) 관계: 테이블 간의 관계는 관계를 맺는 테이블의 수에 따라 다음과 같이 나눌 수 있음

(일대일, 일대다, 다대다  -->>> 이러한 관계를 나타내기 위해 외래키(foreign key)를 사용. 외래키는 한 테이블의 키 중에서 다른 테이블의 행을 식별할 수 있는 키 

6) 스키마 

: 테이블을 디자인하기 위한 청사진.

- 스키마는 개체-관계 다이어그램(entity-relationship diagram)이나 문자열로 표현할 수 있음

 

 

 

+ Recent posts