데이터베이스 실행
1. 'mysql -u nct -p' 작성 후 비밀번호 입력하여 데이터베이스를 실행한다.
2. 'show databases;' 작성하여 데이터베이스 리스트를 확인한다.
3. 'use cms;' 작성하여 cms 데이터베이스를 사용한다.
enum
vperson enum('1','2') not null
enum은 컬럼에 옵션을 미리 셋팅해 놓은 값으로만 저장시키는 속성으로, 해당 되는 값 외에는 받지 않는다.
→ 주로 radio 옵션에서 많이 사용한다.
set
vperson set('1','2','3','4') not null
set은 컬럼에 옵션을 미리 셋팅해 놓은 값으로 처리한다.
단, 여러 개의 값을 저장하도록 설정할 수 있다.
→ 주로 checkbox 옵션에서 많이 사용한다.
timestamp
indate timestamp not null default current_timestamp
----------------------------------------------------
insert into visit values ('2025-02-25','12:00','홍길동','01009091004','1',now());
위 코드는 서버 현재 시간을 적용하는 코드이다.
timestamp는 서버에 있는 시간을 가져오는 속성으로 SQL 시간을 가져와 default와 함께 사용한다.
(default current_timestamp) → insert 시 now()를 이용해서 저장한다.
현재 시간 적용된 데이터
1. 중복되면 안 되는 항목을 체크한다.
방문일자 선택, 방문시간 선택, 고객명, 휴대전화, 인원수 1 or 2
→ 전화번호는 중복되면 안 된다.
2. 'mysql -u root -p' 작성하여 접속
3. 아래 코드를 작성하여 복사한 뒤 붙여넣는다.
create table visit(
vdate date not null default '0001-01-01',
vtime time not null default '00:00:00',
vname char(30) not null,
vtel char(11) not null,
vperson enum('1','2') not null,
indate timestamp not null default current_timestamp,
primary key(vtel)
);
4. 'insert into visit values ('2025-02-25','11:00','홍길동','01011112222','2',now());' 작성하여 데이터를 추가한다.
5. 'select * from visit;'를 작성하여 데이터가 추가되었는지 확인한다.
6. 'insert into visit values ('2025-02-25','12:00','홍길동','01022223333','1',now());' 작성하여 데이터를 추가한다.
7. 'select * from visit;'를 작성하여 데이터가 추가되었는지 확인한다.
띄어쓰기도 1byte에 포함
1. 중복되면 안 되는 항목을 체크한다.
카테고리, 상품코드, 상품명, 상품가격, 할인가격, 판매 유/무, 등록일자
→ 상품코드는 중복되면 안 됨
가격을 int로 받으면 0을 받을 수 없기 때문에 int가 아닌 char로 입력한다.
데이터를 받을 때 가격 부분에 ,(콤마)가 있으면 ,(콤마)를 빼달라고 요청하여 숫자만 받는다.
2. 아래 코드를 작성하여 복사한 뒤 붙여넣는다.
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx,pcode)
);
3. 아래 코드를 작성하여 복사한 뒤 붙여넣어 데이터를 추가한다.
insert into product value('0','a1234','LG냉장고');
insert into product value('0','a1234','LG김치냉장고');
4. 'select * from product;' 작성하여 데이터가 추가되었는지 확인한다.
5. 단어 개수에 따른 오류를 확인한다.
한글로 작성시 살짝 초과해도 괜찮지만,
영어로 작성시 초과하면 바로 오류가 난다.
띄어쓰기도 1byte로 적용되어 글자 수에 포함된다.
char와 varchar 차이
[ 예시 ]
'aa'라 작성할 때
char는 2byte로 인식하고, varchar는 2~3byte로 인식한다.
char(4)라고 정하고 'ab'라 작성하면 'ab '로 저장하여 빈 공간을 공백으로 채워 4를 맞춘다.
varchar(4)라고 정하고 'ab'라 작성하면 'ab'로 저장하여 공백을 없앤 단어만 저장한다.
char는 고정길이이고, varchar와 text는 가변길이로 ,
char는 검색 기능을 사용할 땐 varchar에 비해 속도가 월등히 빠르고,
varchar는 메모리 사용량을 줄일 수 있다.
검색할 수 있는 부분은 char로 작성하는 것을 추천한다.
→ 상품명, 전화번호, 고객명, 제목 등
varchar는 주로 파일경로, 파일명, 댓글, 주소 등에 사용하는 것을 추천한다.
char는 최대 255byte까지 가능하다.
varchar는 설정한 범위를 오바하면 잘리는 경우가 있지만
char는 설정한 범위를 오바할 경우 조금은 허용해주는 경우도 있다.
테이블 정보
desc information_schema.tables;
위 코드는 테이블의 정보를 상세하게 출력한다.
show
show는 각 테이블 별 key 종류 및 상세 데이터 개수를 보여준다.
- show index from 테이블명; → 셋팅된 키 값을 확인한다.
- show table status from 데이터베이스명; → 각 테이블별 데이터 개수 및 할당량을 확인한다.
1. 'desc product;' 코드는 간단하게 보여주는 코드이다.
2. 'show index from product;' 코드는 상세하게 보여주는 코드이다.
3. 'show table status from cms;' 코드는 cms 데이터베이스 안에 있는 모든 table을 상세하게 보여주는 코드이다.
unique
[ 첫번째 코드 ]
1. 아래 코드를 작성하여 복사한 뒤 붙여넣는다.
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx,pcode),
unique(pcode)
);
2. 'desc product;' 작성하면 unique가 보이지 않는 것을 확인한다.
3. 'show index from product;' 작성하면 unique가 보이는 것을 확인한다.
4. pcode가 중복되면 데이터 추가가 불가능하다.
5. 한번 실패하고 데이터를 추가하면 pidx 값이 비게 된다.
[ 두번째 코드 ]
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx,pcode),
unique key(pcode)
);
unique는 key라는 단어를 사용하지 않아도 작동이 되고, key 단어를 사용해도 작동이 잘 된다.
[ 세번째 코드 ]
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx),
unique key(pcode)
);
primary와 unique는 별도로 핸들링이 가능하기에 중복되면 안 되는 것은 다 unique로 잡으면 된다.
[ 네번째 코드 ]
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx),
unique aaa(pcode,pnm)
);
한 unique에 두가지 값을 추가하면 multi 키가 된다.
insert into product value('0','a1234','LG냉장고');
insert into product value('0','a1234','LG냉장고');
insert into product value('0','a1004','LG냉장고');
pcode와 pnm 중 하나라도 다르면 데이터를 추가할 수 있다.
[ 다섯번째 코드 ]
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx),
unique aaa(pcode),
unique bbb(pnm)
);
pcode와 pnm 모두 중복되면 안 되므로 데이터 추가가 불가능하다.
[ 여섯번째 코드 ]
create table product(
pidx int not null auto_increment,
pcode char(5) not null,
pnm varchar(10) not null,
primary key(pidx),
unique (pcode),
unique (pnm)
);
각각의 unique로 잡히긴 하지만 핸들링하기 편하게 각각의 이름을 설정하는 것이 좋다.
테이블명 변경 - rename
테이블명을 변경하고 싶을 때는
rename table 변경하기전테이블명 to 새로운테이블명;
위 코드와 같이 작성한다.
단, 위 코드는 8.x 또는 10.x 버전에만 사용 가능하다.
1. 'rename table product to product2;' 작성하여 이름 변경
2. 'show tables;' 작성하여 변경된 이름 확인
alter
alter 명령어는 컬럼의 수정, 삭제, 변경, 추가 할 수 있는 명령어이다.
[ 컬럼명 변경 및 자료형 변경 ]
alter table 테이블명 change 변경하기전컬럼명 새로운이름컬럼명 자료형;
1. 'desc product2;' 작성하여 이름 및 자료형을 확인한다.
2. 'alter table product2 change pnm pname varchar(10) not null;' 작성하여 pnm 이름을 pname으로 변경한다.
3. 'desc product2;' 코드로 이름이 잘 변경되었는지 확인한다.
4. 'alter table product2 change pname product_name varchar(100) not null;' 작성하여 pname의 이름과 자료형 모두 변경한다.
5. 'desc product2;' 작성하여 자료형 및 이름이 변경되었는지 확인한다.
[ 컬럼의 자료형만 변경 ]
alter table 테이블명 modify 컬럼명 변경할자료형 null 또는 not null 그리고 defult 추가가능;
1. 'alter table product2 modify product_name varchar(50) not null; ' 작성하여 자료형만 변경한다.
2. 'desc product2;' 작성하여 자료형이 변경되었는지 확인한다.
[ 컬럼명 및 자료형 추가 ]
alter table 테이블명 add 컬럼명 자료형;
1. 'alter table product2 add product_money varchar(9) not null;' 작성하여 product_money 컬럼을 추가한다.
2. 'desc product2;'와 'select * from product2;' 작성하여 컬럼이 추가되었는지 확인한다.
기존에 데이터가 있는 상태에서 컬럼 추가시 해당 컬럼 값이 비어있다.
[ 컬럼을 추가시 원하는 위치에 컬럼을 추가할 경우 ]
alter table 테이블명 add 컬럼명 자료형 after 기존컬럼명;
1. 'alter table product2 add puse enum('Y','N') not null after pcode;' 작성하여 컬럼값을 추가한다.
2. 'desc product2;'와 'select * from product2;' 작성하여 컬럼이 추가되었는지 확인한다.
[ 컬럼 삭제 ]
alter table 테이블명 drop 컬럼명;
해당 컬럼에 있는 데이터도 모두 삭제되니까 주의한다.
1. 'alter table product2 drop product_money;' 작성하여 product_money 컬럼을 삭제한다.
2. 'select * from product2;' 작성하여 컬럼이 삭제되었는지 확인한다.
[ 테이블의 자료형 및 구조만 복제 ]
create table 새로운테이블명 like 복제할테이블명;
1. 'show tables;' 작성하여 테이블 리스트를 확인한다.
2. 'create table product like product2;' 작성하여 product2를 product에 복제한다.
3. 'show tables;' 작성하여 테이블이 생성되었는지 확인한다.
4. 'desc product;' 작성하여 컬럼명과 자료형을 확인한다.
[ 테이블에 데이터 복제 ]
insert into 복제할테이블명 select * from 원본테이블명;
1. 'insert into product select * from product2;' 작성하여 product에 데이터를 복제한다.
2. 'select * from product;' 작성하여 데이터가 잘 들어갔는지 확인한다.
[ 기존의 key를 제외하고 테이블 데이터 복제 ]
create table 복제할 테이블명 select * from 원본 테이블명;
위 코드는 key가 무조건 제외되므로 잘 쓰지 않는 방법이다.
1. 'create table product3 select * from product2;' 작성하여 product2를 product3에 복제한다.
2. 'select * from product3;' 작성해보면 데이터 복제는 올바르게 되었지만, 'desc product3;' 작성해보면 key 값이 복제가 되어있지 않은 것을 확인한다.
3. 'exit' 작성하여 MySQL을 종료한다.