1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке поближе познакомимся с таблицами в SQL и данными, которые могут в них храниться.</p>
1
<p>В этом уроке поближе познакомимся с таблицами в SQL и данными, которые могут в них храниться.</p>
2
<h2>Что такое типы данных</h2>
2
<h2>Что такое типы данных</h2>
3
<p>К таблицам предъявляется требование о типе данных поля или столбца. Тип данных накладывает ограничение на то, какие данные могут содержаться в столбце и какие операции можно с ними совершать.</p>
3
<p>К таблицам предъявляется требование о типе данных поля или столбца. Тип данных накладывает ограничение на то, какие данные могут содержаться в столбце и какие операции можно с ними совершать.</p>
4
<p>С числами мы можем выполнять операции сложения, умножения и деления. Со строками этого сделать не сможем. Но, например, можем соединить две строки или взять часть строки.</p>
4
<p>С числами мы можем выполнять операции сложения, умножения и деления. Со строками этого сделать не сможем. Но, например, можем соединить две строки или взять часть строки.</p>
5
-
<p>Если в одной колонке хранятся разнородные данные, то база данных не сможет гарантировать безопасную работу с ними. Базе данных удобно работать с однотипными типами данных. Например, не выделять много памяти на хранение данных в колонке, а выделить только фиксированную часть.</p>
5
+
<p>Если в одной колонке хранятся разнородные данные, то база данных не сможет гарантировать безопасную работу с ними. Базам данных удобнее работать с данными одного типа. Например, не выделять много памяти на хранение данных в колонке, а выделить только фиксированную часть.</p>
6
<h3>Типы данных</h3>
6
<h3>Типы данных</h3>
7
<p>У каждого поля в PostgreSQL определенный тип, который задается на этапе создания таблицы. Это значит, что значением этого поля могут быть только определенные данные.</p>
7
<p>У каждого поля в PostgreSQL определенный тип, который задается на этапе создания таблицы. Это значит, что значением этого поля могут быть только определенные данные.</p>
8
<p><a>View On DB Fiddle</a></p>
8
<p><a>View On DB Fiddle</a></p>
9
<p>Запросы выше будут успешно выполнены, так как все добавляемые данные соответствуют типам колонок. Следующий запрос завершится ошибкой. В нем мы пытаемся вставить строку в колонку<em>lessons_count</em>, которое предназначено для целых чисел. База данных выдаст ошибку при попытке выполнить подобный запрос. Если поле имеет числовой тип, то в него невозможно вставить строку, и наоборот.</p>
9
<p>Запросы выше будут успешно выполнены, так как все добавляемые данные соответствуют типам колонок. Следующий запрос завершится ошибкой. В нем мы пытаемся вставить строку в колонку<em>lessons_count</em>, которое предназначено для целых чисел. База данных выдаст ошибку при попытке выполнить подобный запрос. Если поле имеет числовой тип, то в него невозможно вставить строку, и наоборот.</p>
10
<p>В PostgreSQL встроено много различных типов данных, но на практике используются не все. Ниже мы разбираем только самые популярные типы.</p>
10
<p>В PostgreSQL встроено много различных типов данных, но на практике используются не все. Ниже мы разбираем только самые популярные типы.</p>
11
<h4>Строки</h4>
11
<h4>Строки</h4>
12
<p>Для строк в базах данных в основном используются два типа:</p>
12
<p>Для строк в базах данных в основном используются два типа:</p>
13
<ul><li><em>varchar</em>-- для строк с ограничением максимальной длины</li>
13
<ul><li><em>varchar</em>-- для строк с ограничением максимальной длины</li>
14
<li><em>text</em>-- для строк без ограничения. Как правило, это полноценные тексты</li>
14
<li><em>text</em>-- для строк без ограничения. Как правило, это полноценные тексты</li>
15
</ul><p>В базах данных нельзя оставить первый тип без указания длины. Это связано с производительностью и эффективностью. Данные в базах данных физически хранятся на дисках в файлах. Быстрый доступ к этим данным возможен только тогда, когда у данных фиксированный размер. Это позволяет быстро перемещаться по ним и считать смещения.</p>
15
</ul><p>В базах данных нельзя оставить первый тип без указания длины. Это связано с производительностью и эффективностью. Данные в базах данных физически хранятся на дисках в файлах. Быстрый доступ к этим данным возможен только тогда, когда у данных фиксированный размер. Это позволяет быстро перемещаться по ним и считать смещения.</p>
16
<p>Если размер данных не известен, то придется просматривать весь файл в поисках нужного значения. Чтобы избежать подобной ситуации, тип<em>text</em>хранится отдельно. Это тоже негативно влияет на скорость, но уже не так сильно. Если размер строки известен или он меньше какого-то значения, то предпочтительнее использовать<em>varchar</em>.</p>
16
<p>Если размер данных не известен, то придется просматривать весь файл в поисках нужного значения. Чтобы избежать подобной ситуации, тип<em>text</em>хранится отдельно. Это тоже негативно влияет на скорость, но уже не так сильно. Если размер строки известен или он меньше какого-то значения, то предпочтительнее использовать<em>varchar</em>.</p>
17
<ul><li><em>varchar</em>. Полное название типа<em>character varying</em>(<em>varchar</em>может использоваться как псевдоним). Размер строки с таким типом указывается в скобках после названия типа, например,<em>varchar(10)</em>. Это значит, что в поле с таким типом можно записать строку длиной до 10 символов.</li>
17
<ul><li><em>varchar</em>. Полное название типа<em>character varying</em>(<em>varchar</em>может использоваться как псевдоним). Размер строки с таким типом указывается в скобках после названия типа, например,<em>varchar(10)</em>. Это значит, что в поле с таким типом можно записать строку длиной до 10 символов.</li>
18
<li><em>text</em>. Не требует указания размера и может содержать текст произвольной длины</li>
18
<li><em>text</em>. Не требует указания размера и может содержать текст произвольной длины</li>
19
</ul><p>Пример создания таблицы с такими типами:</p>
19
</ul><p>Пример создания таблицы с такими типами:</p>
20
<p>Для строк в SQL используют одинарные кавычки:</p>
20
<p>Для строк в SQL используют одинарные кавычки:</p>
21
<p>Если размер строки превышает допустимую, то запрос завершится с ошибкой:</p>
21
<p>Если размер строки превышает допустимую, то запрос завершится с ошибкой:</p>
22
<h4>Числа</h4>
22
<h4>Числа</h4>
23
<p>Для чисел в основном используются два типа данных:<em>integer</em>и<em>bigint</em>. Какой конкретно указывать тип, зависит от потенциального потолка значения. Ниже указаны диапазоны, допустимые в рамках этих типов:</p>
23
<p>Для чисел в основном используются два типа данных:<em>integer</em>и<em>bigint</em>. Какой конкретно указывать тип, зависит от потенциального потолка значения. Ниже указаны диапазоны, допустимые в рамках этих типов:</p>
24
<p>Пример создания таблицы с такими типами:</p>
24
<p>Пример создания таблицы с такими типами:</p>
25
<p><a>View On DB Fiddle</a></p>
25
<p><a>View On DB Fiddle</a></p>
26
<p>Также, как и со строками, если попытаться вставить недопустимое значение, то запрос упадет с ошибкой</p>
26
<p>Также, как и со строками, если попытаться вставить недопустимое значение, то запрос упадет с ошибкой</p>
27
<p>Существуют и другие типы для числовых значений. Некоторые из них нужны для производительности базы данных и экономии места, а другие для хранения точных значений, например для финансов. Полный список можно посмотреть в<a>документации</a>.</p>
27
<p>Существуют и другие типы для числовых значений. Некоторые из них нужны для производительности базы данных и экономии места, а другие для хранения точных значений, например для финансов. Полный список можно посмотреть в<a>документации</a>.</p>
28
<h4>Даты</h4>
28
<h4>Даты</h4>
29
<p>Типы для хранения дат отличаются друг от друга очень сильно, в первую очередь по решаемой задаче. Нам надо хранить день без конкретного времени? Это тип<em>date</em>. Нужно конкретный момент времени, тогда<em>timestamp</em>. Просто время без даты? Тогда<em>time</em>.</p>
29
<p>Типы для хранения дат отличаются друг от друга очень сильно, в первую очередь по решаемой задаче. Нам надо хранить день без конкретного времени? Это тип<em>date</em>. Нужно конкретный момент времени, тогда<em>timestamp</em>. Просто время без даты? Тогда<em>time</em>.</p>
30
<p>Пример создания таблицы с такими типами:</p>
30
<p>Пример создания таблицы с такими типами:</p>
31
<p><a>View On DB Fiddle</a></p>
31
<p><a>View On DB Fiddle</a></p>
32
<p>Хорошей практикой считается добавление и заполнение полей<em>created_at</em>и<em>updated_at</em>в каждую таблицу базы данных. С их помощью всегда можно узнать, когда запись создалась и обновилась.</p>
32
<p>Хорошей практикой считается добавление и заполнение полей<em>created_at</em>и<em>updated_at</em>в каждую таблицу базы данных. С их помощью всегда можно узнать, когда запись создалась и обновилась.</p>
33
<p>Значения даты и времени принимаются практически в любом известном формате. Вот несколько примеров того, как можно задавать дату:</p>
33
<p>Значения даты и времени принимаются практически в любом известном формате. Вот несколько примеров того, как можно задавать дату:</p>
34
<h4>Логический тип</h4>
34
<h4>Логический тип</h4>
35
<p>Содержит всего два значения: true и false. Этот тип используется для флагов:</p>
35
<p>Содержит всего два значения: true и false. Этот тип используется для флагов:</p>
36
<p>Пример создания таблицы с такими типами:</p>
36
<p>Пример создания таблицы с такими типами:</p>
37
<p><a>View On DB Fiddle</a></p>
37
<p><a>View On DB Fiddle</a></p>
38
<p>Состояние "true" может задаваться следующими значениями:</p>
38
<p>Состояние "true" может задаваться следующими значениями:</p>
39
<p>Для состояния "false" можно использовать следующие варианты:</p>
39
<p>Для состояния "false" можно использовать следующие варианты:</p>
40
<p>Недопустимое значение в колонке<em>boolean</em>не будет сохранено</p>
40
<p>Недопустимое значение в колонке<em>boolean</em>не будет сохранено</p>
41
<h4>NULL</h4>
41
<h4>NULL</h4>
42
<p>Помимо типов данных для реальных значений, в базе существует специальное значение NULL, чтобы обозначать пустоту. Оно используется, когда у конкретного поля нет значения. Тип поля при этом не важен. Подробнее с NULL мы разберемся в следующих уроках.</p>
42
<p>Помимо типов данных для реальных значений, в базе существует специальное значение NULL, чтобы обозначать пустоту. Оно используется, когда у конкретного поля нет значения. Тип поля при этом не важен. Подробнее с NULL мы разберемся в следующих уроках.</p>
43
<p><a>View On DB Fiddle</a></p>
43
<p><a>View On DB Fiddle</a></p>
44
<p>Воспользуемся изученными типами данных, чтобы создать таблицу сотрудников</p>
44
<p>Воспользуемся изученными типами данных, чтобы создать таблицу сотрудников</p>
45
<h2>Выводы</h2>
45
<h2>Выводы</h2>
46
<p>В этом уроке мы познакомились с типами данных в таблице. Повторим ключевые моменты:</p>
46
<p>В этом уроке мы познакомились с типами данных в таблице. Повторим ключевые моменты:</p>
47
<ul><li>В каждом столбце должны храниться однородные данные. Это необходимо для удобства и безопасности работы с данными</li>
47
<ul><li>В каждом столбце должны храниться однородные данные. Это необходимо для удобства и безопасности работы с данными</li>
48
<li>Типы данных в SQL накладывают ограничения на хранящиеся данные и операции, которые можно с ними совершать</li>
48
<li>Типы данных в SQL накладывают ограничения на хранящиеся данные и операции, которые можно с ними совершать</li>
49
<li>Типы данных указываются при создании таблицы</li>
49
<li>Типы данных указываются при создании таблицы</li>
50
<li>Попытка вставить данные неподходящего типа или значения в колонку приведет к ошибке</li>
50
<li>Попытка вставить данные неподходящего типа или значения в колонку приведет к ошибке</li>
51
<li>Для строк используются такие типы данных как<em>varchar</em>и<em>text</em></li>
51
<li>Для строк используются такие типы данных как<em>varchar</em>и<em>text</em></li>
52
<li>Для строк необходимо использовать одинарные кавычки</li>
52
<li>Для строк необходимо использовать одинарные кавычки</li>
53
<li>Для чисел используются типы<em>integer</em>,<em>bigint</em>,<em>real</em></li>
53
<li>Для чисел используются типы<em>integer</em>,<em>bigint</em>,<em>real</em></li>
54
<li>Для даты и времени используют<em>timestamp</em>,<em>date</em>,<em>time</em></li>
54
<li>Для даты и времени используют<em>timestamp</em>,<em>date</em>,<em>time</em></li>
55
<li>Для логических значений используют тип<em>boolean</em>. Эти значения чаще всего бывают в колонках-флагах</li>
55
<li>Для логических значений используют тип<em>boolean</em>. Эти значения чаще всего бывают в колонках-флагах</li>
56
<li>Когда у поля нет конкретного значения, используют специальное значение NULL</li>
56
<li>Когда у поля нет конкретного значения, используют специальное значение NULL</li>
57
</ul>
57
</ul>