SQLyog 사용법(명령어 종류, 예제)

JooKit 주킷 2020. 6. 16. 18:32
목차 접기
728x90
반응형

서버는 창고 번호가 있다.   (대략 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로 작성한다. 

 

 

 

728x90
반응형
LIST