(Router: 서버에 명령을 내림)
실행방법1> 터미널 = commend = 명령창
(터미널: mysql -u root -p)
윈도우의 경우, 환경변수에 Path 등록
(바로 MYSQL Commend Line Client)
실행방법2> MySQL Workbench(UI)
Database 데이터의 집합체
여러사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합체(json, excel..)
DBMS(database management system) -> SW로, 서비스 제공(예:MySQL)
: 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어
: 데이터베이스(특히 DBMS를 통한 DB를 접근할때)에서 데이터를 쿼리하고 조작하기 위해 사용하는 프로그래밍 언어
(SQL 표준이 있고 DBMS마다 살짝 다르게 추가기능이있음)
<SQL 구성요소>
show databases; DB 목록 확인
create database 이름 ; DB 생성
+ default character set utf8mb4;
( 데이터형 형태: tf8(다국어)mb4(이모지 문자도 사용))
use 이름; 사용을 위한 DB 접속
drop database 이름; DB 삭제
- MySQL
기본적으로 관리를 위해 mysql시스템 데이터베이스를 가지고 있음
그리고 그 mysql시스템 데이터베이스에서 user정보 관리
- user 종류
1. 현재 PC에서만 접속가능한 사용자 localhost
2. 외부에서 접속가능한 사용자 %
(호스트 정보가 다르면 유저 네임이 같아도 됨)
use mysql; mySQL DB에서 관리
(기본적으로 시스템 유저들과 root유저(계정) 확인 가능)
select host, user from user; 조회 select(user테이블에서 가져와라)
유저 생성(비번과함께)
create user 'test'@'localhost' identified by '1234';
create user 'test'@'%' identified by '5678';
유저 삭제
drop user 'test'@'localhost'
drop user 'test'@'%'
:특정 데이터베이스에 대해서 특정user에게 사용권한 부여 가능
유저 권한 확인 (특정 유저에게 부여된 모든 권한 목록 확인)
show grants for 'username'@'localhost';
(기본권한이 디폴트로되어있음)
grant all on 특정DB.* to 'username'@'localhost'; 특정DB의 모든 권한 부여
revoke all on 특정DB.* from 'username'@'localhost'; 특정DB의 모든 권한 삭제
(필요시) flush privileges; 사용자 권한 새로고침
: DB 안에서 실제 데이터가 저장되는 형태로, 여러 테이블이 관계를 맺고 저장되어 있음.
열(row)과 행(column)으로 구성.
간단하게 비유하자면:
SQL의 테이블 ↔ Pandas의 데이터프레임
SQL의 열 (또는 필드) ↔ Pandas의 시리즈
데이터프레임은 테이블과 유사한 구조, 시리즈는 데이터프레임의 각 열.
-> 데이터타입 명시
int, double(실수), varcher(16)/(32) ->판다스에서object(str)
char : 1글자로 이루어진 데이터타입 (예: 여성f 남성m) (CHAR(1)), date : 날짜
desc 테이블이름; 테이블 정보 확인
(상세정보:Null(비어있어도 괜찮?) )
테이블 정보 변경(alter)
alter table 테이블이름 - rename 새이름;
.....................................................add column 컬럼명 타입;
.....................................................modify column 컬럼명 타입; 컬럼수정(데이터 타입 재정의)
.....................................................change column 원래컬럼 새컬럼명 타입; 컬럼수정(이름,타입)
.....................................................drop column 이름; 컬럼삭제
drop table 테이블이름; 테이블 삭제
- 컬럼(Field)의 속성값
create table celeb
-> (
-> id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
# Null : 필드에 Null 값 허용
# key : 이 데이터를 구분하는 id같은 유니크한 값 primary로 구분
# Extra(auto_increment : 깜박하고 value값을 안 적을시 자동으로 +1값 해서 넣어줌)
-> NAME varchar(32) NOT NULL DEFAULT '',
# Default 값으로 ''
-> BRITHDAY date,
-> AGE int,
-> SEX CHAR,
-> JOB_TITLE varchar(32),
-> AGENCY varchar(32)
-> );
===========================================================
PRIMARY KEY(기본키)
• 테이블의 각 레코드를 식별(중복되지 않은 고유값, Not Null)
• 테이블당 하나의 기본키를 가짐
• 기본키는 컬럼 하나로 지정하거나 여러 개의 컬럼(합쳐서)으로 하나의 기본키로 지정 가능
# 처음 만들때 설정(또는 바로 위처럼 컬럼 설정 바로 뒤)
create table 테이블명(컬럼들 설정 후
-> constratint 프라이머리 키 이름 (생략가능-생략시 자동설정)
-> primary key (컬럼명, ...) );
# 이미 만들어진 테이블에 설정
alter table 테이블이름 add primary key (컬럼명);
# 삭제
alter table 이름 drop primary key;
Foreign key(외래키)
• 한 테이블을 다른 테이블과 연결해주는 역할이며, 참조되는 테이블의 항목은 그 테이블의 기본키 (혹은 단일값)
• 참조하는 컬럼이기에 연결된 다른 테이블의 컬럼과 연결 references가 있어야됨
• 폴린키가 지정되어있는 테이블에서 조인을 할 때 폴린키 이용
• 외래키는 기본키와 달리 여러 개일 수가 있어서 삭제할때 자동 생성된 constraint확인 필요
-> show create table 테이블명;
• 삭제시 desc에서 변화 X show create table에는 키속성만 남아잇을뿐 reference관계는 깨져있는것이 확인됨
# 처음 만들때 설정(또는 바로 위처럼 컬럼 설정 바로 뒤)
create table 테이블명(컬럼들 설정 후
-> constratint 폴린 키 이름 (생략가능-생략시 자동설정)
-> foreign key (컬럼명, ...) references 또다른테이블명(컬럼명,..)
->);
# 이미 만들어진 테이블에 설정
alter table 테이블명 add foreign key (컬럼명,...) references 또다른테이블명(컬럼명,..)
#삭제
alter table 이름 drop foreign key 키이름;
==========================================================
insert into 테이블명 (컬럼명2, 1, 3, ..) values (값2, 1, 3, ..); 데이터추가
- "모든" 컬럼값을 추가할 경우 컬럼명 "생략가능" (BUT 순서 일치 주의!!)
insert into 테이블명
values(값1, 2, 3, ..);
cf. 대용량으로 데이터 추가시 파일로 작성해서 파일실행