Оглавление
- Главное о базах данных
- Организация информации в РБД
- Тип данных TIMESTAMP
- SQL Data Types
- Типы данных Дата / Время
- Уникальный идентификатор
- 5.0. Сортировка, группировка и составные SELECT-ы
- Сопоставления типов данных SQL Server
- Типы данных SQL Server
- Other data types
- SQL Справочник
- SQL Server to MySQL, Oracle, PostgreSQL, SQLite Data Type Mapping
- Как хранится информация в БД
- Синонимы типов данных в Microsoft SQL Server
- Числовые типы данных
- Базы данных в оперативной памяти
- Вступление
- SQL Пример ALTER TABLE
- Common Integer-Type Mistakes
- The Float Data Types
Главное о базах данных
- Чаще всего базы данных напоминают таблицы: в них одному параметру соответствует один набор данных. Например, один клиент — одно имя, один телефон, один адрес.
- Такие «табличные» базы данных называются реляционными.
- Чтобы строить сложные связи, разные таблицы в реляционных базах можно связывать между собой: ставить ссылки.
- Реляционная база — не единственный способ хранения данных. Есть ситуации, когда нам нужна большая гибкость в хранении.
- Бывают сетевые базы данных: когда нужно хранить много связей между множеством объектов. Например, каталог фильмов: в одном фильме может участвовать много человек, а каждый из них может участвовать во множестве фильмов.
- Бывают иерархические базы, или «деревья». Пример — наша файловая система.
- Какую выбрать базу — зависит от задачи. Одна база не лучше другой, но они могут быть более или менее подходящими для определённых задач.
Текст и иллюстрации
Миша Полянин
Редактор
Максим Ильяхов
Корректор
Ира Михеева
Иллюстратор
Даня Берковский
Вёрстка
Маша Дронова
Доставка
Олег Вешкурцев
Что-то делает руками
Паша Федоров
Во славу
Практикума
Организация информации в РБД
Таблицы часто включают первичный ключ, который предоставляет уникальный идентификатор для каждого типа структур в базе данных. Ключ может быть назначен столбцу (который требует уникального значения для каждой строки) или может состоять из нескольких столбцов, которые вместе образуют уникальную комбинацию значений. В любом случае первичный ключ обеспечивает эффективный способ индексирования значений, может применяться для совместного их использования между таблицами. Например, значение первичного ключа из одной таблицы может быть назначено полю в строке другой таблицы. А числа, импортированные из других таблиц, называются внешними ключами.
Стандартный способ доступа к информации из реляционной базы данных — это запрос SQL, или структурированный запрос. SQL-запросы могут использоваться для создания, изменения и удаления таблиц, а также для выбора, вставки и удаления значений из уже существующих.
Тип данных TIMESTAMP
Тип данных TIMESTAMP указывает столбец, определяемый как VARBINARY(8) или BINARY(8) , в зависимости от свойства столбца принимать значения null. Для каждой базы данных система содержит счетчик, значение которого увеличивается всякий раз, когда вставляется или обновляется любая строка, содержащая ячейку типа TIMESTAMP, и присваивает этой ячейке данное значение. Таким образом, с помощью ячеек типа TIMESTAMP можно определить относительное время последнего изменения соответствующих строк таблицы. (ROWVERSION является синонимом TIMESTAMP.)
Само по себе значение, сохраняемое в столбце типа TIMESTAMP, не представляет никакой важности. Этот столбец обычно используется для определения, изменилась ли определенная строка таблицы со времени последнего обращения к ней
SQL Data Types
SQL data types can be broadly divided into following categories.
- Numeric data types such as int, tinyint, bigint, float, real, etc.
- Date and Time data types such as Date, Time, Datetime, etc.
- Character and String data types such as char, varchar, text, etc.
- Unicode character string data types, for example nchar, nvarchar, ntext, etc.
- Binary data types such as binary, varbinary, etc.
- Miscellaneous data types – clob, blob, xml, cursor, table, etc.
SQL Data Types important points
- Not all data types are supported by every relational database vendor. For example, Oracle database doesn’t support DATETIME and MySQL doesn’t support CLOB data type. So while designing database schema and writing SQL queries, make sure to check if the data types are supported or not.
- Data types listed here doesn’t include all the data types, these are the most popularly used data types. Some relational database vendors have their own data types that might be not listed here. For example, Microsoft SQL Server has and data types but since it’s not supported by other popular database vendors, it’s not listed here.
- Every relational database vendor has its own maximum size limit for different data types, you don’t need to remember the limit. Idea is to have the knowledge of what data type to be used in a specific scenario.
Let’s look into different categories of SQL data types in detail.
SQL Numeric Data Types
Datatype | From | To |
---|---|---|
bit | 1 | |
tinyint | 255 | |
smallint | -32,768 | 32,767 |
int | -2,147,483,648 | 2,147,483,647 |
bigint | -9,223,372,036, 854,775,808 | 9,223,372,036, 854,775,807 |
decimal | -10^38 +1 | 10^38 -1 |
numeric | -10^38 +1 | 10^38 -1 |
float | -1.79E + 308 | 1.79E + 308 |
real | -3.40E + 38 | 3.40E + 38 |
SQL Date and Time Data Types
Datatype | Description |
---|---|
DATE | Stores date in the format YYYY-MM-DD |
TIME | Stores time in the format HH:MI:SS |
DATETIME | Stores date and time information in the format YYYY-MM-DD HH:MI:SS |
TIMESTAMP | Stores number of seconds passed since the Unix epoch (‘1970-01-01 00:00:00’ UTC) |
YEAR | Stores year in 2 digits or 4 digit format. Range 1901 to 2155 in 4-digit format. Range 70 to 69, representing 1970 to 2069. |
SQL Character and String Data Types
Datatype | Description |
---|---|
CHAR | Fixed length with a maximum length of 8,000 characters |
VARCHAR | Variable-length storage with a maximum length of 8,000 characters |
VARCHAR(max) | Variable-length storage with provided max characters, not supported in MySQL |
TEXT | Variable-length storage with maximum size of 2GB data |
Note that all the above data types are for character stream, they should not be used with Unicode data.
SQL Unicode Character and String Data Types
Datatype | Description |
---|---|
NCHAR | Fixed length with maximum length of 4,000 characters |
NVARCHAR | Variable-length storage with a maximum length of 4,000 characters |
NVARCHAR(max) | Variable-length storage with provided max characters |
NTEXT | Variable-length storage with a maximum size of 1GB data |
Note that above data types are not supported in MySQL database.
SQL Binary Data Types
Datatype | Description |
---|---|
BINARY | Fixed length with a maximum length of 8,000 bytes |
VARBINARY | Variable-length storage with a maximum length of 8,000 bytes |
VARBINARY(max) | Variable-length storage with provided max bytes |
IMAGE | Variable-length storage with maximum size of 2GB binary data |
SQL Miscellaneous Data Types
Datatype | Description |
---|---|
CLOB | Character large objects that can hold up to 2GB |
BLOB | For binary large objects |
XML | for storing XML data |
JSON | for storing JSON data |
That’s all for a quick roundup on SQL data types.
Reference: , MySQL Data Types
Типы данных Дата / Время
Ниже приведены типы данных даты и времени в SQL Server (Transact-SQL):
Синтаксис типа данных | Максимальный размер | Пояснение |
---|---|---|
DATE | Диапазон значений от ‘0001-01-01’ до ‘9999-12-31’. | Отображается как ‘YYYY-MM-DD’ |
DATETIME | Диапазон значений дат от ‘1753-01-01 00:00:00’ до ‘9999-12-31 23:59:59’. Диапазон значений времени от ’00: 00: 00 ‘до ’23: 59: 59: 997’ | Отображается как ‘YYYY-MM-DD hh:mm:ss’ |
DATETIME2 | Диапазон значений дат от ‘0001-01-01’ до ‘9999-12-31′. Диапазон значений времени от ’00:00:00′ до ’23:59:59:9999999’. | Отображается как ‘YYYY-MM-DD hh:mm:ss’ |
SMALLDATETIME | Диапазон значений дат от ‘1900-01-01’ до ‘2079-06-06′. Диапазон значений времени от ’00:00:00′ до ’23:59:59’. | Отображается как ‘YYYY-MM-DD hh:mm:ss’ |
TIME | Диапазон значений от ’00:00:00.0000000′ до ’23:59:59.9999999′ | Отображается как ‘YYYY-MM-DD hh:mm:ss’ |
DATETIMEOFFSET | Диапазон значений дат от ‘0001-01-01’ до ‘9999-12-31′. Диапазон значений времени от ’00:00:00′ до ’23:59:59:9999999’. Диапазон смещения часового пояса от -14:00 до +14:00. | Отображается как ‘YYYY-MM-DD hh:mm:ss’ |
Уникальный идентификатор
Имя | Описание | Пример |
uuid | 128-битное значение, генерируемое специальным алгоритмом, практически гарантирующим, что этим же алгоритмом оно не будет получено больше нигде в мире. Записывается в виде 32 шестнадцатеричных цифр, разделённых на несколько групп. | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 |
# CREATE TABLE uid (uid uuid, name varchar(15)); # INSERT INTO uid (uid, name) VALUES (gen_random_uuid (), 'alex'), (gen_random_uuid (), 'bob'), (gen_random_uuid (), 'max'); # SELECT * FROM uid; uid | name --------------------------------------+------ 650d3f16-c81c-4bbb-83a8-1964a6d2912e | alex 7eb5cf8e-9755-48b3-8e66-753a09c6a7ed | bob b7837e0a-3519-4812-89f1-c7a9784406a3 | max (3 rows)
Функция gen_random_uuid () предназначена для генерирования уникального uuid. Хотя есть мизерная вероятность что будет сгенерирован неуникальный uuid.
Существуют и другие типы, например для хранения двоичных данных, json, массивов, xml и другой информации. Но так как я их не применял, то и описывать пока не буду.
Сводка
Имя статьи
Типы данных PostgreSQL
Описание
В PostgreSQL важно знать про типы данных. Каждая колонка в таблице имеет свой тип и может хранить только данные определенного типа
Рассмотрим основные типы
5.0. Сортировка, группировка и составные SELECT-ы
Когда результаты запроса сортируются посредством , первыми идут значения класса NULL, затем INTEGER и REAL, перемежаясь в числовом порядке, затем TEXT, упорядоченные соответственно сортировочной последовательности, и, наконец, BLOB в порядке, определённом функцией . Перед упорядочением конвертирование классов хранения не производится.
При группировке посредством , значения с различными классами хранения считаются различными, кроме значений INTEGER и REAL, которые считаются эквивалентными по их числовому значению. Группировка не приводит к конвертированию классов хранения.
Составные операторы для запросов SELECT, то есть UNION, INTERSECT и EXCEPT, производит неявное сравнение между значениями. По отношению к операндам сравнения не применяется аффинированность, а если происходит неявное сравнение, связанное с UNION, INTERSECT и EXCEPT, значения сравниваются «как есть».
Сопоставления типов данных SQL Server
-
03/30/2017
-
Время чтения: 3 мин
- Соавторы
В этой статье
В SQL Server и .NET Framework используются различные системы типов.SQL Server and the .NET Framework are based on different type systems. Например, максимальная разрядность структуры .NET Framework Decimal составляет 28, в то время как максимальная разрядность десятичных и числовых типов данных SQL Server — 38.For example, the .NET Framework Decimal structure has a maximum scale of 28, whereas the SQL Server decimal and numeric data types have a maximum scale of 38. Чтобы обеспечить целостность данных при чтении и записи, объект SqlDataReader предоставляет характерные для SQL Server типизированные методы доступа, возвращающие объекты System.Data.SqlTypes, а также методы доступа, возвращающие типы .NET Framework.To maintain data integrity when reading and writing data, the SqlDataReader exposes SQL Server–specific typed accessor methods that return objects of System.Data.SqlTypes as well as accessor methods that return .NET Framework types. Типы данных SQL Server и .NET Framework также представлены перечислениями в классах DbType и SqlDbType, которые можно использовать при указании типов данных SqlParameter.Both SQL Server types and .NET Framework types are also represented by enumerations in the DbType and SqlDbType classes, which you can use when specifying SqlParameter data types.
В приведенной ниже таблице показан выводимый тип .NET Framework.NET Framework, перечисления DbType и SqlDbType, а также методы доступа для класса SqlDataReader.The following table shows the inferred .NET Framework.NET Framework type, the DbType and SqlDbType enumerations, and the accessor methods for the SqlDataReader.
1 нельзя задать свойство для .1 You cannot set the property of a to .2 используйте конкретный типизированный метод доступа, если известен базовый тип .2 Use a specific typed accessor if you know the underlying type of the .
Документация по SQL ServerSQL Server documentation
Дополнительные сведения о типах данных SQL Server см. в разделе типы данных (Transact-SQL).For more information about SQL Server data types, see Data types (Transact-SQL).
Типы данных SQL Server и ADO.NETSQL Server Data Types and ADO.NETДвоичные данные и данные большого объема SQL ServerSQL Server Binary and Large-Value DataСопоставления типов данных в ADO.NETData Type Mappings in ADO.NETНастройка параметров и типы данных параметровConfiguring Parameters and Parameter Data TypesЦентр разработчиков наборов данных и управляемых поставщиков ADO.NETADO.NET Managed Providers and DataSet Developer Center
Типы данных SQL Server
Типы строковых данных:
Тип данных | Описание | Максимальный размер | Хранения |
---|---|---|---|
char(n) | Фиксированная ширина символьной строки | 8,000 Символов | Определенная ширина |
varchar(n) | Переменная ширина символьная строка | 8,000 Символов | 2 байта + количество символов |
varchar(max) | Переменная ширина символьная строка | 1,073,741,824 Символов | 2 байта + количество символов |
text | Переменная ширина символьная строка | 2GB of text data | 4 байта + количество символов |
nchar | Фиксированная ширина строки Юникода | 4,000 Символов | Определенная ширина x 2 |
nvarchar | Переменная ширина Юникод строка | 4,000 Символов | |
nvarchar(max) | Переменная ширина Юникод строка | 536,870,912 Символов | |
ntext | Переменная ширина Юникод строка | 2GB of text data | |
binary(n) | Фиксированная ширина двоичной строки | 8,000 bytes | |
varbinary | Переменная ширина двоичная строка | 8,000 bytes | |
varbinary(max) | Переменная ширина двоичная строка | 2GB | |
image | Переменная ширина двоичная строка | 2GB |
Типы данных чисел:
Тип данных | Описание | Хранения |
---|---|---|
bit | Целое число, которое может быть 0, 1 или null | |
tinyint | Позволяет целые числа от 0 до 255 | 1 byte |
smallint | Позволяет целые числа между -32 768 и 32 767 | 2 bytes |
int | Позволяет целые числа между -2 147 483 648 и 2 147 483 647 | 4 bytes |
bigint | Позволяет целые числа между -9223372036854775808 и 9 223 372 036 854 775 807 | 8 bytes |
decimal(p,s) | Fixed precision and scale numbers.
Разрешает числа от-10 ^ 38 + 1 до 10 ^ 38 – 1. Параметр p указывает максимальное общее количество цифр, которые могут быть сохранены (как слева, так и справа от десятичной запятой). p должно быть значением от 1 до 38. Значение по умолчанию — 18. Параметр s указывает максимальное число цифр, хранящихся справа от десятичной запятой. s должно быть значением от 0 до p. значение по умолчанию 0 |
5-17 bytes |
numeric(p,s) | Фиксированные значения точности и масштаба.
Разрешает числа от-10 ^ 38 + 1 до 10 ^ 38 – 1. Параметр p указывает максимальное общее количество цифр, которые могут быть сохранены (как слева, так и справа от десятичной запятой). p должно быть значением от 1 до 38. Значение по умолчанию — 18. Параметр s указывает максимальное число цифр, хранящихся справа от десятичной запятой. s должно быть значением от 0 до p. значение по умолчанию 0 |
5-17 bytes |
smallmoney | Денежные данные от-214 748,3648 до 214 748,3647 | 4 bytes |
money | Денежные данные от-922 337 203 685 477,5808 до 922 337 203 685 477,5807 | 8 bytes |
float(n) | Плавающая точность данных чисел от-1.79 e + 308 до 1.79 e + 308.
Параметр n указывает, должно ли поле содержать 4 или 8 байт. float (24) содержит 4-байтное поле и float (53) содержит 8-байтное поле. Значение по умолчанию n — 53. |
4 or 8 bytes |
real | Плавающие данные о точности чисел от-38 e + | 4 bytes |
Типы данных дат:
Тип данных | Описание | Хранения |
---|---|---|
datetime | С 1 января 1753 по 31 декабря 9999 с точностью 3,33 миллисекунд | 8 bytes |
datetime2 | С 1 января 0001 по 31 декабря 9999 с точностью 100. | 6-8 bytes |
smalldatetime | С 1 января 1900 по 6 июня 2079 с точностью до 1 минуты | 4 bytes |
date | Хранить только дату. С 1 января 0001 по 31 декабря 9999 | 3 bytes |
time | Хранить время только для точности 100-ти секунд | 3-5 bytes |
datetimeoffset | Так же, как datetime2 с добавлением смещения часового пояса | 8-10 bytes |
timestamp | Хранит уникальный номер, который обновляется каждый раз при создании или изменении строки. Значение timestamp основывается на внутренних часах и не соответствует реальному времени. Каждая таблица может иметь только одну переменную timestamp |
Другие типы данных:
Тип данных | Описание |
---|---|
sql_variant | Хранит до 8 000 байт данных различных типов данных, за исключением текста, ntext и отметки времени |
uniqueidentifier | Хранит глобальный уникальный идентификатор (GUID) |
xml | Хранит XML-форматированные данные. Максимум 2 ГБ |
cursor | Хранит ссылку на курсор, используемый для операций с базой данных |
table | Хранит результирующий набор для последующей обработки |
Other data types
Data Type | Description |
---|---|
cursor | for variables or stored procedure OUTPUT parameter that contains a reference to a cursor |
rowversion | expose automatically generated, unique binary numbers within a database. |
hierarchyid | represent a tree position in a tree hierarchy |
uniqueidentifier | 16-byte GUID |
sql_variant | store values of other data types |
XML | store XML data in a column, or a variable of XML type |
Spatial Geometry type | represent data in a flat coordinate system. |
Spatial Geography type | store ellipsoidal (round-earth) data, such as GPS latitude and longitude coordinates. |
table | store a result set temporarily for processing at a later time |
In this tutorial, you have learned about the brief overview of SQL Server data types. We will examine each data type in detail in the next tutorials.
SQL Справочник
SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL ОператорыSQL Типы данныхSQL Краткий справочник
SQL Server to MySQL, Oracle, PostgreSQL, SQLite Data Type Mapping
General Type | Type | MySQL | Oracle | PostgreSQL | SQLite |
---|---|---|---|---|---|
Exact Numerics | bit | TINYINT(1) | NUMBER(3) | BOOLEAN | INTEGER |
Exact Numerics | tinyint | TINYINT(signed) | NUMBER(3) | SMALLINT | INTEGER |
Exact Numerics | smallint | SMALLINT | NUMBER(5) | SMALLINT | INTEGER |
Exact Numerics | int | MEDIUMINT, INT | NUMBER(10) | INT | INTEGER |
Exact Numerics | bigint | BIGINT | NUMBER(19) | BIGINT | INTEGER |
Exact Numerics | decimal | DECIMAL | NUMBER(p) | DECIMAL(p,s) | REAL |
Exact Numerics | smallmoney | DOUBLE | NUMBER(10,4) | MONEY | REAL |
Exact Numerics | money | DOUBLE | NUMBER(19,4) | MONEY | REAL |
Approximate Numerics | float | FLOATDOUBLE; REAL | FLOAT(49) | DOUBLE PRECISION | REAL |
Date and Time | date | DATE | DATE | TEXT | |
Date and Time | smalldatetime | TIMESTAMP | DATE | TIMESTAMP(0) | TEXT |
Date and Time | time | TIME | TIME | TEXT | |
Date and Time | datetime2 | DDATETIME | TIMESTAMP | TEXT | |
Date and Time | datetime | DATE | TIMESTAMP(3) | TEXT | |
Date and time | datetimeoffset | TIMESTAMPwith time zone | TEXT | ||
Caracter Strings | char | CHAR | CHAR | CHAR | TEXT |
Caracter Strings | varchar | VARCHAR | VARCHAR2 | VARCHAR | TEXT |
Caracter Strings | varchar(max) | VARCHAR2 | TEXT | TEXT | |
Caracter Strings | nchar | NCHAR | NCHAR | TEXT | |
Caracter Strings | nvarchar | NCHAR | VARCHAR | TEXT | |
Caracter Strings | nvarchar(max) | VARCHARTINYTEXTTEXT(M)MEDIUMTEXTLONGTEXT | NCHAR | TEXT | TEXT |
Caracter Strings | ntext(*) | LONG | TEXT | TEXT | |
Caracter Strings | text(*) | LONG | TEXT | TEXT | |
Binary Strings | image(*) | LONGBLOB | LONG RAW | BYTEA | BLOB |
Binary Strings | binary | BINARY | RAW | BYTEA | BLOB |
Binary Strings | varbinary | RAW | BYTEA | BLOB | |
Binary Strings | varbinary(max) | VARBINARY(M)TINYBLOBBLOBMEDIUMBLOBLONGBLOB | RAW | BYTEA | BLOB |
Other Data Types | cursor | TEXT | |||
Other Data Types | sql_variant | BLOB | TEXT | ||
Other Data Types | hierarchyid | TEXT | |||
Other Data Types | rowversion | BYTEA | TEXT | ||
Other Data Types | timestamp(*) | RAW | BYTEA | TEXT | |
Other Data Types | uniqueidentifier | CHAR | CHAR(36) | CHAR(16) | TEXT |
Other Data Types | xml | XML | TEXT | ||
Other Data Types | table | — | |||
Spatial Data Types | geometry | VARCHAR | TEXT | ||
Spatial Data Types | geography | VARCHAR | TEXT |
(* Данные типы данных будут удалены в будущих версиях SQL Server.
Избегайте использование этих типов данных в новых проектах и, по возможности, измените их в текущих проектах.)
Как хранится информация в БД
В основе всей структуры хранения лежат три понятия:
- База данных;
- Таблица;
- Запись.
База данных
База данных — это высокоуровневное понятие, которое означает объединение совокупности данных, хранимых для выполнения одной цели.
Если мы делаем современный сайт, то все его данные будут храниться внутри одной базы данных. Для сайта онлайн-дневника наблюдений за погодой тоже понадобится создать отдельную базу данных.
Таблица
По отношению к базе данных таблица является вложенным объеком. То есть одна БД может содержать в себе множество таблиц.
Аналогией из реального мира может быть шкаф (база данных) внутри которого лежит множество коробок (таблиц).
Таблицы нужны для хранения данных одного типа, например, списка городов, пользователей сайта, или библиотечного каталога.
Таблицу можно представить как обычный лист в Excel-таблице, то есть совокупность строк и столбцов.
Наверняка каждый хоть раз имел дело с электронными таблицами (MS Excel).
Заполняя такую таблицу, пользователь определяет столбцы, у каждого из которых есть заголовок. В строках хранится информация.
В БД точно также: создавая новую таблицу, необходимо описать, из каких столбцов она состоит, и дать им имена.
Запись
Запись — это строка электронной таблицы.
Это неделимая сущность, которая хранится в таблице. Когда мы сохраняем данные веб-формы с сайта, то на самом деле добавляем новую запись в какую-то из таблиц базы данных. Запись состоит из полей (столбцов) и их значений. Но значения не могут быть какими угодно.
Определяя столбец, программист должен указать тип данных, который будет храниться в этом столбце: текстовый, числовой, логический, файловый и т.д. Это нужно для того, чтобы в будущем в базу не были записаны данные неверного типа.
Соберем всё вместе, чтобы понять, как будет выглядеть ведение дневника погоды при участии базы данных.
- Создадим для сайта новую БД и дадим ей название «weather_diary».
- Создадим в БД новую таблицу с именем «weather_log» и определим там следующие столбцы:
- Город (тип: текст);
- День (тип: дата);
- Температура (тип: число);
- Облачность (тип: число; от 0 (нет облачности) до 4 (полная облачность));
- Были ли осадки (тип: истина или ложь);
- Комментарий (тип: текст).
- При сохранении формы будем добавлять в таблицу weather_log новую запись, и заполнять в ней все поля информацией из полей формы.
Теперь можно быть уверенными, что наблюдения наших пользователей не пропадут, и к ним всегда можно будет получить доступ.
Реляционная база данных
Английское слово „relation“ можно перевести как связь, отношение.
А определение «реляционные базы данных» означает, что таблицы в этой БД могут вступать в отношения и находиться в связи между собой.
Что это за связи?
Например, одна таблица может ссылаться на другую таблицу. Это часто требуется, чтобы сократить объём и избежать дублирования информации.
В сценарии с дневником погоды пользователь вводит название своего города. Это название сохраняется вместе с погодными данными.
Но можно поступить иначе:
- Создать новую таблицу с именем „cities“.
- Все города в России известны, поэтому их все можно добавить в одну таблицу.
- Переделать форму, изменив поле ввода города с текстового на поле типа «select», чтобы пользователь не вписывал город, а выбирал его из списка.
- При сохранении погодной записи, в поле для города поставить ссылку на соответствующую запись из таблицы городов.
Так мы решим сразу две задачи:
- Сократим объём хранимой информации, так как погодные записи больше не будут содержать название города;
- Избежим дублирования: все пользователи будут выбирать один из заранее определённых городов, что исключит опечатки.
Связи между таблицами в БД бывают разных видов.
В примере выше использовалась связь типа «один-ко-многим», так как одному городу может соответствовать множество погодных записей, но не наоборот!
Бывают связи и других типов: «один-к-одному» и «многие-ко-многим», но они используются значительно реже.
Синонимы типов данных в Microsoft SQL Server
В MS SQL Server для совместимости со стандартом ISO существуют синонимы системных типов данных. Эти синонимы можно использовать в инструкциях языка Transact-SQL точно также как и соответствующие системные типы данных, единственный момент, что после создания объекта (таблицы, процедуры) синониму назначается базовый тип данных, связанный с этим синонимом, иными словами, каких-либо признаков, что в инструкции использовался синоним, нет.
Синонимы и соответствующие им системные типы данных представлены в таблице ниже:
Системный тип данных | Синоним типа |
varbinary | Binary varying |
varchar | char varying |
char | character |
char(1) | character |
char(n) | character( n ) |
varchar(n) | character varying( n ) |
decimal | Dec |
float | Double precision |
real | float; n = 1-7 |
float | float; n = 8-15 |
int | Integer |
nchar(n) | national character( n ) |
nchar(n) | national char( n ) |
nvarchar(n) | national character varying( n ) |
nvarchar(n) | national char varying( n ) |
ntext | national text |
rowversion | timestamp |
Числовые типы данных
Ниже приведены числовые типы данных в SQL Server (Transact-SQL):
Синтаксис типа данных | Максимальный размер | Пояснение |
---|---|---|
BIT | Целое число, которое может быть 0, 1 или NULL. | |
TINYINT | От 0 до 255 | |
SMALLINT | -32768 до 32767 | |
INT | -2,147,483,648 до 2,147,483,647 | |
BIGINT | -9,223,372,036,854,775,808 — 9,223,372,036,854,775,807 | |
DECIMAL(m,d) | m по умолчанию — 18, если не указано. d по умолчанию равно 0, если не указано. |
Где m — это суммарное количество цифр, а d — количество цифр после десятичного знака. |
DEC(m,d) | m по умолчанию — 18, если не указано. d по умолчанию равно 0, если не указано. |
Где m — это суммарное количество цифр, а d — количество цифр после десятичного знака. Это синоним типа DECIMAL. |
NUMERIC(m,d) | m по умолчанию — 18, если не указано. d по умолчанию равно 0, если не указано. | Где m — это суммарные цифры, а d — количество цифр после десятичного знака. Это синоним типа DECIMAL. |
FLOAT(n) | Число с плавающей точкой. n по умолчанию — 53, если не указано. | Где n — количество бит, которое должно храниться в научной нотации. |
REAL | Эквивалент FLOAT (24) | |
SMALLMONEY | — 214,748.3648 до 214,748.3647 | |
MONEY | -922,337,203,685,477,5808 до 922,337,203,685,477.5807 |
Базы данных в оперативной памяти
Базы данных этого типа могут предоставлять в реальном времени ответ для выбора и вставки определенных записей. Большинство из них в основном хранят данные в ОЗУ, но в некоторых случаях они также предлагают постоянное хранилище на жестких дисках или твердотельных накопителях. Большинство этих баз данных работают с записями «ключ-значение», поэтому значения можно запоминать в формате, ориентированном на документы. Но некоторые базы данных также работают со столбцами и позволяют вторичное индексирование той же таблицы. Использование ОЗУ позволяет обрабатывать данные быстро, но делает их более нестабильными и дорогостоящими.
Достоинства:
- Быстрое написание
- Быстрое чтение
Недостатки:
- Труднодостижимая надёжность
- Дорогое масштабирование
Примеры: Redis, Tarantool, Apache Ignite.
Вступление
Напомню, что база данных это большой объем данных, которая в ней хранится, может обрабатываться, дополняться, удаляться, причем в удобной для пользователя форме. Также нужно четко понимать, что в БД хранится не всякая информация, а информация, которую можно организовать по тем или иным свойствам. Например, большое количество различных фотографий или документов это не данные, а информация. Но мы можем организовать фотографии, например по сути: фото людей, фото животных, фото городов и т.д. или организовать их по размеру: большие, средние, маленькие. Организованная, таким образом информация превращается в данные и пригодна для автоматической обработки с использованием баз данных. Переходим к классификации баз данных.
SQL Пример ALTER TABLE
Посмотрите на таблицу «Persons»:
ID | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Теперь мы хотим добавить столбец с именем «DateOfBirth» в таблицу «Persons».
Мы используем следующую инструкцию SQL:
ALTER TABLE Persons
ADD DateOfBirth date;
Обратите внимание, что новый столбец «DateOfBirth» имеет тип date и будет содержать дату.
Тип данных указывает, какой тип данных может содержать столбец.
Для получения полного описания всех типов данных, доступных в MS Access, MySQL и SQL Server,
перейдите к нашему полному Справочнику типов данных. Таблица «Persons» теперь будет выглядеть так:
Таблица «Persons» теперь будет выглядеть так:
ID | LastName | FirstName | Address | City | DateOfBirth |
---|---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes | |
2 | Svendson | Tove | Borgvn 23 | Sandnes | |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Common Integer-Type Mistakes
INTEGER columns round decimal points. To explain, let’s modify our table a little:
CREATE TABLE account ( accountNo integer, balance integer );
If we run this statement:
INSERT INTO account(accountNo, balance) VALUES(1313,123314.3153);
… the inserted values are rounded to the first digit before the decimal point. Suppose we insert 123314.5 into the balance column:
INSERT INTO account(accountNo, balance) VALUES(1313,123314.5);
Because we changed the value behind the decimal point to a value equal to or greater than 5, we would get 123315.
If you’re using integer data types in formulas, know that rounding can cause inconsistencies in formulas. If you subtract 123314.3153+123314.3153:
INSERT INTO account(accountNo, balance) VALUES(1313,123314.3153+123314.3153);
.. the inserted value would be 123314. If you subtract the same values we added before from the balance:
SELECT BALANCE - 123314.3153 FROM ACCOUNT;
… the result, now a decimal number, would be 123314.3147. This is a clear inconsistency. You can avoid it by defining appropriate column data types according to what operations will be done on the columns.
The Float Data Types
Float and float-related SQL numeric data type hold approximate numeric values. They consist of a significant (a signed numeric value) and an exponent (a signed integer that specifies the magnitude of the significant). These data types have a precision, or a positive integer that defines the number of significant digits (exponent of the base of the number).
This type of data representation is commonly called floating-point representation.
If we were to represent 173226.62 in this notation (with a base of 10), it would look like this.
The value of an approximate numeric value is its significant multiplied by 10 to the exponent.
To truly understand the floating point SQL numeric data type, you will have to dig into a little bit of computer science. It can be fun, but at this stage of your SQL journey I believe it is overkill. For now, just remember that there are three ANSI-standard SQL approximate types: , , and .
The difference between and is that has a binary (not decimal) precision equal to or greater than the defined value. has a predefined precision based on the database implemented. In normal working life, is rarely used; and are tied to particular system implementations and developers tend to pass system implementation work to the DBAs and Sysadmins.
The difference in and is that represents numbers in 34 bits and in 64 bits.
Эта тема закрыта для публикации ответов.