MYSQL 데이터베이스 생성 및 테이블 사용하기

noyo0123·2019년 11월 15일
0

데이터베이스 목록 보기

show databases;

데이터베이스 생성하기

create database hello_world_db; --hello_world_db라는 이름의 데이터베이스를 생성.

USE hello_world_db;  --hello_world_db데이터베이스를 사용하겠다 라고 MySQL에 알림.

데이터베이스 삭제

drop database hello_world_db;  --hello_world_db라는 이름의 데이터베이스 삭제

데이터베이스 사용하기, 현재 사용하는 데이터베이스 보기

use hello_world_db

select database();

테이블 생성하기

mysql> CREATE TABLE hello_world_db (
    -> id INT NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(20) NOT NULL,
    -> age INT UNSIGNED NOT NULL,
    -> married TINYINT NOT NULL,
    -> comment TEXT NULL,
    -> create_at DATETIME NOT NULL DEFAULT now(),
    -> PRIMARY KEY(id),
    -> UNIQUE INDEX name_UNIQUE (name ASC))
    -> COMMENT = '사용자 정보'
    -> DEFAULT CHARSET=utf8
    -> ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)

현재 데이터베이스의 테이블 보기

show tables;

데이터베이스의 테이블 정보

어떤 엔진쓰는지, rows개수 등등

show table status;

특정 테이블의 컬럼 정보 보기

cats 테이블에 무슨 열(column)있는지 확인

desc cats;

테이블 삭제

drop table cats;

테이블에 데이터 넣기

insert into cats(name, age) values ('momo', 7);


insert into cats( name, age) 
	values ('ya', 5),
    values ('mo', 5),
    values ('hae', 5);
    

데이터에 '따옴표 넣고싶으면 escape 문자 이용 \'

특정 테이블 데이터 조회

  • (asterisk) all을 의미

cats 테이블의 모든 컬럼을 조회하겠음.

select * from cats;

테이블 조회시 특정 조건에 해당하는 데이터만 보고싶을땐

where절 씁니다.

select * 
from city
where Population < 8000000
and population > 7000000;

where절은 다양한 관계연산자를 같이 사용합니다.

데이터가 숫자로 구성되어있어 연속적인 값은 BETWEEN ... AND 사용가능

select * 
from city 
where population between 7000000 and 8000000;

데이터가 숫자가 아니고 문자일때 여러 조건에 모두 해당하는 데이터를 조회하고싶을때 IN을 사용함.

한 글자 매치하기 위해서 '_' 사용

ko땡으로 시작하는 국가코드를 가진 도시 조회하기

select *
from city
where countrycode like 'ko_';

문자 뒤에 %를 쓰면 여러 글자를 매치할 수 있음.

tel 로 시작하는 도시 이름 조회하기.

select *
from city
where name like 'tel %';

문자열을 검색할때는 LIKE

select *
from city
where countrycode like 'ko_';

컬럼 초기값 설정하기

테이블 생성할때 넣으면 됩니다.

CREATE TABLE cats3
  (
    name VARCHAR(20) DEFAULT 'no name provided',
    age INT DEFAULT 99
  );

초기값에 NOT NULL도 추가

CREATE TABLE cats4
  (
    name VARCHAR(20) NOT NULL DEFAULT 'unnamed',
    age INT NOT NULL DEFAULT 99
  );

따라하기

INSERT INTO cats() VALUES();
 
SELECT * FROM cats;
 
INSERT INTO cats3() VALUES();
 
SELECT * FROM cats3;
 
INSERT INTO cats3(name, age) VALUES('Montana', NULL);
 
SELECT * FROM cats3;
 
INSERT INTO cats4(name, age) VALUES('Cali', NULL);

기본키 지정

PRIMARY KEY(컬럼명)

CREATE TABLE unique_cats
  (
    cat_id INT NOT NULL,
    name VARCHAR(100),
    age INT,
    PRIMARY KEY (cat_id)
  );

따라하기

mysql> INSERT INTO unique_cats(cat_id, name, age) VALUES(1, 'Fred', 23);
Query OK, 1 row affected (0.01 sec)

mysql>
mysql> INSERT INTO unique_cats(cat_id, name, age) VALUES(2, 'Louise', 3);
Query OK, 1 row affected (0.06 sec)

mysql>
mysql> INSERT INTO unique_cats(cat_id, name, age) VALUES(1, 'James', 3);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

기본키는 유일해야 구분하기 때문에 보통 AUTO_INCREMENT 속성을 사용함.

CREATE TABLE unique_cats2 (
    cat_id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100),
    age INT,
    PRIMARY KEY (cat_id)
);
INSERT INTO unique_cats2(name, age) 
 VALUES('Skippy', 4),
 VALUES('Jiff', 3),
 VALUES('Jiff', 3),
 VALUES('Jiff', 3),
 VALUES('Skippy', 4);

SELECT * FROM unique_cats2; 

외래키 지정

CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명) REFERENCES 참고하는테이블 (컬럼명)

ON UPDATE와 ON DELETE는 모두 CASCADE로 설정 : 사용자 정보가 수정되거나 삭제되면 그것과
연결된 댓글 정보도 같이 수정하거나 삭제한다는 뜻입니다. 그래야 데이터가 불일치하는 현상이 일어나지 않습니다.

만들어진 테이블 확인하는 명령어

mysql> DESC users;
+-----------+------------------+------+-----+-------------------+----------------+
| Field     | Type             | Null | Key | Default           | Extra          |
+-----------+------------------+------+-----+-------------------+----------------+
| id        | int(11)          | NO   | PRI | NULL              | auto_increment |
| name      | varchar(20)      | NO   | UNI | NULL              |                |
| age       | int(10) unsigned | NO   |     | NULL              |                |
| married   | tinyint(4)       | NO   |     | NULL              |                |
| comment   | text             | YES  |     | NULL              |                |
| create_at | datetime         | NO   |     | CURRENT_TIMESTAMP |                |
+-----------+------------------+------+-----+-------------------+----------------+
6 rows in set (0.01 sec)

테이블 제거

mysql> DROP TABLE users;

table의 row 데이터를 수정하기

UPDATE cats SET breed='Shorthair' WHERE breed='Tabby';

table row데이터 삭제

DELETE FROM cats WHERE age=4;

테이블 확인

mysql> SHOW TABLES;
+------------------+
| Tables_in_nodejs |
+------------------+
| comments         |
| users            |
+------------------+
2 rows in set (0.00 sec)

컬럼명 변경

ALTER TABLE todos CHANGE completed done TINYINT(1);

컬럼 타입 변경

mysql> ALTER TABLE todos MODIFY title varchar(400);
Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

컬럼 순서 변경

mysql> ALTER TABLE todos MODIFY completed TINYINT(1) AFTER UserId;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

이 외에도 컬럼 순서 바꾸기, 디폴트 값 변경, 컬럼 추가하기 등등

레퍼런스

profile
자바스크립트를 주언어로 개발을 배우고 있습니다. 서로 아는 것들을 공유해요~

0개의 댓글