티스토리 뷰

 

 

 

 

 

 

 

 

 

 

▶▶   DB 설정

–  mySQL workbench를 사용하기 전,  cmd창을 통해 기본적인 DB 사용법에 대해 짚고 넘어가겠음.

 

 

 

1.  DB 생성


create database [DB명];

 

2.  DB 목록 조회


show databases;

 

3.  DB 선택


use [DB명];

 

4.  DB 삭제


drop database [DB명];


EX   )   jspdb 데이터베이스 생성하기

-- jspdb 생성
mysql> create database jspdb;
Query OK, 1 row affected (0.01 sec)

-- jspdb 선택
mysql> use jspdb;
Database changed

→   'jspdb'라는 데이터베이스를 만들고 선택함.

 

 

 

 

 

 

 

 

 

 

▶   Table 설정

 

 

 

1.   테이블 생성


create table [테이블명] (
     컬럼(필드)명1 데이터타입 [제약조건],
     컬럼(필드)명2 데이터타입 [제약조건],
     컬럼(필드)명3 데이터타입 [제약조건],
     컬럼(필드)명4 데이터타입 [제약조건]
);

→   제약 조건(Primary key)은 걸어도 되고 안 걸어도 됨.

 

2.   테이블 조회


show tables;

 

3.   테이블 구조 확인


desc [테이블명];

 

4.   테이블 삭제


drop [테이블명];

EX   )   테이블 만들기

mysql> create table test (
    -> idx int
    -> );
Query OK, 0 rows affected (0.01 sec)

→    테이블명 'test',  필드명 'idx',  타입은 정수형 'int'인 테이블을 생성함.

mysql> create table test2 (
    -> idx int,
    -> d_num double		-- 실수 타입
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> create table test3 (
    -> idx int,
    -> name varchar(10),		-- 문자 타입
    -> tel varchar(15)
    -> );
Query OK, 0 rows affected (0.02 sec)

→   같은 방법으로 test2와 test3 테이블도 생성함.

 

 

 

 

 

 

 

 

 

 

▶   데이터 설정

 

 

 

1.   데이터 입력


1 )   insert into [테이블명] (필드명1, 필드명2) values(값1, 값2);
2 )   insert into [테이블명] values(값1, 값2, ...)

–  헷갈릴 수 있으니 임의로 필드명과 값에는 괄호를 사용하겠음.

–  필드명(컬럼명)을 생략한 경우,  DB 테이블의 순서대로 모든 값을 입력해야 함.

–  방법1로 작성할 경우 내가 원하는 테이블만 골라 담을 수 있고,

    방법2로 작성할 경우 어차피 DB 테이블의 순서대로 모든 값을 입력해야하므로,  모든 테이블에 값을 넣어야 할 때  사용.


EX   )   test 테이블에 데이터 1, 2, 3 입력하기

 

—   먼저 테이블 구조 확인

mysql> desc test;

   실행 결과

 

—   데이터 입력

mysql> insert into test (idx) values (1);	-- 컬럼명 기재
Query OK, 1 row affected (0.01 sec)

mysql> insert into test values (2);		-- 컬럼명 생략
Query OK, 1 row affected (0.00 sec)

mysql> insert into test values (3);
Query OK, 1 row affected (0.01 sec)

 

 

 

2.   데이터 조회


select(필드명, ..., *) from [테이블명] [where 조건];

–  * (아스타릭스)를 쓰면 전체를 조회한다는 뜻
–  일반적으로 회사에서 쓰는 데이터는 최소 몇 억개 이므로 전체를 부르기엔 다소 무리가 있음.
    그래서 보통 where절로 조건을 걸어서 부분 부분 불러옴.


EX   )   테이블 전체 조회로 입력한 데이터들 확인

mysql> select * from test;

   실행 결과

 

 

 

3.   데이터 수정


update [테이블명] set 필드1=수정할값1, 필드2=수정할값2, ... [where 조건];

 

 

4.   데이터 삭제


delete from [테이블명] [where 조건];

