HTML Diff
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>