SQL의 데이터 유형 소개

JavaScript와 달리 SQL에는 강력한 유형이 있습니다. 모든 테이블에서 모든 열에는 고유한 고정 데이터 유형이 있습니다.

데이터 유형이 많이 있지만 Java 언어와 달리 모든 경우에 대한 데이터 유형이 있기 때문에 많은 것이 아닙니다. 데이터베이스는 데이터 크기에 크게 의존하므로 많은 데이터 유형이 길이만 서로 다릅니다.

전체적으로 데이터 유형은 5개의 그룹으로 나눌 수 있습니다.

  • 숫자 유형
  • 문자열 유형
  • 날짜시간을 저장하는 유형
  • 객체: 일반적으로 바이트 모음 으로 표시됩니다.
  • 전송 : JSON 및 XML

일반적으로 다른 DBMS에는 여전히 자체 데이터 유형이 있습니다. 각 DBMS에는 자체 전문화가 있으므로 새로운 데이터 유형을 추가하는 것은 매우 일반적인 일입니다.

또 다른 것은 새로운 데이터 유형을 추가하는 것만으로는 충분하지 않으며, 이 작업을 편리하고 빠르게 수행할 뿐만 아니라 작업할 기능을 추가해야 한다는 것입니다.

산업용(엔터프라이즈) DBMS에서 작업하는 경우 해당 데이터 유형과 기능을 처리해야 할 가능성이 높습니다. 2-5 권의 좋은 책을 읽는 데 필요한 것.

SQL에 대한 이해의 일환으로 데이터 유형의 세 가지 주요 그룹을 고려할 것입니다.

  • 숫자
  • 문자열
  • 날짜

SQL의 숫자 유형

SQL에서 숫자 유형은 세 그룹으로 나뉩니다.

  • 정수 유형
  • 고정 소수점 숫자(소수점 고정 숫자)
  • 부동 소수점 숫자

정수 부터 시작해 봅시다 . 그 중 5개만 있으며 하나의 표로 설명할 수 있습니다.

# 유형 이름 길이(바이트) Java의 아날로그 최소값 최대값
1 TINYINT 1 바이트 -128 127
2 스몰린트 2 짧은 -32.768 32.767
중간 -8,388,608 8,388,607
4 지능 4 정수 -2,147,483,648 2,147,483,647
5 비긴트 8 -2 63 2 63-1

데이터 유형은 Java 데이터 유형과 매우 유사하지만 길이가 3바이트인 정수 유형도 있습니다. 이것은 크기를 줄이기 위해 수행됩니다.

다음으로 부동 소수점 유형이 있습니다 . Java에서와 마찬가지로 두 가지만 있습니다.

# 유형 이름 길이(바이트) Java의 아날로그 최소값 최대값
1 뜨다 4 뜨다 -3.40E+38 +1.18E+38
2 더블 8 더블 -1.79E+308 +1.79E+308

다시 말하지만 새로운 것은 없습니다. 모든 것은 Java와 동일합니다. 그러나 Java와 달리 SQL에는 고정 소수점 실수라는 또 다른 특수 유형이 있습니다. DECIMAL이라고 합니다.

일반적으로 이 유형은 금액을 저장하는 데 사용됩니다. 이 유형의 이름이 쓰여지면 일반적으로 소수점 전후에 숫자의 소수점 이하 자릿수가 표시됩니다. 일반적인 형식은 다음과 같습니다.

DECIMAL(total_characters, after_comma)

작은 예:

salary DECIMAL(5,2)

급여 열에 정수(소수점 최대 3자리)와 소수 부분(소수점 2자리)이 포함될 수 있다는 사실을 이렇게 설명했습니다.

DECIMAL 유형이 지원하는 최대 문자 수는 65자입니다.

SQL의 문자열 유형

데이터베이스의 행은 두 가지 형식으로 저장할 수 있습니다.

  • 고정 길이 문자열
  • 가변 길이 문자열

고정 길이 문자열은 CHAR 로 지정됩니다 .

CHAR(length)

고정 길이는 이 열의 모든 값에 엄격하게 고정된 문자 수가 포함됨을 의미합니다.

고정 길이 문자열의 예:

country_code CHAR(2)

가변 길이 문자열은 VARCHAR 유형 으로 지정됩니다 .

VARCHAR(max_length)

가변 길이는 이 열의 모든 값에 임의 길이의 텍스트가 포함되지만 최대 길이를 넘지 않음을 의미합니다.