–  where 조건절이 없으면 테이블 전체를 날리기 때문에 where절을 대부분 걸어서 사용함.
–  사실상 회사 업무상에서도 전체 데이터를 날릴때 where절을 사용함.


EX1   )   test 테이블의 데이터 모두 삭제

mysql> delete from test;
Query OK, 3 rows affected (0.01 sec)

mysql> select * from test;
Empty set (0.00 sec)

→   where 조건절을 사용해야하지만,  지금은 공부용이므로 where조건절을 생략함.

 

 

 

EX2   )   test 테이블 삭제 

mysql> drop table test;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from test;
ERROR 1146 (42S02): Table 'jspdb.test' doesn't exist

→  테이블 삭제 시,  drop table 테이블명 입력함.

→  확인 차 삭제한 테이블을 조회했더니 존재하지 않는 테이블로 에러 발생함.

 

 

 

EX3   )   test3 테이블에 데이터 추가

 

..............................................................................................

1번 인덱스,   이름은'Lee',    번호는'010-1234-5678'
2번 인덱스,   이름은'Kim',   번호는'010-4567-8952'
3번 인덱스,   이름은'jung'

                 ,   이름은'hong'   번호는'010-4568-8512'

..............................................................................................

 

1 )   테이블 구조확인

mysql> desc test3;

   실행 결과

 

 

2 )   데이터 입력

mysql> insert into test3 (idx, name, tel) values (1, 'Lee', '010-1234-5678');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test3 (idx, name, tel) values (2, 'Kim', '010-4567-8952');
Query OK, 1 row affected (0.01 sec)

mysql> insert into test3 (idx, name, tel) values (3, 'jung', null);	-- null값 입력 가능
Query OK, 1 row affected (0.00 sec)

mysql> insert into test3 (tel, name) values ('010-4568-8512', 'hong');	-- 컬럼 순서 바꾸기 가능
Query OK, 1 row affected (0.01 sec)

→   컬럼 순서대로 데이터를 입력하지 않아도,  어느 컬럼에 어떤 데이터를 넣느냐가 더 중요함. 

→   컬럼의 개수가 몇 개 안될 때,  필드명을 다 적고 데이터가 들어가지 않는 곳에 null을 입력해도 됨.

 

 

3 )   테이블 확인해보기

mysql> select * from test3;

✓   실행 결과

 

 

 

 

 

 

 

 

 

 

▶   Primarly Key 설정

–  기본 키(primary key)는 주 키 또는 프라이머리 키라고 하며, 

    관계형 데이터베이스에서 조(레코드)의 식별자로 이용하기에 가장 적합한 것이라 선택되고 정의된 후보 키.

–  다른 항목과 절대로 중복되어 나타날 수 없는 단일 값(unique)을 가짐.

    유일한 데이터,  중복 불가능. (UNIQUE 제약)

–  관계형 DB 이론상,  모든 테이블은 반드시 하나의 기본 키를 가져야 함.

    데이터가 NULL(아무런 값도 없는 상태)인 것도 안되며 무조건 데이터가 있어야 함. (NOT NULL 제약)

–  즉,  PK = (UQ + NN)  데이터를 구분 가능한 고유한 값이어야 함.
    ex )  주민번호, 아이디 등


EX   )    PK제약조건의 test4 테이블 생성

 

.......................................................................

idx –숫자 – Primary key(PK제약조건)
name – 문자(10)

.......................................................................

 

—   테이블 생성하기

mysql> create table test4 (
    -> idx int primary key,
    -> name varchar(10)
    -> );
Query OK, 0 rows affected (0.02 sec)

 

 

—   테이블 구조 확인하기

mysql> desc test4;

   실행 결과

→   PK 제약 조건을 설정한 idx필드에는 Key항목에 PRI,  Null항목은 'No'로 설정되어 있음. (NOT NULL 제약)

 

 

—   데이터 입력하기

mysql> insert into test4 values (1, 'Kim');
Query OK, 1 row affected (0.01 sec)

