broom7946 2023. 4. 6. 14:16

  MySQL에서 데이터베이스로 들어갈 때
mysql -u root -p 한 뒤 나중에 root 사용자의 패스워드 rootoor를 입력하거나
mysql -u root -prootoor식으로 패스워드를 지정해서 들어가도 된다.
=>mysql -uroot -p rootoor 하면 rootoor라는 데이터베이스를 지정해서 들어간다는 의미이므로 오류이다. 
*** 현재 mysql과 mariadb는 상호 호환되어 보인다.

  paul 사용자 생성과 삭제는 
a) create user 'paul'@'localhost' identified by 'paul'; 해서 생성해주고 
b) drop user 'paul'@'localhost'; 해서 삭제한다.

  사용자 root의 패스워드 변경은
a) show databases; 해서 먼저 데이터베이스를 보고 
b) use mysql; 해서 mysql 데이터베이스를 사용한다고 하고 
c) show tables; 해서 mysql 데이터베이스에 있는 테이블들을 보고
d) update mysql.user 
   set authentication_string=PASSWORD('rootoor') 
   where user='root'; 해서 root 사용자의 패스워드를 변경할 수도 있다.

  paul 사용자에게 접속 권한 부여하기
- paul 사용자가 로컬과 원격에서 로그인하는 것을 허용하고, test DB와 그 아래의 모든 Table에 모든 권한을 준다면 
a) 필요하면 create user ‘paul’ identified by ‘paul’; 해서 paul 사용자를 만들고
b) grant all privileges on test.* to 'paul'@'localhost' identified by ‘paul’; 와
c) grant all privileges on test.* to 'paul'@'%' identified by ‘paul’; 해서 로컬과 원격 호스트에서 paul 사용자로 들어와서 test 데이터베이스 아래의 모든 테이블에 대해서 작업하게 해준다.
d) flush privileges; 해서 권한을 갱신한다.   

show databases; 해서 데이터베이스를 보고 
use test; 해서 test 데이터베이스를 사용한다고 하고
show tables; 해서 이 test 데이터베이스에 속한 테이블들을 보고 
desc users; 해서 users 테이블의 구조(항목_명(Column_name), 크기, ...)를 보고 
select user, password, plugin from users; 해서 저장된 데이터를 본다.

select version();나 select curdate(); 등을 내장된 함수를 사용할 수도 있다.
MySQL 명령어 뒤에는 ;을 써준다.
문자와 년도는 ' '로 묶는다.
SQL query문에서는 대소문자 구별이 없다. 
=>select name, password from users;이나 
  SELECT name, PASSWROD FROM users;는 동일하다.
하지만 데이터는 대소문자를 구별한다!!! 
=>데이터에 Lee는 lee로 사용할 수 없다.
한 줄 코멘트는 --, 여러줄 코멘트는 /* ~ */를 사용한다.

  테이블 생성 시에는 
create table table_name (항목_명 데이터_타입(크기), ......); 해주면 된다.
여기서 not null, primary key 등 설정을 Constraint(제약조건)이라고 한다. 
auto increment는 자동으로 숫자가 증가한다는 의미이다.
id int not null primary key auto_increment 식이 가능하다.

create table centos_tbl (
id int not null auto_increment, 
first_name varchar(20),
last_name varchar(20) not null,
city varchar(20),
phone varchar(15),
primary key (id) 
        ); 식이다.

  테이블_명 변경은 
rename table 기존_테이블_명 to 신규_테이블_명 식으로 해준다.

  테이블에 데이터를 넣어준다.
insert into 테이블_명 (항목1,항목2, ...) values(값1,값2, ...)식이다.
=>입력되는 데이터 수가 항목 수와 같을 때에는 항목들을 생략할 수 있다. 
=>원래 항목 수가 10개일 때 
10개의 데이터를 넣을 땐 항목 생략가능하지만 
7개의 데이터만 넣을 때에는 항목에서 7개를 지정해 주어야 하고
7개의 데이터만 넣을 때 항목를 생략한다면 나머지 3개는 ''이나 NULL 값으로 주어서 10개를 맞춰     주어야 한다. 

