Типы данных в ms sql. transact-sql

Алан-э-Дейл       31.03.2024 г.

Главное о базах данных

  • Чаще всего базы данных напоминают таблицы: в них одному параметру соответствует один набор данных. Например, один клиент — одно имя, один телефон, один адрес.
  • Такие «табличные» базы данных называются реляционными.
  • Чтобы строить сложные связи, разные таблицы в реляционных базах можно связывать между собой: ставить ссылки.
  • Реляционная база — не единственный способ хранения данных. Есть ситуации, когда нам нужна большая гибкость в хранении.
  • Бывают сетевые базы данных: когда нужно хранить много связей между множеством объектов. Например, каталог фильмов: в одном фильме может участвовать много человек, а каждый из них может участвовать во множестве фильмов.
  • Бывают иерархические базы, или «деревья». Пример — наша файловая система.
  • Какую выбрать базу — зависит от задачи. Одна база не лучше другой, но они могут быть более или менее подходящими для определённых задач.

Текст и иллюстрации

Миша Полянин

Редактор

Максим Ильяхов

Корректор

Ира Михеева

Иллюстратор

Даня Берковский

Вёрстка

Маша Дронова

Доставка

Олег Вешкурцев

Что-то делает руками

Паша Федоров

Во славу

Практикума

Организация информации в РБД

Таблицы часто включают первичный ключ, который предоставляет уникальный идентификатор для каждого типа структур в базе данных. Ключ может быть назначен столбцу (который требует уникального значения для каждой строки) или может состоять из нескольких столбцов, которые вместе образуют уникальную комбинацию значений. В любом случае первичный ключ обеспечивает эффективный способ индексирования значений, может применяться для совместного их использования между таблицами. Например, значение первичного ключа из одной таблицы может быть назначено полю в строке другой таблицы. А числа, импортированные из других таблиц, называются внешними ключами.

Стандартный способ доступа к информации из реляционной базы данных — это запрос 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.

  1. Numeric data types such as int, tinyint, bigint, float, real, etc.
  2. Date and Time data types such as Date, Time, Datetime, etc.
  3. Character and String data types such as char, varchar, text, etc.
  4. Unicode character string data types, for example nchar, nvarchar, ntext, etc.
  5. Binary data types such as binary, varbinary, etc.
  6. 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).
Заполняя такую таблицу, пользователь определяет столбцы, у каждого из которых есть заголовок. В строках хранится информация.
В БД точно также: создавая новую таблицу, необходимо описать, из каких столбцов она состоит, и дать им имена.

Запись

Запись — это строка электронной таблицы.
Это неделимая сущность, которая хранится в таблице. Когда мы сохраняем данные веб-формы с сайта, то на самом деле добавляем новую запись в какую-то из таблиц базы данных. Запись состоит из полей (столбцов) и их значений. Но значения не могут быть какими угодно.
Определяя столбец, программист должен указать тип данных, который будет храниться в этом столбце: текстовый, числовой, логический, файловый и т.д. Это нужно для того, чтобы в будущем в базу не были записаны данные неверного типа.

Соберем всё вместе, чтобы понять, как будет выглядеть ведение дневника погоды при участии базы данных.

  1. Создадим для сайта новую БД и дадим ей название «weather_diary».
  2. Создадим в БД новую таблицу с именем «weather_log» и определим там следующие столбцы:
    • Город (тип: текст);
    • День (тип: дата);
    • Температура (тип: число);
    • Облачность (тип: число; от 0 (нет облачности) до 4 (полная облачность));
    • Были ли осадки (тип: истина или ложь);
    • Комментарий (тип: текст).
  3. При сохранении формы будем добавлять в таблицу weather_log новую запись, и заполнять в ней все поля информацией из полей формы.

Теперь можно быть уверенными, что наблюдения наших пользователей не пропадут, и к ним всегда можно будет получить доступ.

Реляционная база данных

Английское слово „relation“ можно перевести как связь, отношение.
А определение «реляционные базы данных» означает, что таблицы в этой БД могут вступать в отношения и находиться в связи между собой.
Что это за связи?
Например, одна таблица может ссылаться на другую таблицу. Это часто требуется, чтобы сократить объём и избежать дублирования информации.
В сценарии с дневником погоды пользователь вводит название своего города. Это название сохраняется вместе с погодными данными.
Но можно поступить иначе:

  1. Создать новую таблицу с именем „cities“.
  2. Все города в России известны, поэтому их все можно добавить в одну таблицу.
  3. Переделать форму, изменив поле ввода города с текстового на поле типа «select», чтобы пользователь не вписывал город, а выбирал его из списка.
  4. При сохранении погодной записи, в поле для города поставить ссылку на соответствующую запись из таблицы городов.

Так мы решим сразу две задачи:

  • Сократим объём хранимой информации, так как погодные записи больше не будут содержать название города;
  • Избежим дублирования: все пользователи будут выбирать один из заранее определённых городов, что исключит опечатки.

Связи между таблицами в БД бывают разных видов.
В примере выше использовалась связь типа «один-ко-многим», так как одному городу может соответствовать множество погодных записей, но не наоборот!
Бывают связи и других типов: «один-к-одному» и «многие-ко-многим», но они используются значительно реже.

Синонимы типов данных в 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.

Гость форума
От: admin

Эта тема закрыта для публикации ответов.