→   test4 테이블에 컬럼명을 생략했으니 모든 컬럼에 차례대로 데이터를 넣어줌.

      즉,  idx컬럼에 '1'의 데이터를 넣고 name컬럼에 'Kim'의 데이터를 넣음.

 

mysql> select * from test4;

   실행 결과

 

 

—   'Kim'의 이름을 'Lee'로 바꾸기.

mysql> insert into test4 values (1, 'Lee');
ERROR 1062 (23000): Duplicate entry '1' for key 'test4.PRIMARY'

→   PK는 데이터는 중복이 불가능하므로 에러 발생함. (= UNIQUE 제약)

 

mysql> insert into test4 values('Lee');
ERROR 1136 (21S01): Column count doesn't match value count at row 1

→   컬럼의 개수가 맞지 않다고 나옴.
→   컬럼명을 생략할 경우에는 모든 테이블의 값을 순서대로 넣어줘야 했음.

 

mysql> insert into test4 (name) values('Lee');
ERROR 1364 (HY000): Field 'idx' doesn't have a default value

→   default value = NULL
→   PK는 데이터가 NULL이 불가능함을 알 수 있음.

 

 

 

 

 

 

 

 

 

 

▶   Auto_Increment  (AI) 

–  자동 증가

–  숫자데이터 같은 경우 넘버링(하나하나 세는것)을 하는데,  그럴 필요 없이 데이터가 추가될 때마다 자동으로 증가됨.


EX1   )   auto_increment 사용

 

—   test5 테이블 생성하기

....................................................................................

필드 :   idx (숫자) – PK / AUTO_INCREMENT(AI) 
            date (DATE)
            datetime (DATETIME)
            timestamp (TIMESTAMP)

....................................................................................

mysql> create table test5 (
    -> idx int primary key auto_increment,
    -> date date,
    -> datetime datetime,
    -> timestamp timestamp
    -> );
Query OK, 0 rows affected (0.02 sec)

 

 

—   테이블 구조 확인하기

mysql> desc test5;

   실행 결과

 

 

—   데이터 입력하기

mysql> insert into test5 value();
Query OK, 1 row affected

→   다른 컬럼은 괜찮아도 idx컬럼에 PK 제약조건을 걸었는데 NULL 데이터가 입력됨.

→   테이블을 조회해보겠음.

mysql> select * from test5;

   실행 결과

→   auto_increment의 자동 증가 기능으로 값이 알아서 들어가서 가능했음.

 

 

—   날짜 정보 & 시간 정보 추가하기

-- 날짜정보 추가
mysql> insert into test5 value(null, '2023-03-03', '2023-03-03', '2023-03-03');
Query OK, 1 row affected

-- 시간정보 추가
mysql> insert into test5 value(null, '2023-03-03 10:38:00', '2023-03-03 10:38:00', '2023-03-03 10:38:00');
Query OK, 1 row affected, 1 warning (0.01 sec)

→   idx컬럼에는 AI기능이 있으므로 null값 입력 가능함.

→   컬럼명을 생략했으므로 순서에 맞게 모든 데이터를 입력해줌.

→   시간정보 데이터를 추가하는데 결과가 '1 warning'이 나옴.

 

 

—   warning 확인하기

mysql> show warnings;

→    'warning'이 떴을 때 바로 show warnings를 입력해보면 정보를 알려줌.

   실행 결과

→   date컬럼에 쓰기에 좀 적절하지 않은 데이터라고 알려줌.

 

 

—   test5 테이블 전체 조회하기

mysql> select * from test5;

   실행 결과

 

 

 

EX2   )   itwill_member 테이블 만들기

.....................................................................
번호 :   idx - int / PK, AI
이름 :   name -varchar(20)
성별 :   gender - varchar(5)
나이 :   age - int
주민번호 :   jumin - varchar(14)
.....................................................................
1,   'hong',   'M',   16,    '900101-1234123'
2,   'Lee',     'W',   17,    '900101-1234123'
3,   'KIM',     'M',   20,    '900101-1234123'
4,   'jung',     'W',   25
5,   'song',    'M',   19,    '900101-1234123'
.....................................................................

 

