티스토리 뷰
▶▶ 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의 주민번호가 업데이트됨.
'JSP' 카테고리의 다른 글
서블릿 (Servlet) / 동작 원리 / 작성 규칙 / 전체적인 코드의 흐름 (0) | 2023.04.13 |
---|---|
게시판 만들기 (글 쓰기) (0) | 2023.04.10 |
예외 처리 (에러 페이지) (0) | 2023.02.25 |
세션(Session)과 쿠키(Cookie) (0) | 2023.02.23 |
액션 태그 (forward / include / 템플릿 페이지 작성) (0) | 2023.02.23 |
- Total
- Today
- Yesterday
- 원격저장소
- Git
- Java
- mysql
- 업캐스팅
- 단일행함수
- 숫자형
- 데이터타입
- Object
- null
- Method
- 오버라이딩
- 문자형
- model2
- 다형성
- 내장객체
- JSTL
- 논리형
- 인자
- 로컬저장소
- 매개변수
- 제어문
- gitbash
- github
- javascript
- DB
- Dao
- 출력문
- jsp
- 주석문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |