Типы данных SQL разделяются на три группы:
— строковые;
— с плавающей точкой (дробные числа);
— целые числа, дата и время.
Типы данных SQL строковые
Типы данных SQL | Описание |
CHAR(size) | Строки фиксированной длиной (могут содержать буквы, цифры и специальные символы). Фиксированный размер указан в скобках. Можно записать до 255 символов |
VARCHAR(size) | Может хранить не более 255 символов. |
TINYTEXT | Может хранить не более 255 символов. |
TEXT | Может хранить не более 65 535 символов. |
BLOB | Может хранить не более 65 535 символов. |
MEDIUMTEXT | Может хранить не более 16 777 215 символов. |
MEDIUMBLOB | Может хранить не более 16 777 215 символов. |
LONGTEXT | Может хранить не более 4 294 967 295 символов. |
LONGBLOB | Может хранить не более 4 294 967 295 символов. |
ENUM(x,y,z,etc.) | Позволяет вводить список допустимых значений. Можно ввести до 65535 значений вSQL Тип данных ENUM список. Если при вставке значения не будет присутствовать в списке ENUM, то мы получим пустое значение. Ввести возможные значения можно в таком формате: ENUM ( ‘X’, ‘Y’, ‘Z’) |
SET | SQL Тип данных SET напоминает ENUM за исключением того, что SET может содержать до 64 значений. |
Типы данных SQL с плавающей точкой (дробные числа) и целые числа
Типы данных SQL | Описание |
TINYINT(size) | Может хранить числа от -128 до 127 |
SMALLINT(size) | Диапазон от -32 768 до 32 767 |
MEDIUMINT(size) | Диапазон от -8 388 608 до 8 388 607 |
INT(size) | Диапазон от -2 147 483 648 до 2 147 483 647 |
BIGINT(size) | Диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 |
FLOAT(size,d) | Число с плавающей точкой небольшой точности. |
DOUBLE(size,d) | Число с плавающей точкой двойной точности. |
DECIMAL(size,d) | Дробное число, хранящееся в виде строки. |
Типы данных SQL — Дата и время
Типы данных SQL | Описание |
DATE() | Дата в формате ГГГГ-ММ-ДД |
DATETIME() | Дата и время в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС |
TIMESTAMP() | Дата и время в формате timestamp. Однако при получении значения поля оно отображается не в формате timestamp, а в виде ГГГГ-ММ-ДД ЧЧ:ММ:СС |
TIME() | Время в формате ЧЧ:ММ:СС |
YEAR() | Год в двух значной или в четырехзначном формате. |
Создание таблицы в базе данных производится командой CREATE TABLE.
Синтаксис:
CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition. )] [table_options] [select_statement]
tbl_name— Задает имя таблицы, которая будет создана в текущей базе данных. Если никакая база данных на момен вызова команды CREATE TABLE не была принята текущей, то возникнет ошибка выполнения команды.
IF NOT EXISTS— Если указан этот параметр и производится попытка создать таблицу с дублирующим именем (т.е. таблица с таким именем в текущей БД уже есть), то таблица создана не будет и сообщение об ошибке не появиться. В противном случае таблица также создана не будет, но команда вызовет ошибку.
create_definition— Определяет внутреннюю структуру создаваемой таблицы (названия и типы полей, ключи, индексы и т.д.)
Возможные синтаксисы create_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition]
PRIMARY KEY (index_col_name. )
KEY [index_name] (index_col_name. )
INDEX [index_name] (index_col_name. )
UNIQUE [INDEX] [index_name] (index_col_name. )
[CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name. ) [reference_definition]
col_name — Задает имя столбца в создаваемой таблице.
Type— Задает тип данных для столбца col_name.
Возможные значения параметра type:
§ INT[(length)] [UNSIGNED] [ZEROFILL]
§ BIGINT[(length)] [UNSIGNED] [ZEROFILL]
§ DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
§ FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
§ DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
[NOT NULL | NULL] —Указывавет, может ли данных столбец содержать значение NULL или нет. Если не указано, то по умолчанию принимается NULL (т.е. может содержать NULL).
[DEFAULT default_value]— Задает значение по умолчанию для данного столбца. При вставке новой записи в таблицу командой INSERT если значение для поля col_name явно указано не было, то устанавливается значение default_value.
[AUTO_INCREMENT]— При вставке новой записи в таблицу поле с этим атрибутом автоматически получит числовое значение, на 1 больше самого большого значения для этого поля в текущий момент времени. Данная возможность обычно используется для генерирования уникальных идентификаторов строк. Столбец, для которого применяется атрибут AUTO_INCREMENT, должен иметь целочисленный тип. В таблице может быть только один столбец с атрибутом AUTO_INCREMENT. Так же этот столбец должен быть проиндексирован. Отсчет последовательности чисел для AUTO_INCREMENT начинается с 1. Это могут быть только положительные числа.
Следующий пример создает таблицу users с 3 полями, где первое поле — уникальный идентификатор записи, второе поле — имя пользователя, а третье поле — его возраст:
create table Water_Area(
id int auto_increment,
constraint pk_Water_Area primary key nonclustered(id))
create table Station(
id_Water_Area int not null,
name varchar(20) not null,
Latitude float(4) null,
Longitude float(4) null,
coordinates varchar(40) null,
coordinates_modern varchar(30) null,
comment varchar(70) null
constraint pk_Station primary key nonclustered(id))
Удаление таблицы.
Для удаления таблицы служит команда DROP TABLE.
DROP TABLE [IF EXISTS] tbl_name [, tbl_name. ] [RESTRICT | CASCADE]
tbl_name — Имя удаляемой таблицы.
IF EXISTS – Если указан этот параметр, то при попытке удаления несущестующей таблицы ошибки не возникнет. В противном случае возникнет ошибка выполнения команды.
RESTRICT и CASCADE Не несут никакой функциональности. Оставлены для упрощения переноса программы.
Drop table Station
Модификация таблиц.
Для модификации служит команда Alter Table.
ALTER TABLE TableName1ADD | ALTER [COLUMN] FieldName1FieldType [(nFieldWidth [, nPrecision])][NULL | NOT NULL] [CHECK lExpression1 [ERROR cMessageText1]][DEFAULT eExpression1][PRIMARY KEY | UNIQUE][REFERENCES TableName2 [TAG TagName1]][NOCPTRANS] |[DROP [COLUMN] FieldName]
Команда ALTER TABLE изменяет определение таблицы одним из следующих способов:
-добавляет ограничение целостности
-переопределяет столбец (тип данных, размер, умалчиваемое значение)
-модифицирует характеристики памяти или иные параметры
-включает, выключает или удаляет ограничение целостности или триггер.
alter table Station
alter table Station
add constraint fk_Station_Relation_Water_Area foreign key (id_Water_Area) references Water_Area (id)
on delete cascade
Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы
Числовые типы данных
Тип данных | Объем памяти | Диапазон | Описание |
TINYINT (M) | 1 байт | от -128 до 127 или от 0 до 255 | Целое число. Может быть объявлено положительным с помощью ключевого слова UNSIGNED, тогда элементам столбца нельзя будет присвоить отрицательное значение. Необязательный параметр М — количество отводимых под число символов. Необязательный атрибут ZEROFILL позволяет свободные позиции по умолчанию заполнить нулями. |
TINYINT — хранит любое число в диапазоне от -128 до 127.
TINYINT UNSIGNED — хранит любое число в диапазоне от 0 до 255.
TINYINT (2) — предполагается, что значения будут двузначными, но по факту будет хранить и трехзначные.
TINYINT (3) ZEROFILL — свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 002.
SMALLINT — хранит любое число в диапазоне от -32768 до 32767.
SMALLINT UNSIGNED — хранит любое число в диапазоне от 0 до 65535.
SMALLINT (4) — предполагается, что значения будут четырехзначные, но по факту будет хранить и пятизначные.
SMALLINT (4) ZEROFILL — свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0002.
MEDIUMINT — хранит любое число в диапазоне от -8388608 до 8388608.
MEDIUMINT UNSIGNED — хранит любое число в диапазоне от 0 до 16777215.
MEDIUMINT (4) — предполагается, что значения будут четырехзначные, но по факту будет хранить и семизначные.
MEDIUMINT (5) ZEROFILL — свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002.
INT — хранит любое число в диапазоне от -2147683648 до 2147683648.
INT UNSIGNED — хранит любое число в диапазоне от 0 до 4294967295.
INT (4) — предполагается, что значения будут четырехзначные, но по факту будет хранить максимально возможные.
INT (5) ZEROFILL — свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 00002.
BIGINT — хранит любое число в диапазоне от -2 63 до 2 63 -1.
BIGINT UNSIGNED — хранит любое число в диапазоне от 0 до 2 64 .
BIGINT (4) — предполагается, что значения будут четырехзначные, но по факту будет хранить максимально возможные.
BIGINT (7) ZEROFILL — свободные позиции слева заполнит нулями. Например, величина 2 будет отображаться, как 0000002.
DECIMAL (5,2) — будет хранить числа от -99,99 до 99,99.
макс. значение +(-) 3. 402823466 * 10 38
FLOAT (5,2) — будет хранить числа из 5 символов, 2 из которых будут идти после запятой (например: 46,58).
макс. значение +(-) 1.797693134862315 * 10 308
DOUBLE — будет хранить большие дробные числа.
Необходимо понимать, чем больше диапазон значений у типа данных, тем больше памяти он занимает. Поэтому, если предполагается, что значения в столбце не будут превышать 100, то используйте тип TINYINT. Если при этом все значения будут положительными, то используйте атрибут UNSIGNED. Правильный выбор типа данных позволяет сэкономить место для хранения этих данных.
Строковые типы данных
Тип данных | Объем памяти | Максимальный размер | Описание |
CHAR (M) | M символов | М символов | Позволяет хранить строку фиксированной длины М. Значение М — от 0 до 65535. |
CHAR (8) — хранит строки из 8 символов и занимает 8 байтов. Например, любое из следующих значений: », ‘Иван’,’Ирина’, ‘Сергей’ будет занимать по 8 байтов памяти. А при попытке ввести значение ‘Александра’, оно будет усечено до ‘Александ’, т.е. до 8 символов.
VARCHAR (3) — хранит строки максимум из 3 символов, но пустая строка » занимает 1 байт памяти, строка ‘a’ — 2 байта, строк ‘aa’ — 3 байта, строка ‘aaa’ — 4 байта. Значение более 3 символов будет усечено до 3.
ENUM (‘да’, ‘нет’) — в столбце с таким типом может храниться только одно из имеющихся значений. Удобно использовать, если предусмотрено, что в столбце должен храниться ответ на вопрос.
SET (‘первый’, ‘второй’) — в столбце с таким типом может храниться одно из перечисленных значений, оба сразу или значение может отсутствовать вовсе.
Календарные типы данных
Тип данных | Объем памяти | Диапазон | Описание |
DATE | 3 байта | от ‘1000-01-01’ до ‘9999-12-31’ | Предназначен для хранения даты. В качестве первого значения указывается год в формате "YYYY", через дефис — месяц в формате "ММ", а затем день в формате "DD". В качестве разделителя может выступать не только дефис, а любой символ отличный от цифры. |
TIME | 3 байта | от ‘-838:59:59’ до ‘838:59:59’ | Предназначен для хранения времени суток. Значение вводится и хранится в привычном формате — hh:mm:ss, где hh — часы, mm — минуты, ss — секунды. В качестве разделителя может выступать любой символ отличный от цифры. |
DATATIME | 8 байт | от ‘1000-01-01 00:00:00’ до ‘9999-12-31 23:59:59’ | Предназначен для хранения и даты и времени суток. Значение вводится и хранится в формате — YYYY-MM-DD hh:mm:ss. В качестве разделителей могут выступать любые символы отличные от цифры. |
TIMESTAMP | 4 байта | от ‘1970-01-01 00:00:00’ до ‘2037-12-31 23:59:59’ | Предназначен для хранения даты и времени суток в виде количества секунд, прошедших с полуночи 1 января 1970 года (начало эпохи UNIX). |
YEAR (M) | 1 байт | от 1970 до 2069 для М=2 и от 1901 до 2155 для М=4 | Предназначен для хранения года. М — задает формат года. Например, YEAR (2) — 70, а YEAR (4) — 1970. Если параметр М не указан, то по умолчанию считается, что он равен 4. |
Тип данных NULL
Вообще-то это лишь условно можно назвать типом данных. По сути это скорее указатель возможности отсутствия значения. Например, когда вы регистрируетесь на каком-либо сайте, вам предлагается заполнить форму, в которой присутствуют, как обязательные, так и необязательные поля. Понятно, что регистрация пользователя невозможна без указания логина и пароля, а вот дату рождения и пол пользователь может указать по желанию. Для того, чтобы хранить такую информацию в БД и используют два значения:
NOT NULL (значение не может отсутствовать) для полей логин и пароль,
NULL (значение может отсутствовать) для полей дата рождения и пол.
По умолчанию всем столбцам присваивается тип NOT NULL, поэтому его можно явно не указывать.
create table users (login varchar(20), password varchar(15), sex enum(‘man’, ‘woman’) NULL, date_birth date NULL);
Таким образом, мы создаем таблицу с 4 столбцами: логин (не более 20 символов) обязательное, пароль (не более 15 символов) обязательное, пол (мужской или женский) не обязательное, дата рождения (тип дата) необязательное.
Все, на этом урок, посвященный типам данных, закончен. У вас, возможно, остались вопросы, но они исчезнут по мере освоения дальнейшего материала, т.к. на практике все становится более понятно, чем в теории.
Видеоуроки php + mysql
Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.
ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server
База данных SQL Azure
Azure Synapse Analytics (хранилище данных SQL)
Parallel Data Warehouse APPLIES TO:
SQL Server
Azure SQL Database
Azure Synapse Analytics (SQL DW)
Parallel Data Warehouse
Типы приблизительных числовых данных, используемые для числовых данных с плавающей запятой. Approximate-number data types for use with floating point numeric data. Данные с плавающей запятой являются приблизительными, поэтому не все значения из диапазона могут быть отображены точно. Floating point data is approximate; therefore, not all values in the data type range can be represented exactly. Синонимом по стандарту ISO для типа real является float(24) . The ISO synonym for real is float(24).
Синтаксические обозначения в Transact-SQL
Transact-SQL Syntax Conventions
Синтаксис Syntax
float [ ( n ) ] Где n — это количество битов, используемых для хранения мантиссы числа в формате float при экспоненциальном представлении. Определяет точность данных и размер для хранения. float [ (n) ] Where n is the number of bits that are used to store the mantissa of the float number in scientific notation and, therefore, dictates the precision and storage size. Если указан параметр n, это должно быть значение в диапазоне от 1 до 53. If n is specified, it must be a value between 1 and 53. Значение n по умолчанию — 53. The default value of n is 53.
Значение n n value | Точность Precision | Объем памяти Storage size |
---|---|---|
1-24 1-24 | 7 цифр 7 digits | 4 байта 4 bytes |
25-53 25-53 | 15 знаков 15 digits | 8 байт 8 bytes |
В приложении SQL Server SQL Server параметр n может принимать одно из двух возможных значений. SQL Server SQL Server treats n as one of two possible values. Если 1 If 1 Если 25 If 25
Тип данных SQL Server SQL Server float[ (n) ] соответствует стандарту ISO для всех значений n в диапазоне от 1 до 53. The SQL Server SQL Server float[(n)] data type complies with the ISO standard for all values of n from 1 through 53. Синонимом типа double precision является тип float(53) . The synonym for double precision is float(53).
Remarks Remarks
Тип данных Data type | Диапазон Range | Память Storage |
---|---|---|
float float | — 1,79E+308 — -2,23E-308, 0 и 2,23E-308 — 1,79E+308 — 1.79E+308 to -2.23E-308, 0 and 2.23E-308 to 1.79E+308 | Зависит от значения n Depends on the value of n |
real real | — 3,40E + 38 — -1,18E — 38, 0 и 1,18E — 38 — 3,40E + 38 — 3.40E + 38 to -1.18E — 38, 0 and 1.18E — 38 to 3.40E + 38 | 4 байта 4 Bytes |
Преобразование данных типа float и real Converting float and real data
При преобразовании в любой целочисленный тип данных значения типа float усекаются. Values of float are truncated when they are converted to any integer type.
Если тип данных float или real нужно преобразовать в символьный тип, то, как правило, строковую функцию STR использовать удобнее, чем CAST( ). When you want to convert from float or real to character data, using the STR string function is usually more useful than CAST( ). Это объясняется большими возможностями функции STR в отношении форматирования. This is because STR enables more control over formatting. Дополнительные сведения см. в статьях STR (Transact-SQL) и Функции (Transact-SQL). For more information, see STR (Transact-SQL) and Functions (Transact-SQL).
До версии SQL Server 2016 (13.x) SQL Server 2016 (13.x) точность преобразования значений float в decimal или numeric была ограничена 17 знаками. Prior to SQL Server 2016 (13.x) SQL Server 2016 (13.x) , conversion of float values to decimal or numeric is restricted to values of precision 17 digits only. Любое значение типа float менее 5E-18 (в экспоненциальном представлении 5E-18 или десятичном представлении 0.0000000000000000050000000000000005) округлялось до 0. Any float value less than 5E-18 (when set using either the scientific notation of 5E-18 or the decimal notation of 0.0000000000000000050000000000000005) rounds down to 0. Начиная с версии SQL Server 2016 (13.x) SQL Server 2016 (13.x) это ограничение отсутствует. This is no longer a restriction as of SQL Server 2016 (13.x) SQL Server 2016 (13.x) .