생활코딩에서 복습한 기념으로
기본적인 데이터베이스 명령어인 테이블 생성, 조회 등을 기록해보려함
Windows에서 MySQL을 사용하기 위해서는 여기로 들어가 다운로드 하면된다
https://dev.mysql.com/downloads/mysql/
데이터베이스 생성, 조회, 사용 데이터베이스 지정 명령어
CREATE DATABASE 데이터베이스명;
SHOW DATABASES;
USE 데이터베이스명;
예제
//opentutorials 라는 데이터베이스 테이블 생성
mysql> create database opentutorials;
Query OK, 1 row affected (0.01 sec)
//데이터베이스들 모두 조회
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| bob |
| information_schema |
| mysql |
| opentutorials |
| performance_schema |
| sakila |
+--------------------+
6 rows in set (0.00 sec)
//사용할 데이터베이스 선택 - opentutorials 라는 디비 사용
mysql> use opentutorials;
Database changed
위의 명령어들을 적절히 사용해서 DB 테이블을 추가하고, 선택하여 사용할수있다
DB 테이블 추가 명령어
CREATE TABLE 테이블명 (컬럼1 자료형, 컬럼2 자료형, ... , 컬럼N 자료형, PRIMARY KEY(PK 지정할 컬럼) );
예제
//DB 테이블 생성
//topic이라는 테이블 생성
mysql> create table topic(
-> id int(11) not null auto_increment,
-> title varchar(100) not null,
-> description text null,
-> created datetime not null,
-> author varchar(30) null,
-> profile varchar(100) null,
-> primary key(id));
Query OK, 0 rows affected, 1 warning (0.10 sec)
topic이라는 이름의 테이블을 생성하고 id를 primary key로 지정해준다
primary key 지정을 해주지않으면 오류가 발생하니 마지막에 잊지말고 지정해주자
-> id int(11) not null auto_increment
-> 컬럼 명, 자료형, 데이터 null (=비어있다) 가능 유무, 자동으로 1씩 증가
int(11)은 11자리까지만 보여준다고 생활코딩에서 그런것같음
조금 헷갈려서 int(4) 와 int() 등의 차이가 뭔가 했더니
디비에 저장되는 범위는 int 원래의 자료형의 범위로 모두 동일하며
보여지는 자릿수의 차이인가 여튼 그렇다함
(추후 자세히 찾아보기)
not null은 비어있는 값이면 안된다는 것, 반대로 null 이면 공백 데이터 허용
id의 값을 삽입할때마다 추가로 기입하지 않아도 자동으로 증가되게끔 해주는 auto_increment 속성을 추가해주었다
위와 동일한 방식으로 id를 제외한 다른 title, description 등의 칼럼에 데이터를 넣어줌
varchar는 1~255bytes까지 저장이 가능하고 text는 65,535 characters까지 저장이 가능하다고 하여
제목, 작성자, 프로필을 저장할 title, author, profile은 varchar 자료형을 사용하였고
내용이 길어질 수 있으니 description은 text 자료형을 사용했다
created에 사용한 datetime은 날짜를 표시할때 사용하면 된다
등록된 테이블 조회, 특정 테이블 상세 조회
SHOW TABLES;
DESC 테이블명;
예제
//DB 테이블 조회
mysql> show tables;
+-------------------------+
| Tables_in_opentutorials |
+-------------------------+
| topic |
+-------------------------+
1 row in set (0.01 sec)
//테이블 상세 내용 확인 - 이때 세미콜론을 붙여줘야 쿼리문이 작성완료된것으로
//세미콜론을 깜빡하고 엔터를 쳐도 다음줄에서 다시 쳐주면 된다
mysql> desc topic
-> ;
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| title | varchar(100) | NO | | NULL | |
| description | text | YES | | NULL | |
| created | datetime | NO | | NULL | |
| author | varchar(30) | YES | | NULL | |
| profile | varchar(100) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
6 rows in set (0.01 sec)
데이터베이스를 조회할때와 마찬가지로
show tables; 를 사용하면 등록된 테이블들을 한번에 조회할 수 있다
이때, 테이블마다의 컬럼(column)이 모두 다르고, 데이터(row)가 다르므로
테이블마다의 내용을 자세하게 보고싶을때는 desc+ 테이블 명; 을 입력해주면
테이블마다의 상세 내용(attribute)을 확인할수있다
테이블에 데이터 추가, 테이블에 추가된 모든 데이터 조회
INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ... , 칼럼명N)
VALUES(데이터1, 데이터2, ... , 데이터N);
SELECT * FROM 테이블명;
예제
// topic 테이블에 데이터 추가하기
mysql> insert into topic (title, description, created, author,profile)
-> values ('mysql', 'mysql is ... ' , now(), 'yunny', 'developer');
Query OK, 1 row affected (0.02 sec)
//저장한 데이터 불러오기
mysql> select * from topic ;
+----+-------+---------------+---------------------+--------+-----------+
| id | title | description | created | author | profile |
+----+-------+---------------+---------------------+--------+-----------+
| 1 | mysql | mysql is ... | 2021-10-20 17:46:57 | yunny | developer |
+----+-------+---------------+---------------------+--------+-----------+
몇개 더 추가해본 예제
mysql> select * from topic
-> ;
+----+------------+-------------------+---------------------+--------+---------------------------+
| id | title | description | created | author | profile |
+----+------------+-------------------+---------------------+--------+---------------------------+
| 1 | mysql | mysql is ... | 2021-10-20 17:46:57 | yunny | developer |
| 2 | oracle | oracle is ... | 2021-10-20 17:48:38 | yunny | developer |
| 3 | sql server | sql server is... | 2021-10-20 17:49:57 | duru | database administrator |
| 4 | postgresql | postgre sql is... | 2021-10-20 17:50:38 | taeho | dataschientist, developer |
| 5 | mongodb | mongodb is ... | 2021-10-20 17:51:04 | egoing | developer |
+----+------------+-------------------+---------------------+--------+---------------------------+
5 rows in set (0.00 sec)
select * 은 ALL의 모두를 뜻하여 topic 테이블의 모든 데이터를 가져온다는 뜻이다
참고 :
https://opentutorials.org/course/3161/19537
※틀린부분, 오타가 있다면 알려주세요
'데이터베이스' 카테고리의 다른 글
[MySQL] zerofill이란, int(4)과 int 표현의 차이는? (0) | 2021.10.31 |
---|---|
[MySQL] 워닝 문구 상세 내용 확인하는 법 (feat. Warning 1681) (0) | 2021.10.20 |