가변 길이 문자열 예:

phone VARCHAR(12)

고정 길이 문자열은 매우 큰 이점이 있습니다. 클라이언트가 SQL 서버에 테이블의 1,000,000번째 행을 반환하도록 요청하고 테이블의 행 길이가 고정된 경우 행 길이를 알면 원하는 바이트와 관련된 바이트를 쉽게 계산할 수 있습니다. 열.

길이가 가변적인 행의 경우 테이블에서 원하는 행을 빨리 찾을 수 없습니다. ArrayList 및 LinkedList에 대한 액세스 속도를 기억하십시오. 여기서 상황은 거의 동일합니다.

데이터 유형에 따라 길이가 다른 문자열이 테이블에 저장되는 방식을 비교해 보겠습니다.

문자(4) 저장할 바이트 VARCHAR(4) 저장할 바이트
'' ' ' 4 '' 1
'아브' '아브' 4 '아브'
'abcd' 'abcd' 4 'abcd' 5
'abcdefgh' 'abcd' 4 'abcd' 5

메모. VARCHAR 타입은 문자열의 길이를 추가로 저장해야 하므로 같은 길이에 1바이트가 더 필요하다.

SQL의 임시 유형

SQL에는 날짜와 시간을 저장하기 위한 특수 유형도 있습니다. 총 5가지 유형이 있습니다.

# 유형 이름 Java DateTime API의 아날로그 최소값 최대값
1 날짜 현지 날짜 '2022-06-30' '1000-01-01' '9999-12-31'
2 시간 현지 시각 'hh:mm:ss[.fraction]' '-838:59:59.000000' '838:59:59.000000'
날짜 시간 LocalDateTime '1000-01-01 00:00:00.000000' '9999-12-31 23:59:59.999999'
4 타임스탬프 날짜 '1970-01-01 00:00:01.000000' '2038-01-19 03:14:07.999999'
5 년도 1901년 2155

쿼리의 모든 데이터는 작은따옴표로 묶인 문자열로 작성됩니다. 항목 형식은 가장 큰 것부터 가장 작은 것까지입니다.

  • 년도
  • 시간
  • 두번째
  • 초의 분수

DATE, TIME 및 DATETIME 유형은 일반적으로 Java DateTme API의 유형인 LocalDate, LocalTime, LocalDateTime과 유사한 것으로 간주될 수 있습니다. 논리는 거의 같습니다.

TIMESTAMP 유형은 1970년 시작(UNIX 운영 체제 표준) 이후 밀리초 단위로 데이터를 저장합니다. 이러한 형태로 Java 언어에서 Date 형식으로 저장됩니다.

마지막으로 1바이트 길이의 YEAR 유형이 있으며 1에서 255까지의 값을 저장합니다. 따라서 사용 가능한 연도 범위는 1901-2155입니다. 값 0이 NULL 값을 인코딩하는 데 사용되기 때문에 1900년은 이 유형으로 저장할 수 없습니다.

SQL에 개체 저장

긴 객체나 텍스트를 저장하기 위한 특수 유형이 있습니다. 자세히 설명하지는 않겠지만 어쨌든 나열하겠습니다.

# 유형 이름 설명
1 텍스트 긴 텍스트를 저장하는 데 사용됩니다. 이 필드에서 비교 및 ​​정렬할 때 처음 100자만 사용됩니다.
2 얼룩 이름은 Byte Large Object를 나타냅니다. 바이트 모음으로 저장됩니다. 예를 들어 데이터베이스에 사진을 저장하는 데 사용할 수 있습니다.
클롭 이름은 Char Large Object의 약자입니다. 긴 텍스트를 저장하는 데 사용됩니다.
4 열거형 고정 값 세트를 설정하고 그 중 하나를 값으로 저장할 수 있습니다.
5 세트 고정된 값 집합을 설정하고 그 중 일부를 값으로 저장할 수 있습니다. 일반적으로 바이너리 마스크로 저장합니다.

이론적으로 모든 Java 개체를 바이트 집합으로 직렬화하고 데이터베이스에 BLOB로 저장할 수 있습니다. 객체를 저장하는 것은 문제가 되지 않습니다. 그와 더 협력하는 방법?

테이블이 백만 개의 개체를 직렬화된 형식으로 저장한다고 가정해 보겠습니다. 어떻게 개체를 검색할 것입니까? DBMS는 작업을 위한 광범위한 기능 세트를 제공할 때 특정 유형의 데이터만 지원합니다.