데이터베이스/MySQL

[MySQL] 데이터 타입, 테이블 다루기

caramel-bottle 2023. 9. 18.

데이터 타입

MySQL의 데이터 형식의 종류는 30개 가까이 된다. 자주 쓰이고 꼭 필요한 타입만 알고 있어도 된다.

 

  • 숫자형 타입
    • tinyint: 정수(1byte), -128 ~ 127
    • smallint: 정수(2byte), -32,768 ~ 32,767
    • int: 정수(4byte), 약 -21억 ~ 약 21억
    • bigint: 정수(8byte), 거의 무제한
    • float: 부동 소수형 데이터 타입(4byte)
    • double: 부동 소수형 데이터 타입(8byte)
    • decimal(길이, 소수): 고정 소수형 데이터 타입 1.0 -> 1.00000 (길이 5)
  • 문자형 타입
    • char: 고정 길이 데이터 타입(최대 255byte)
      -> 지정된 길이보다 짧은 데이터를 입력하면 나머지 공간을 채움, 안 쓰면 나머지 공간이 낭비됨.
    • varchar: 가변 길이 데이터 타입(최대 65535byte)
      -> 지정된 길이보다 짧은 데이터를 입력하면 나머지 공간을 채우지 않음, char보다 공간 효율이 좋음
    • text: 문자열 데이터 타입(최대 65535byte)
      -> varchar와 최대 크기가 같음. 이전에는 달랐지만 varchar의 크기가 커졌기 때문에 varchar를 쓰는 것이 좋다.
    • longtext: 무제한 문자열 데이터 타입.
  • 이진 데이터 타입
    • binary, byte: char의 형태의 이진 데이터 타입(최대 255byte)
    • varbinary: varchar의 형태의 이진 데이터 타입(최대 65535byte)
  • 날씨 데이터 타입
    • date: 날씨(년도, 월, 일) 형태의 데이터 타입(3byte)
    • time: 시간(시, 분, 초) 형태의 타입(3byte)
    • datetime: 날짜와 시간 형태의 데이터 타입(8byte)
    • timestamp: 1970년 1월 1일 0시 0분 0초부터 시작한 ms타입의 시간이 저장(4byte)

제약 조건(constraint)

데이터의 무결성을 지기 위해 데이터를 입력 받을 때 실해오디는 검사 규칙을 의미

 

  • not null
    null x
    중복값 o

  • unique
    null o
    중복값 x

  • primary key(기본키)
    null x
    중복값 x
    테이블에 단 하나만 설정
    foreign key(참조키)와 쌍으로 연결
    인덱싱을 설정 -> 데이터가어디 있는지 미리 알아서 속도가 빨라진다.

  • foreign key(참조키)
    primary key를 가진 테이블과 연결하는 역할

  • default
    null 값을 삽입할 때 기본이 되는 값을 설정함

  • enum
    원하는 범위를 설정하고 해당 범위의 값만 저장 -> 권장하지 않음


테이블 만들기

데이터베이스 선택

use MK;

 

use 키워드를 사용하여 어떤 데이터베이스를 선택하여 조작할지 결정한다.

 

다음으로 어떤 필드를 가진 테이블을 만들지 구성을 결정한다.




테이블 만들기

CREATE TABLE MK_member (
    userid VARCHAR(20) PRIMARY KEY,
    userpw VARCHAR(20) NOT NULL,
    name VARCHAR(20) NOT NULL,
    hp VARCHAR(20) UNIQUE NOT NULL,
    email VARCHAR(50) NOT NULL,
    gender VARCHAR(10) NOT NULL,
    ssn1 CHAR(6) NOT NULL,
    ssn2 CHAR(7) NOT NULL,
    zipcode VARCHAR(5),
    address1 VARCHAR(100),
    address2 VARCHAR(100),
    address3 VARCHAR(100),
    regdate DATETIME DEFAULT NOW(),
    point INT DEFAULT 0
);

필드명 데이터타입 제약조건 순으로 구성에 맞게 잘 넣어준다.

이때 unique와 not null을 모두 걸어주고 싶을 경우엔 띄어쓰기로 구분해서 작성하면 된다.


테이블 확인하기

desc MK_member;

 

필드, 타입, Null 여부, key 그리고 Default 까지 설정한 대로 잘 나오는 것을 확인할 수 있다.

Extra는 부가설명 부분이다.


테이블 삭제

drop table MK_member;

테이블을 삭제한다.


필드 추가, 삭제

alter table MK_member add mbti varchar(10);

 

필드를 추가한 후 다시 테이블 확인 명령어를 입력하면 

필드가 잘 추가됨을 확인할 수 있다.

 

alter table MK_member drop mbti;

필드를 삭제하는 명령어이다.

 


데이터 삽입

/*
1.
insert into 테이블명 values (값1, 값2, 값3, ...) 	
	-> 무조건 개수 맞춰서 넣어야함.
	-> 기본값을 제외하고 입력이 불가능.
2.                                                    
insert into 테이블명 (필드명1, 필드명2, 필드명3, ...) values (값1, 값2, 값3, ...)
	-> 원하는 필드를 정해서 값을 넣어주는 쿼리
	-> 짝짝꿍이 맞게만 넣어주면 됨.
    
*/

데이터를 삽입하는 방법이다. 1의 경우 필드의 개수와 순서에 맞춰서 모든 값을 지정해 주어야 에러가 나지 않는다.

만약 원하는 필드에만 값을 넣어주고 싶다면 2의 방법을 사용해야한다.

 

영어 단어장을 예시로 데이터를 삽입해보자.

테이블 만들기

CREATE TABLE word (
    eng VARCHAR(50) PRIMARY KEY,
    kor VARCHAR(50) NOT NULL,
    lev INT DEFAULT 1
);

테이블 확인하기

desc word;

필드 추가

insert into word values ('apple', '사과', 1);

필드 확인하기

select * from word;

필드 추가하기

insert into word values ('apple', '사과');
insert into word values ('apple', '바나나', 1); -- 중복 에러
insert into word values('banana', '바나나', null); -- null은 null
-- 직접 null이라고 입력하면 default값을 무시한다.

insert into word(eng, kor, lev) values('orange', '오렌지', 1);
insert into word(eng, kor) values('melon', '메론');

-- 모든 데이터가 순서가 없음. 세트, 딕셔너리와 유사.
-- 순서를 맞추는 기능이 따로 있음

insert into word(lev, eng, kor) values (1, 'cherry', '체리');

-- 뽑을때는 필요에 따라

select * from word;


실습 진행을 위해 MK_member에 데이터 삽입하기

-- 데이터 삽입 실습(member 테이블)
-- apple, banana, orange, melon, avocador 

insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('apple', '1234', '사과', '010-1111-1111', 'apple@apple.com', '여', '990101', '2203546');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('banana', '1111', '바나나', '010-1121-1111', 'banana@banana.com', '여', '000101', '4203546');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('orange', '2222', '오렌지', '010-1234-1441', 'orange@orange.com', '남', '990101', '2203546');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('melon', '3333', '멜론', '010-1112-1551', 'melon@naver.com', '남', '991201', '244246');
insert into MK_member (userid, userpw, name, hp, email, gender, ssn1, ssn2) values('avocado', '4444', '아보카도', '010-2211-1341', 'avocado@avo.com', '여', '970102', '2203326');


 

댓글