통신이란
DB data base
DB ms 매니지먼트 시스템 / 오라클 mysql mairadb mongodb ... 데이터베이스 관리프로그램이다
다룰줄 아는 db 뭐야? dbms를 의미
프로세스 하나의 응용프로그램
프로세스 안에는 기본적으로 스레드가 존재
(여러 프로세스끼리 서로 공유하려면 포트를 열어서 통신(네트워크)을 해야한다)
포트가 있으면 다른포트간 공유가 안된다(네트워크통신없이는..)
스레드 자바스크립트로 얘기하자면 비동기라고 보면 된다
스레드가 여러개 데이터 공유가 가능하다
DBMS => 하나의 서버다 / 요청한 곳과 통신을 할수 있는 기능이 있다 데이터를 저장도 한다.
워크벤치 -> 연결해서 화면을 꾸며주는 툴이다 gui
mySQL (하나의 서버 , 통신을 할수 있다-> 서버역할도 한다 기본적으로 하드디스크에 저장한다)
접속한 mySQL 하드 디스크에 접속한다
데이터 저장
데이터의 형식이 중요하다
데이터베이스는 엑셀 하나
테이블은 엑셀안의 시트 하나
하나의 데이터베이스에는 여러테이블이 존재할수잇다
통신은 보내면 끝
커넥션은 연~~결
요청과 응답 후 연결이 됩니다
이후 쌍방향 통신이 된다
계속 통신을 하면
연결이 너무 많아진다
커넥션 풀
연결해놓은것들을 모아놓고 있는것
잠시 빌려주고 쓴뒤 돌려받는것
// cmd 창에서 sql 프롬프트 접근
C:\Users\JCH>mysql -uroot -p
//DATABASE 의 목록을 보여줘 DATABASES 의 S 빼먹지말기 , 명령어 끝날때 꼭 ; 붙여주기
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
//DATABASE 생성하기 ( homepage 란 database 만들어줘! * 간지나기 위해서 명령어는 대문자로 한다!!
MariaDB [(none)]>CREATE DATABASE homepage
+--------------------+
| Database |
+--------------------+
| homepage |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
//다시 SHOW DATABASES;로 확인해보면
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| homepage |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
//해당 DATABASE 연결하기
MariaDB [(none)]>USE homepage
Database changed
MariaDB [homepage]>
//TABLE 확인해보기
MariaDB [homepage]> SHOW TABLES;
Empty set (0.001 sec)
//TABLE 생성하기 (board 란 테이블 만들기, 들어가야 할거 글이 몇번째 인지 알아야할 인덱스, 글의 제목, 글의 내용, 글쓴이, 글이작성된 시간, 좋아요 갯수, 조회수 정도를 기본으로 하자 필드이름은 꼭 ''나 ``으로 묶어주자)
MariaDB [homepage]> CREATE TABLE board(
`idx` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`subject` VARCHAR(100) NOT NULL,
`content` TEXT NULL,
`name` VARCHAR(100) NOT NULL,
`date` TIMESTAMP default current_timestamp NOT NULL,
`like` INT(11) default 0 NOT NULL,
`hit` INT(11) default 0 NOT NULL
);
// 나중에 한글이 입력안되면 CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 붙여서 만들기
//INT(숫자들. 최대값 10자리숫자까지 표현하고 최대값에 도달해도 보기좋게 0부터 시작해서 정렬되서 11로 쓴댐 범위 -2,147,483,648 ~ 2,147,483,647)
//VARCHAR(string 이라고 보면 됨 100자정도..?)
//TEXT(string 인트처럼 10자리수까지 가능 2,147,483,647자..?)
//TIMESTAMP 날짜와 시간 불러온다
// PRIMARY KEY 고유키 하나만 존재한다. 인덱스가 중복되면 안되니까!
// AUTO_INCREMENT 1씩 자동증가 PRIMARY KEY와 같이 쓰면 고유의 키가 1씩 증가하며 계속 생긴다. 그래서 중간을 지우고 새로 입력해도 지워진번호를 다시 쓸수없다.
// NOT NULL 값이 없으면 안된다!! , 인덱스번호없는 게시물 , 제목없는 게시물 , 글쓴이없는 게시물 들
// NULL 글내용은 없이 써도 빈값을 보여줘
// default 기본값으로 입력이 안되면 이걸써줘
// current_timestamp 생성시간 자동 기록해줘!
// 생성한 테이블 잘 입력됬는지 확인하기 DESC table
MariaDB [homepage]> DESC board;
+---------+--------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------------------+----------------+
| idx | int(11) | NO | PRI | NULL | auto_increment |
| subject | varchar(100) | NO | | NULL | |
| content | text | YES | | NULL | |
| name | varchar(100) | NO | | NULL | |
| date | timestamp | NO | | current_timestamp() | |
| like | int(11) | NO | | 0 | |
| hit | int(11) | NO | | 0 | |
+---------+--------------+------+-----+---------------------+----------------+
7 rows in set (0.014 sec)
// board TABLE에 내용 넣어보기 (다른 애들은 자동으로 입력되거나 없어도 되니 채워넣어야할 필드 field subject, field content, field name 를 정해주고 데이터 넣는다)
MariaDB [homepage]> INSERT INTO board(subject, content, name) VALUES ('제목입니다','내용','jch')
MariaDB [homepage]> INSERT INTO board(subject, content, name) VALUES ('제목입니다2','내용2','jch2')
MariaDB [homepage]> INSERT INTO board(subject, content, name) VALUES ('제목입니다3','내용3','jch3')
// 데이터 잘 들어갔는지 확인해보기 SELECT * FROM table
MariaDB [homepage]> SELECT * FROM board
-> ;
+-----+-------------+---------+------+---------------------+------+-----+
| idx | subject | content | name | date | like | hit |
+-----+-------------+---------+------+---------------------+------+-----+
| 1 | 제목입니다 | 내용 | jch | 2022-05-06 16:03:02 | 0 | 0 |
| 2 | 제목입니다2 | 내용2 | jch2 | 2022-05-06 16:13:24 | 0 | 0 |
| 3 | 제목입니다3 | 내용3 | jch3 | 2022-05-06 16:08:20 | 0 | 0 |
+-----+-------------+---------+------+---------------------+------+-----+
3 rows in set (0.001 sec)
// 데이터 바꿔보기 (2번 테이블의 제목을 'asdf' 란 내용으로 바꾸기)
// (idx=1 의 subject 를 'asdf' 로 바꾸겠다 )
// *** 끝날때 꼭 ; 쓰기 안쓰면 계속 물어본다 ㅋㅋㅋㅋ
MariaDB [homepage]> UPDATE board SET subject='asdf' WHERE idx=1
MariaDB [homepage]> SELECT * FROM board
-> ;
+-----+-------------+---------+------+---------------------+------+-----+
| idx | subject | content | name | date | like | hit |
+-----+-------------+---------+------+---------------------+------+-----+
| 1 | 제목입니다 | 내용 | jch | 2022-05-06 16:03:02 | 0 | 0 |
| 2 | asdf | 내용2 | jch2 | 2022-05-06 16:13:24 | 0 | 0 |
| 3 | 제목입니다3 | 내용3 | jch3 | 2022-05-06 16:08:20 | 0 | 0 |
+-----+-------------+---------+------+---------------------+------+-----+
3 rows in set (0.001 sec)
// 데이터 지워보기 (2번 테이블 지워보지)
MariaDB [homepage]> DELETE FROM board WHERE idx=2
MariaDB [homepage]> SELECT * FROM board;
+-----+-------------+---------+------+---------------------+------+-----+
| idx | subject | content | name | date | like | hit |
+-----+-------------+---------+------+---------------------+------+-----+
| 1 | 제목입니다 | 내용 | jch | 2022-05-06 16:03:02 | 0 | 0 |
| 3 | 제목입니다3 | 내용3 | jch3 | 2022-05-06 16:08:20 | 0 | 0 |
+-----+-------------+---------+------+---------------------+------+-----+
2 rows in set (0.001 sec)
// 데이터 다시 넣어서 인덱스번호 확인해보기
MariaDB [homepage]> INSERT INTO board(subject, content, name) VALUES ('제목입니다2','내용2','jch2')
MariaDB [homepage]> SELECT * FROM board
-> ;
+-----+-------------+---------+------+---------------------+------+-----+
| idx | subject | content | name | date | like | hit |
+-----+-------------+---------+------+---------------------+------+-----+
| 1 | 제목입니다 | 내용 | jch | 2022-05-06 16:03:02 | 0 | 0 |
| 3 | 제목입니다3 | 내용3 | jch3 | 2022-05-06 16:08:20 | 0 | 0 |
| 4 | 제목입니다2 | 내용2 | jch2 | 2022-05-06 16:13:24 | 0 | 0 |
+-----+-------------+---------+------+---------------------+------+-----+
3 rows in set (0.001 sec)
// 데이터작성시간 다른건 마지막 데이터 확인된걸 활용해서 그렇다
// 테이블 작성 쿼리문 같은경우 워크벤치와 같은 GUI로 쓸땐 편했는데 프롬프트로 입력하기 꽤 어렵다.
// 그래서 vscode 에 .sql 이란 확장명으로 파일을 생성 후, 그 안에 쿼리문 내용을 넣고 파일명 오른쪽 클릭하여 Copy Path 한다.(절대경로와 상대경로는 상황에 맞춰사용) 그 다음 프롬프트 창에 SOURCE 경로명 해주면 사삭 들어가진다.
// 작은 문제가 있는데 경로에 폴더명이 대문자로 시작하는거 있으면 에러남 (ex : C:\Users\JCH\Documents\GitHub\block4\kdigital4\0newnodejs\220506\sql\SQL.sql) U 에러 J 에러 D 에러 G 에러 ㅋㅋㅋㅋㅋㅋㅋ 문제점은 알아서 그냥 C드라이브에 소문자 폴더 만들어서 학습함 C:\work\SQL.sql )