• Типы данных SQL
  • 이번 포스팅은 아주 간단하게 이런 Type이 있구나 보기위해 작성했다.

STRING Типы

CHAR(x): строка фиксированной длины

VARCHAR(x): строка переменной длины (예를 들면, имя пользователя, пароль, адрес электронной почты и т. д.) (макс. 65 535 символов (~ 64 КБ)

Почтовый индекс, номер телефона 등은 Числовое значение임에도 불구하고, STRING으로 사용이 가능하다. 그 이유는 Почтовый индекс와 Номер телефона를 가지고 어떤 수학적 연산도 하지 않기 때문이다.

VARCHAR가 저장할 수 있는 것보다 더 길어지는 상황에 대안으로,

СРЕДНИЙТЕКСТ (макс. 16 МБ). 또 다른 대안으로는

ДЛИННЫЙ ТЕКСТ (макс. 4 ГБ) (주로 BOOK 등을 저장할 때 사용한다)가 있다.

Целочисленные типы

TINYINT: 1 байт [-128, 127]

UNSIGNED TINYINT: [0, 255]

SMALLINT: 2 байта [-32K, 32K]

СРЕДНИЙ: 3 байта [-8M, 8M]

INT: 4 байта [-2B, 2B]

БОЛЬШОЙ: 8 байт [-9Z, 9Z]

외울 필요없다.

Используйте наименьший тип данных, который соответствует вашим потребностям

Типы с фиксированной и плавающей запятой

DECIMAL(p, s) → DECIMAL(9, 2) => 1234567,89

ДЕК

ЦИФРОВОЙ

ФИКСИРОВАННЫЙ

FLOAT — для научных расчетов

DOUBLE — для научных расчетов

Логические типы

BOOL

логическое значение

Перечисление и набор типов

한 Column에서 특정 값만은 허용된다고 생각해보자. 예를 들면,

A Стол: «маленький», «средний», «большой».

이 경우 ENUM Type을 사용할 수 있다.

ENUM('маленький', 'средний', 'большой'). 이렇게 Тип을 정의한 Столбец 에느 маленький, средний, большой 값만 넣을 수 있다. ENUM 은 Многоразовый 이 불가능하다.

Типы даты и времени

ДАТА

ВРЕМЯ

ДАТАВРЕМЯ: 8 байт

TIMESTAMP: 언제 한 row에 값이 삽입되거나 혹은 가장 최근에 갱신되었는가를 계속해서 추적한다. (4 байта) (до 2038)

ГОД

Типы больших двоичных объектов

Изображение, видео, pdf, текстовый файл.

TINYBLOB: 255 байт

Большой двоичный объект: 65 КБ

СРЕДНИЙБЛОК: 16 МБ

ДЛИННЫЙ БЛОК: 4 ГБ

ПРОБЛЕМЫ С ХРАНЕНИЕМ ФАЙЛОВ В БАЗЕ ДАННЫХ

  1. Увеличенный размер базы данных
  2. Медленное резервное копирование
  3. Проблемы с производительностью
  4. Больше кода для чтения/записи изображений

ТИП JSON

  • Облегченный формат для хранения и передачи данных через Интернет.
--JSON
{
    "Key" : value
}
-- Value can be anything
  • Целевая версия MySQL по умолчанию Не менее 8
UPDATE products
SET properties = '
{
   "dimensions": [1, 2, 3],
   "weight: 10,
   "manufacturer": {"name": "su"}
}'
WHERE product_id = 1;
  • UPDATE한 값을 확인해보자
SELECT *
FROM products;
  • 더 간단한 방법으로 JSON Data를 작성해보자
UPDATE products
SET properties = JSON_OBJECT(
   'weight', 10, 
   'dimensions', JSON_ARRAY(1,2,3),
   'manufacturer', JSON_OBJECT('name', 'lg')
);
WHERE product_id = 1;
  • JSON Data를 Select해보자
SELECT product_id, JSON_EXTRACT(properties, '$.weight')
FROM products
WHERE product_id = 1;
  • Метод JSON_EXTRACTВозможность использования метода JSON_EXTRACT
SELECT product_id, properties -> '$.weight'
FROM products
WHERE product_id = 1;
  • JSON_ARRAY 접근해보자
SELECT product_id, properties -> '$.dimensions[0]'
FROM products
WHERE product_id = 1;
  • JSON_OBJECT 접근해보자
SELECT product_id, properties -> '$.manufacturer.name'
FROM products
WHERE product_id = 1;
  • 결과값의 Quote를 없애보자. 화살표를 하나 더 추가하면된다.
SELECT product_id, properties ->> '$.manufacturer.name'
FROM products
WHERE product_id = 1;
  • Заявление WHERE에도-››사용이 가능하다.
SELECT product_id, properties ->> '$.manufacturer.name'
FROM products
WHERE product_id ->> '$.manufacturer.name' = 'lg';
  • JSON_OBJECT 의 여러 Key Value 중 Weight Key 의 Value를 Update 하고 싶은 상황의 쿼리는 아래와 같다. JSON_SET 이용하면 된다.
UPDATE products
SET properties = JSON_SET(
    properties,
    '$.weight', 20,
    '$.age, 10 -- ADD New Properties
)
WHERE product_id = 1;
  • 이제 Update 된 JSON 값을 확인해보자
SELECT product_id, properties
FROM products
WHERE properties ->> '$.manufacturer.name' = 'lg';
  • JSON_SET 을 이용해 Update 하거나 새로운 값을 Add 하는데 사용 할 수 있다.
  • 마지막으로, JSON Property를 삭제할 때는 JSON_REMOVE를 사용하면 된다.
UPDATE products
SET properties = JSON_REMOVE(
    properties,  -- JSON OBJ를 명시해주고
    '$.age'      -- REMOVE 항목을 하나 혹은 여러개 명시
)
WHERE product_id = 1;
  • JSON_REMOVE가 잘 동작했는지 테스트해보자.
SELECT product_id, properties
FROM products
WHERE properties ->> '$.manufacturer.name' = 'lg';

ССЫЛКИ И РЕСУРСЫ