—   테이블 & 컬럼 생성하기

mysql> create table itwill_member(
    -> idx int primary key auto_increment,
    -> name varchar(20),
    -> gender varchar(5),
    -> age int,
    -> jumin varchar(14)
    -> );
Query OK, 0 rows affected

 

 

—   테이블 확인

mysql> desc itwill_member;

   실행 결과

 

 

—   데이터 입력하기

insert into itwill_member values(1, 'hong', 'M', 16, '900101-1234123');
insert into itwill_member values(2, 'Lee', 'W', 17, '900202-1234123');
insert into itwill_member values(3, 'KIM', 'M', 20, '900303-1234123');
insert into itwill_member values(4, 'jung', 'W', 25, null );
insert into itwill_member values(5, 'song', 'M', 19, '900505-1234123');

 

 

—   테이블 컬럼명 & 데이터 확인하기

mysql> select * from itwill_member;

   실행 결과

 

 

 

 

 

 

 

 

 

 

▶   Where 조건절

–  SELECT 구문에서 사용되는 옵션절이며 행에 대한 조건식을 작성할 수 있음.

–  자세한 내용은 아래 페이지 참고. 

    https://lingling-ing.tistory.com/23

 

WHERE(조건문)절 / 비교 연산자(관계)

▶▶ WHERE(조건문)절 – SELECT 구문에서 사용되는 옵션절. – 행에 대한 조건식을 작성할 수 있음. 더보기 * SELECT절과 WHERE절은 기능상 구분되어 있음 - SELECT절과 WHERE절은 아예 단독으로 사용됨 -

lingling-ing.tistory.com


EX   )   비교연산자를 사용하여 where조건 걸기

 

—   idx 필드의 값이 3이상인 데이터만 조회

mysql> select * from itwill_member where idx >= 3;

   실행 결과

 

 

—   회원의 이름이 Lee 사람의 정보만 조회

mysql> select * from itwill_member where name='Lee';

   실행 결과

 

 

—   회원정보 중에 성별이 여자이면서, 나이가 20살 이상인 사람의 정보 조회

mysql> select * from itwill_member where gender='W' and age >= 20;
mysql> select * from itwill_member where gender='W' && age >= 20;

→   true 조건이 2개 이므로 and연산자로 이어줌.

→   and 대신 '&&' 사용 가능함.

   실행 결과

 

 

—   회원정보 중에 성별이 남자이거나, 나이가 20살 미만인 사람의 정보 조회

mysql> select * from itwill_member where gender='M' or age <20;
mysql> select * from itwill_member where gender='M' || age <20;

→   둘 중에 하나만 true이면 되는 조건이므로 or연산자를 사용함.

→   or 대신 '||' 사용 가능.

   실행 결과

 

 

—   모든 회원의 정보를 출력하는데 이름과 주민번호만 출력하기

mysql> select name, jumin from itwill_member;

→   모든 회원이므로 where조건절 없이 보고싶은 컬럼(이름, 주민번호)만 선택하여 출력함.

   실행 결과

 

 

—   바로 위에 출력된 정보중에  name컬럼을 '이름' 으로,  jumin컬럼을 '주민번호'로 바꿔서 출력하기.

mysql> select name "이름", jumin "주민번호" from itwill_member;

→   Column Alias를 사용하여 컬럼명을 바꿔줌.

   실행 결과

 

 

—    이름이 jung이면서 인덱스가 4번인 사람의 주민번호를 '900404-1234131'로 바꾸기.

mysql> update itwill_member set jumin='900404-1234131' where name='jung' and idx=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

→   where 조건을 걸지 않으면 모든 사람의 주민번호가 바뀜.

→   itwill_member테이블을 조회해보겠음.

 

mysql> select * from itwill_member;

   실행 결과

→   jung의 주민번호가 업데이트됨.

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함