https://dev.mysql.com/downloads/mysql/
설정한 비밀번호 기억
% cd /usr/local/mysql/bin
% ./mysql -u root -p
Enter password:
% sudo nano /etc/paths
Password:
마지막 줄에 /usr/local/mysql/bin 입력
% mysql -u root -p
Enter password:
https://dev.mysql.com/downloads/workbench/
최신 버전인 .32를 설치하면 오류가 발생한다. .30으로 설치 필요.
Database
: 여러사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합체
DBMS (Database Management System)
: 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어
관계형 데이터베이스 (RDB: Relational Database)
: 서로간에 관계가 있는 데이터 테이블들을 모아둔 저장공간
: 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어
show databases;
: database 목록 확인
create database testdb;
use testdb;
drop database testdb;
: testdb 데이터 베이스 삭제
use mysql;
select host, user from user;
: 사용자 정보는 mysql(DBMS 이름)에서 관리하므로 일단 mysql 데이터베이스로 이동 후 조회
create user 'noma'@'localhost' identified by '1234';
: 현재 PC에서만 접속 가능한 사용자(noma)를 비밀번호(1234)와 함께 생성
create user 'noma'@'%' identified by '1234';
: 외부에서 접속 가능한 사용자(noma)를 비밀번호(1234)와 함께 생성
drop user 'noma'@'localhost';
drop user 'noma'@'%';
: 현재 PC에서만 접근 가능한 noma 계정 삭제
: 외부에서 접근가능한 noma 계정 삭제
create database testdb;
create user 'noma'@'localhost' identified by '1234';
show grants for 'noma'@'localhost';
: 사용자에게 부여된 모든 권한 목록을 확인
grant all on testdb.* to 'noma'@'localhost';
: 현재 PC에 접근가능한 noma에게 testdb의 모든 권한을 부여
revoke all on testdb.* from 'noma'@'localhost';
: 사용자에게 특정 데이터베이스의 모든 권한을 삭제
flush privileges;
: 수정내용이 적용되지 않은 경우 새로고침해본다.
create database zerobase default character set utf8mb4;
: zerobase라는 이름의 데이터베이스 생성
: utf8(다국어를 사용하겠다.), mb4(이모지 문자도 사용하겠다.)
: 데이터베이스 안에서 실제 데이터가 저장되는 형태이고, 행(Row)과 열(Column)로 구성된 데이터 모음이다.
create table tablename
(
columnname datatype,
columnname datatype,
...
);
create table mytable(id int, name varchar(16));
: id(int)(컬럼명(데이터타입))와 name(varchar(16)) 칼럼을 가지는 mytable이라는 이름의 테이블 생성. (varchar: 문자형)
show tables;
: 테이블 목록 확인
desc mytable;
: mytable이라는 이름의 table 정보 확인
alter table mytable rename person;
: mytable이라는 table 이름을 person으로 변경
alter table person add column agee double;
: person 테이블에 agee(double) 컬럼 추가
alter table person modify column agee int;
: person 테이블의 agee 컬럼의 데이터 타입을 int로 변경
alter table person change column agee age int;
: person 테이블의 agee 컬럼 이름을 age로 변경, 데이터 타입도 int로 변경.
: 이 명령어의 경우, 데이터 이름과 타입을 동시에 바꿀 수 있다.
alter table person drop column age;
: person 테이블의 age 칼럼을 삭제
drop table person;
: person 테이블 삭제
use zerobase;
create table person
(
id int,
name varchar(16),
age int,
sex char
);
desc person;
insert into tablename (column1, column2, ...)
values (value1, value2, ...);
: 입력한 컬럼 이름의 순서와 값의 순서가 일치하도록 주의
insert into person (id, name, age, sex)
values (1, '이효리', 43, 'F');
: ID 값이 1인 이효리, 43세, 여자 데이터 추가
insert into person
values (2, '이상순', 48, 'M');
: 모든 컬럼값을 추가하는 경우에는 위와 같이 컬럼 이름을 지정하지 않아도 되지만, 입력하는 값의 순서가 테이블의 컬럼 순서와 일치하도록 주의
: ID 값이 2인 이상순, 48세, 남자 데이터 추가
select column1, column2, ...
from tablename;
: 테이블 내의 특정 칼럼에 대한 데이터를 조회
select name, age, sex from person;
: person 테이블 내의 이름, 나이, 성별 데이터를 조회
select * from person;
: person 테이블 내의 모든 칼럼에 대한 데이터를 조회
: sql문에 조건을 추가하며, select 뿐만 아니라 UPDATE와 DELETE에도 사용
select column1, column2, ...
from tablename
where condition;
: 테이블 내에서 조건을 만족하는 데이터 조회
select * from person where sex='F';
: person 테이블에서 성별이 여자인 데이터 조회
UPDATE tablename
SET column1 = value1, column2 = value2, ...
WHERE condition;
update person set age=23 where name='이효리';
: 이효리 나이를 23세로 수정
DELETE from tablename
where condition;
delete from person where name='이상순';
: 이상순 데이터 삭제
use zerobase;
create table celeb
(
id int not null auto_increment primary key,
name varchar(32) not null default '',
birthday date,
age int,
sex char(1),
job_title varchar(32),
agency varchar(32),
);
desc celeb;
insert into celeb values (1, '아이유', '1993-05-16', 29, 'F', '가수, 탤런트', 'EDAM엔터테인먼트');
insert into celeb values (2, '이미주', '1994-09-23', 28, 'F', '가수', '울림엔터테인먼트');
insert into celeb values (3, '송강', '1994-04-23', 28, 'M', '탤런트', '나무엑터스');
insert into celeb values (4, '강동원', '1981-01-18', 41, 'M', '영화배우, 탤런트', 'YG엔터테인먼트');
insert into celeb values (5, '유재석', '1972-08-14', 50, 'M', 'MC, 개그맨', '안테나');
insert into celeb values (6, '차승원', '1970-06-07', 48, 'M', '영화배우, 모델', 'YG엔터테인먼트');
insert into celeb values (7, '이수현', '1999-05-04', 23, 'F', '가수', 'YG엔터테인먼트');
select * from celeb;
: SELECT 문에서 데이터를 특정 칼럼을 기준으로 오름차순 혹은 내림차순 정렬하여 조회
select column1, column2, ...
from tablename
ORDER BY column1, column2, ... asc(or desc);
# celeb 테이블에서 이름과 나이를 나이순으로 조회
select age, name
from celeb
order by age asc;
# celeb 테이블에서 이름과 나이를 나이의 역순(내림차순)으로 조회
select age, name
from celeb
order by age desc;
# celeb 테이블에서 이름과 나이를 나이와 이름순으로 정렬하여 조회 (ASC를 생략해도 기본은 오름차순 정렬)
select age, name
from celeb
order by age, name;
# celeb 테이블에서 이름과 나이를 나이의 역순으로 정렬한 뒤 이름순으로 정렬하여 조회
select age, name
from celeb
order by age desc, name asc;
select name, age from celeb where age<=29 order by age;
: 나이가 29세보다 작거나 같은 데이터 검색
: 조건을 모두 만족하는 경우 TRUE
select col1, col2, ...
from tablename
where condiditon1 AND con2 AND con3 ...;
select * from celeb where age=29 AND sex='F';
: 나이가 29세이고 성별이 여성인 데이터 검색
: 하나의 조건이라도 만족하는 경우 TRUE
select col1, col2, ...
from tablename
where con1 OR con2 OR con3 ...;
select * from celeb
where (age<29 AND sex='F') OR (age>30 AND sex='M')
order by age, sex;
: 나이가 29세보다 작고 여자이거나 30세보다 크고 남자인 데이터를 나이와 성별 순으로 정렬하여 검색
: AND 가 OR 보다 우선순위가 높기 때문에 둘을 섞어 쓸 경우 AND를 먼저 처리한다. (위의 경우 조건문에 친 괄호가 사실상 무의미)
: 조건을 만족하지 않는 경우 TRUE
select * from celeb
where birthday>19891231 and NOT sex='F' or birthday<19790101 and NOT agency='안테나';
: 생일이 1990년 이후이면서 여자가 아니거나, 생일이 1979년 이전이면서 소속사가 안테나가 아닌 데이터 검색
: 조건값이 범위 사이에 있으면 TRUE
select * from celeb
where (NOT birthday BETWEEN 19800101 and 19951231 and sex'F') or (agency='YG엔터테인먼트' and NOT age BETWEEN 20 and 45;)
: 생년월일이 1980년에서 1995년 사이가 아니면서 여자이거나, 소속사가 YG엔터테인먼트이면서 나이가 20세에서 45세 사이가 아닌 데이터 검색
: 목록 안에 조건이 존재하는 경우 TRUE
select * from celeb
where NOT agency IN '나무엑터스' and '안테나' and '울림엔터테인먼트' and (sex='F' or age>=45);
: 소속사가 나무엑터스, 안테나, 울림엔터테인먼트가 아니면서, 성별이 여자이거나 나이가 45세 이상인 데이터 검색
: 조건값이 패턴에 맞으면 TRUE
select * from celeb
where job_title LIKE '가____%';
: 직업명이 '가'로 시작하고 최소 5글자 이상인 데이터 검색
select * from celeb
where job_title LIKE '%영화배우%' and job_title LIKE '%탤런트%';
: 영화배우와 탤런트를 병행하는 연예인 검색
select * from celeb
where job_title LIKE '%가수%';
: 직업명에 '가수'가 포함된 데이터를 검색
** 문제에서 문장 배열을 꼼꼼히 살펴볼 필요가 있다.