서버는 창고 번호가 있다. (대략 6만개 정도가 있다)
window -> cmd -> ipconfig (본인 ip주소를 확인할 수 있다) -> 이더넷 어뎁터 이더넷 ip 주소 확인 가능 -> SQLyog는 3306이라는 1개의 포트를 사용한다. ->
- 웹 브라우저는 웹서버를 알고 있다. : ㅇ
-http://localhost:8023
- 웹 서버는 웹 브라우저를 알고 있다. : X
-> 나는 롯데리아를 알고 있어서 찾아가지만 롯데리아는 나를 모른다. 나는 수백만 손님 중에 한명일 뿐이다.
- 웹 서버는 PHP를 알고 있다. : ㅇ
- PHP는 웹 서버를 알고 있다. : X
* PHP 출력 -> echo
- PHP는 DB가 존재하는지 알고 있다. : ㅇ
(그래서 연결이 가능하다)
- DB는 PHP를 알고 있다. : X
(수많은 손님 중에 한명일 뿐이다)
- PHP한테 하청을 준다. DB한테 요청을 해서 PHP가 다시 돌려받아 html로 꾸며서 웹브라우저에 실행 결과값을 보여준다.
[ 요청 순서 ]
- 웹브라우저 -> 웹서버(아파치) -> PHP -> DB -> PHP -> 웹서버(아파치) -> 웹브라우저
마리아 DB
- 종류 2가지 -
Oracle (유료_상당한 고가)
MySQL (무료_Oracle과 비슷하다) --> Oracle이 인수
자사의 제품도 있는데 MySQL을 제대로 관리할 수 있을까. 라는 의심에
지금의 마리아 DB를 만들어 낸다.
MySQL, MariaDB 완전히 같은 말은 아니지만 같다고 보면 된다.
XAMPP : 윈도우 개발환경 세팅에 최적화된 툴(쉽게 도와주는 툴)
--> 이 프로그램을 설치하면 마리아DB가 함께 설치된다.
SQLyog -> 기존 계정을 삭제해도 무관 -> 파일 -> 새연결(브라우저에 주소를 입력하듯이) -> 즐겨찾기를 추가하는 작업(예시_로컬 MariaDB_이름) -> MySQL Host Address(접속하려는 IP 주소_ 어짜피 내 컴퓨터에 접속할 것이므로 localhost 라고 입력한다 : localhost -> 사용자 이름 : root -> pw : 없으니까 비워둔다. -> 연결 -> 예
[ 접속 후 ]
도구 -> 환결 설정 -> 글꼴 편집기 -> consolas 선택 -> 탭 크기 4(8 은 진짜 tab으로 들어가서 공간이 넓어진다. 개발할 경우 불편하다. 4로하면 space 4번의 효과로 개발 환경에 적합하다) -> 삽입공간 체크
[ 실행 ]
SHOW DATABASES; -> SYSTEM 키워드는 소문자로 입력하면 자동으로 대문자 치환이 된다.
[ ; ] -> 1개의 문장 단위.
예시)
CREATE DATABASE a1;
SHOW DATABASES;
-> 명령이 2개 이고 위에 있는 것부터 실행 된다.
F9 -> 실행
"쿼리가 실행되지 않았습니다. SQL 창에서 쿼리를 입력하시거나 쿼리 안에 커서를 놓으십시오.
==> 사용자야. 2개의 명령 중에 니가 실행하려고 하는게 뭔지 나는 모르겠다.
( 1개의 명령만 존재할 경우에 F9를 누르면 실행이 잘 된다. )
ctrl + F9 : 전체를 실행한다.
but 위의 2가지 명령을 전체 실행하면 오류 발생.
a1을 실행할 수 없다. 이미 DATABASE가 존재하기 때문.
---------------------------------------------------------------------------------------------------------
[ 앞으로는 F9, ctrl + F9 를 쓰지 말고 ]
SHOW DATABASES; 명령어가 존재하는 경우 실행하려는 명령어를 드래그 한 후 ★ctrl + F9
--> 앞으로 개발하면서 수많은 사용을 할텐데, 실행 명령어를 드래그하고 사용하지 않는 경우
DATABASE가 날아가 버릴 수도 있다. 1개의 DATABASE가 날아가버리면 정말 큰일이다.
* 왼쪽의 정보는 현재 내가 어떤 계정으로 내 컴퓨터 또는 다른 IP주소의 DB를 이용 중인지 알려준다.
그 아래는 DATABASE 종류, 개수
# 'a1' 데이터 베이스 생성
CREATE DATABASE `a1`; --> DATABASE를 만드는 행위 / DATABASE 이름은 ``(1 옆에 있는 따옴표)로 감싸는게 정석이다. 안해도 상관은 없다.
★ 실행 -> 드래그 -> ctrl + F9 : 1개의 쿼리가 실행되었고 1개가 성공했다.
실행을 했는데 좌측에 a1 DATABASE가 생성되지 않는 것은 계정 위에 마우스를 올리고 F5를 눌러야 생성한 DATABASE가 추가 된다.
# `a1` 데이터 베이스 삭제
DROP DATABASE a1; --> ctrl + F9
# 데이터 베이스 리스트
SHOW DATABASES; -> 이 계정이 생성한(관리하는) DATABASE를 모두 리스팅.
[ 프로그램 사용 순서 ]
1. MySQL 서버를 켠다.
2. MySQL 클라이언트로 서버에 접속한다.
3. 그 다음에 명령어를 입력한다.
# 전체 데이터베이스 리스팅
SHOW DATABASES; -> 복수형인 이유 : DATABASE가 여러개이니까.
# `mysql(DATABASE 이름) 데이터 베이스 선택
USE mysql; -> 드래그한 후 ctrl + F9 를 입력하면 좌측 상단에 사용하려는 데이터 베이스가 선택이 된다.
(마우스로 데이터베이스를 선택해도 효과는 똑같다. 이왕이면 키보드로 작동하는 법을 익히는 것이 좋다)
# 테이블 리스팅 ( DATABASE 의미 : folder _ 데이터베이스 안에는 각각의 엑셀 파일이 존재한다. 엑셀 파일이 테이블이라고 부른다)
SHOW TABLES; -> 테이블 리스트 좀 가져와바.
★ 만약 데이터베이스를 선택하지 않고 SHOW TABLES; 를 실행하면 No database seleted 라는 오류 코드 발생
==> 데이터베이스를 선택한 뒤 SHOW TABLES; 를 실행하면
Tables_in_database이름
~~~
~~~
~~
# 특정 테이블의 구조 (이 안의 특정 테이블의 구조를 보고 싶을 경우)
DESCRIBE(설명하다) db; --> DESC db; 라고 해도 무관.
# `test` 데이터 베이스 선택
USE test;
# 테이블 리스팅
SHOW TABLES; -> DATABASE를 선택한 뒤 실행시켜야 한다. 비어있는 경우 '결과'에 아무것도 출력되지 않는다.
# 기존에 A1 데이터베이스가 존재 한다면 삭제
DROP DATABASE IF EXISTS a1 ; ==> a1이라는 DATABASE가 존재한다면 삭제하라.
DROP DATABASE a1; ==> a1 이라는 DATABASE를 삭제하라.
# 새 데이터베이스(`a1`) 생성
CREATE DATABASE `a1`;
# 데이터베이스 추가 되었는지 확인
SHOW DATABASES;
# 테이블 확인
USE a1; ( --> 이 명령을 해주지 않으면 DATABASE의 포커스는 절대 변하지 않는다.
DATABASE a1의 테이블을 확인하고자 한다면 꼭 먼저 확인하려는 DATABASE를 선택해준 후
테이블을 보여달라는 명령을 해야 한다. )
SHOW TABLES;
"이제부터 표를 만들겁니다. _ 샘 말씀 " // 테이블. 표. 1개가 엑셀 1개이다.
1행과 2행는 같지 않다. 다르다.
차이 : 1행(메타데이터 : 데이터에 대한 데이터)
테이블을 만든다 ==> 1행을 만든다. 구조를 잡는다. 테이블을 짠다 라고 말한다.
2행 : 표에 데이터 추가한다. 라고 말한다.
# 게시물 테이블 article을 만듭니다. --> 인터넷 게시물을 만든다.
# VARCHAR(100) => 문자 100개 저장 가능
# text => 문자 많이 저장 가능
CREATE DATABASE -> DB 만들겠다.
CREATE TABLE -> 테이블을 만들겠다. 라는 의미
CREATE TABLE article (
title,
`body` ( BODY -> system에서 사용하는 언어다. 싫어도 ``을 사용해서 구분해준다)
);
오류 발생 : You have an error in your SQL syntax; --> 이런 문법은 없다. 문법 오류다. 라는 의미.
MySQL은 표(테이블)을 전문적으로 다루기 위해서 만들어진 툴이다.
위의 내용으로는 정보가 부족하다.
CREATE TABLE article (
title CHAR(100), --> title 이라는 것 안에는 문자가 100개까지 들어간다. 알파벳은 100개 들어갈 수 있으나 한글은 개당 2~3바이트이기 때문에 약 33글자 ~ 50글자 정도 들어갈 수 있다. (선임이 이번 게시판 제목의 글을 최대 100자까지 들어가야해. 라고하면 (200)으로 수정해주면 된다.
`body` CHAR(25500), --> 본문이 훨씬 더 기니까 문자 길이를 늘려줘야 한다.
그러나 CHAR 로는 글자 개수 한계가 있으므로 다른것을 입력해주어야 한다.
);
CREATE TABLE article (
title CHAR(200),
`body` TEXT -> 엄청나게 긴 글을 담을 때 사용. 그러나 속도가 좀 느리다. 다음이 없기 때문에 TEXT 뒤에는 , 를 붙이지 않는다.
);
# 잘 추가되었는지 확인, 리스팅과 구조까지 확인
SHOW TABLE;
DESC article; -> 리스팅과 구조 확인하는 명령어
# 데이터 하나 추가 ( title = 제목, body = 내용 )
INSERT INTO article 의미 : 데이터를 article table 안에다가 넣겠다.
SET title = '제목', * table 의 구조는 title 과 body 2개로 위에서 만들었다. 그러므로 2개 입력
`body` = '내용';
# 데이터 조회 (title 만) *SELECT : 검색하는 것, 선택하는 것
SELECT title
FROM article; 의미 : article(어떤) table 안에 있는 title을 선택하겠다. "article table 안에 있는 title을 가져와라 "
# 데이터 조회(title, body)
SELECT title, `body`
FROM article; 의미 : article table 안에 있는 title, body 선택하겠다. 조회하겠다. 검색하겠다.
# 데이터 조회(body, title)
SELECT `body`, title
FROM article; --> 검색하는 순서를 바꿔서 조회하려고 하면 위치만 바꿔주면 된다.
# 데이터 조회(*) 의미 : 귀찮다. 전부다 나오게 하겠다.
SELECT *
FROM article; 의미 : article table 안에 있는 모든 데이터를 가져와라.
# 데이터 또 하나 추가 (title = 제목, body = 내용 )
INSERT INTO article
SET title = '제목',
body = '내용'; --> 게시물 제목, 내용이 같은게 존재할 수 있을까요? 네. 존재할 수 있습니다. 가능합니다.
# 데이터 조회 ( *, 어떤게 2번 게시물인지 알 수 없음 )
SELECT * title, body 2개 모두 조회된다.
FROM article;
(1번, 2번 구별할 수 없다. ★ 테이블 구조를 만들 때 번호를 깜빡했다. 번호를 매겨서 구분을 했어야 한다. )
SELECT title(or `body`)
FROM article; 이라고 입력하면 1개의 메타데이터에 대한 데이터가 2개 조회된다.
바로 아래에 DROP TABLE article; 을 입력해서 article table을 삭제하고 다시 만들 수 있지만
그렇게 하면 데이터가 모두 날아가므로 그렇게 할 수 없다.
그래서 아래 ↓
★ 칼럼 삭제 : ALTER TABLE [테이블명] DROP [컬럼명];
★ 칼럼명 변경 및 타입 변경 : ALTER TABLE [테이블명] CHANGE [컬럼명] [변경할 컬럼명] VARCHAR(12);
★ 칼럼 타입 수정 : ALTER TABLE [테이블명] MODIFY [칼럼명] VARCHAR(14);
★ 테이블명 수정 : ALTER TABLE [테이블명] RENAME [변경할 테이블명];
★ 테이블 삭제 : DROP TABLE [테이블명];
# 테이블 구조 수정 (id 칼럼 추가, first) : title, body, id 하나하나를 칼럼 이라고 한다.
ALTER TABLE article ADD COLUMN id INT(10) FIRST; --> 수정하겠다. 무엇을? article table을. 어떻게? 번호. (CHAR X) 숫자 INT 를 추가하겠다. 더하겠다. 맨뒷자리가 아닌 맨 앞 자리에.
수정한 article table을 뜯어보는 행위(구조 확인) --> DESC article;
# 데이터 조회 (*, id 칼럼의 값은 NULL )
SELECT *
FROM article; --> 드래그해서 실행해보기. --> id 는 null 로 확인이 된다.
id NUlL 이유 : title, body 와 함께 처음에 칼럼을 추가 한 것이 아닌 title, body를 작성하고 나중에 id 칼럼을 추가 했으므로 입력된 값이 없어서 NULL로 조회가 되는게 당연하다.
강제로 1번 2번을 넣어줘야 한다.
우리가 여태까지 데이터 추가(INSERT), 검색(SELECT), 이제부터 수정(UPDATE)하는 것을 배울 것이다.
#기존 데이터에 id값 추가(수정) (id = 1, id IS NULL )
UPDATE article 의미 : article table 안에 있는 데이터를 수정하겠다.
SET id = 1 --> 여기까지만 하면 article table 안의 모든 데이터들의 id가 1로 수정된다.
WHERE id IS NULL; --> 나는 일괄이 아닌 id가 NULL 인 것만. 오직. 조건을 걸어주는 행위.
# 데이터 조회(*, 둘 다 수정되어 버림..)
SELECT *
FROM article; --> article table의 모든 데이터를 조회하겠다.
조회 결과 : 2개의 데이터 모두 id가 NULL이었으므로 둘 다 id 가 1로 수정된다.
# 기존 데이터 중 1개만 id를 2로 변경 ( LIMIT 1 )
UPDATE article
SET id = 2
WHERE id = 1
LIMIT 1; --> LIMIT : 제한 --> 1개만 영향을 받는다.
# 데이터 조회 (*)
SELECT *
FROM article; --> 드래그해서 ctrl + F9
# 데이터 1개 추가 ( id = 3, title = 제목3, body = 내용3)
INSERT INTO article
SET id = 3,
title = '제목3',
body = '내용3'; --> 이 명령어들만 드래그해서 ctrl + F9 실행
# 데이터 조회 (*)
SELECT *
FROM article ; --> id 의 순서가 2,1,3 인 경우 번호의 순서는 중요하지 않다. 얼마든지 번호의 순서를 원하는 순서로 조정할 수 있다.
# 2번 게시물, 데이터 삭제 => DELETE
SELECT *
FROM article
WHERE id = 2; --> 드래그해서 실행해보고 삭제하려는 데이터가 맞는지 확인한 다음에 데이터를 삭제한다.
★ 주의 --> DELETE FROM article; <-- article 뒤에 세미콜론을 붙이고 2줄을 드래그 실행해도 모든 데이터가 날아간다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 으아 !!!!
==> 이유 찾음(이해?) : 세미콜론이 명령어를 한문장으로 닫아버림(끝내버림). WHERE id=2;를 인지할 수 없음.
DELETE FROM article --> 이 한 문장만 실행을 하면 article table의 모든 데이터가 날라간다.
WHERE id = 2; --> 모두 삭제하면 안되니까 삭제하려는 조건을 걸어준다.
그러나 삭제를 하는 것은 언제나 긴장되므로 먼저 삭제하려는 조건의 값을 검색해서 조회 해본다. SELECT ~~~
★ 관세청, 국세청은 DELETE 쿼리를 한번 날릴 때마다 상부의 승인을 받아야 한다.
데이터가 중요하기 때문에 내 마음대로, 임의로 데이터를 삭제할 수 없다.
# 데이터 조회(*)
SELETE *
FROM article; --> 드래그 실행 결과 id 2번의 데이터를 삭제되어 조회되지 않는다.
# 날짜 칼럼 추가 => regDte DATETIME ( table 구조 다 날리고 새로 만들기 어렵다. ) 구조 변경, 구조 수정(ALTER)
ALTER TABLE article ADD COLUMN regDate DATETIME FIRST; (등록된 날짜) FIRST 하면 날짜가 맨 앞으로 가게 된다. 이거 안된다.
----->
ALTER TABLE article ADD COLUMN regDate DATETIME AFTER id; --> id 뒤에 추가 하겠다.
( ALTER TABLE article ADD COLUMN regDate CHAR, DATE로 해도 되지만! ) CHAR보다는 DATE나 DATETIME !
DATE : 년월일
DATETIME : 년월일 시간분초
# 테이블 구조 확인
DESC article;
# 데이터 조회(*, 날짜 정보가 비어있음)
SELECT *
FROM article; --> 당연히 비어있다.
# 1번 게시물의 비어있는 날짜정보 채움 (regDate = 2018-08-10 15:00:00 )
UPDATE article
SET regDate = '2018-08-10 15:00:00'
WHERE id = 1;
# 데이터 조회(*, 이제 2번 게시물의 날짜 정보만 넣으면 됩니다. )
SELECT *
FROM article;
# NOW() 함수 실행해보기.
SELECT NOW(); --> NOW(); 는 함수로 현재 날짜를 초까지 반환한다.
# 3번 게시물의 비어있는 날짜정보 채움(NOW())
UPDATE article
SET regDate = NOW();
WHERE id = 3
# 데이터 조회(*)
SELECT *
FROM article;
-------------------------------------------------------------------------------------------------------------------------------
* CHAR(200) / VARCHAR(200)
둘 다 200바이트.
그러나 VARCHAR는 용량을 조금 아끼는 친구고, CHAR는 용량을 아끼지 않는 대신 속도가 더 빠른 아이다.
* TEXT / LONGTEXT
-> 진짜 엄청 긴 텍스트는 TEXT로도 짤려서 LONGTEXT로 작성한다.
'IT 유용한 정보' 카테고리의 다른 글
톰캣설명, 톰캣 개발환경셋팅 (0) | 2020.06.24 |
---|---|
JDBC 기초 시작 ( 게시판 연동 참고 예제 ) // eclipse 연결 방법 (0) | 2020.06.16 |
VISUAL STUDIO CODE, XAMPP, SQLyog Community Edition 설치 (0) | 2020.06.16 |
HTML 한글 깨짐 방지(해결 방법)_이클립스 (0) | 2020.06.11 |
dd (0) | 2020.06.02 |