insert into cent_tbl (id, first_name, last_name, city, phone) 
              values ('01', 'Bee', 'You', 'Seoul', '111-1111'); 하는데 ‘01’ 대신 id를 넣어도 되고, 5개의 values를 모두 넣는다면 앞의 (id, first_name, last_name, city, phone) 부분을 빼고 써도 된다.
insert into cent_tbl values (id, 'Woo', 'Kwan', 'Pusan', '222-2222');   
insert into cent_tbl values (id, 'Bee', 'Jang', 'Incheon', '333-3333');
insert into cent_tbl values (id, 'Jaryong', 'Jo', 'Kangreong', '444-4444');
insert into cent_tbl values (id, 'Cho', 'Ma', '', '555-5555'); 
insert into cent_tbl values (id, 'Chung', 'Whang', 'Kwangju', null); 
insert into cent_tbl values (id, 'Ryang', 'Jegal', 'Daejeon', '777-7777'); 
insert into cent_tbl (id, first_name, last_name, city) values (id, 'Sun', 'You', 'Suwon'); 해서 한 줄 한 줄 입력할 수 있다.
=>하지만 대부분 파일에서 입력한다.
데이터가 들어 있는 파일 내의 데이터는 delimiter(구분자)를 엄격히 지켜져 저장되어져 있어야 한다. 구분자는 , ; : Tab space 등이다. 또 첫 줄에 데이터가 아닌 항목_명(열_명)이 있으면 new line이라는 지시어로 첫 줄을 무시하고 로드시킬 수도 있다. 

  이제 구조가 같은 테이블을 데이터 없이 복사하는데
create table name name_tbl LIKE cent_tbl; 해서 cent_tbl과 구조가 같은 name_tble 테이블을 생성한다.
  모든 테이블의 구조와 데이터를 복사해 온다면
create table abc_tbl SELECT * FROM cent_tbl;
  일부 데이터만 복사해 온다면
create table xyz_tbl SELECT 항목1,항목2,항목3 from cent_tbl;
  다른 데이터베이스 mysql 내의 user 테이블을 centos_db 내의 userss_tbl로 복사해온다면 
create table userss_tbl LIKE mysql.user; 하고  
insert into 123_tbl SELECT * FROM mysql.user; 하거나 
create table userss_tbl SELECT * FROM mysql.user; 해서 한번에 테이블 생성과 데이터 입력을 해도 된다.

  테이블 내의 항목(컬럼:열), 행(로) 삭제
삭제는 두 가지가 있는데 
▪ DELETE : 전체 데이터나 일부 데이터를 삭제하고 테이블은 그대로 임, 삭제한 데이터 복원 가능 
▪ TRUNCATE : 모든 데이터만 삭제하고 테이블은 그대로 임, 인텍스 등도 삭제, 삭제한 내용 복원 불가

select col1, col2, .... from table_name
where 조건='';이 기본 패턴이다.
열, 데이터 변경, 데이터 업데이트, 데이터 삭제, 열 삭제

  항목(열_명) 추가, 변경은 
alter table table_name 
add ~
OR change ~ 식으로 해준다.

  필드 데이터의 내용 변경/삽입
update table_name
set 설정 식으로 해준다.

  열과 행 삭제 
  행과 열의 삭제를 알아보자.
■ 행 삭제는 delete ~ 를 사용한다.
delete from centos_tbl 
where first_name='Ryang'; 해서 제갈량의 레코드를 삭제하고,  
■ 열(항목_명) 삭제는 drop ~을 사용한다.
alter table centos_tbl 
drop column address; 해서 address 컬럼을 삭제한다.

  생성된 데이터베이스/테이블 복사/백업
a. 먼저 mysqldump --help 해서 사용법을 본다.
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]식으로 보인다. 매우 많은 옵션을 볼 수 있다.
b. emp_db 아래에 있는 모든 테이블을 백업한다고 하면, 
mysqldump -u root -p emp_db > emp_db_bak.sql 해주고, 관리자 root의 rootoor를 입력해준다. 
=>mysqldump -u root -p emp_db empss > empss_bak.sql 해서 emp_db 안의 empss 테이블만 백업해줄 수도 있다. emp_db.empss가 아니므로 주의한다.