Mysql
 sql >> база данни >  >> RDS >> Mysql

Въведение в SQL типове данни

Изборът на правилния тип данни за колона на таблицата е важно решение. Намалява необходимостта от преобразуване на типове данни, подобрява производителността на заявките към база данни и свежда до минимум изискванията за съхранение.

В това ръководство разглеждате различните типове данни, които се използват в системите за управление на релационни бази данни (RDBMS). Тези типове данни могат да се използват при създаване или промяна на таблица или при деклариране на променливи в съхранени процедури на база данни. Някои добре познати RDBMS са MySQL и PostgreSQL.

Типове двоични данни на SQL

За съхраняване на двоични данни (0 или 1 ), използвате BINARY и VARBINARY типове данни. BINARY типът данни съхранява двоични данни с фиксирана дължина, докато VARBINARY съхранява двоични данни с променлива дължина. И двата типа данни се използват за съхраняване на низове от битове (0 и 1 'с). Техните стойности се присвояват и извличат с помощта на шестнадесетично представяне, което се обозначава с префикс 0x . Колоните (или променливите) и на двата Binary и VarBinary типовете данни се използват за съхраняване на съдържанието на файлове с изображения като JPEG, BMP, файлове с документи и т.н.

Например за десетична стойност от 63 , неговата шестнадесетична стойност е представена с 0x3F и неговият еквивалент на двоичен битов низ е 111111 . За да разберете стойността на тези двоични низове и как се съхраняват, разгледайте примера по-долу:

Забележка Освен ако не е посочено друго, всички демонстрирани в това ръководство команди на базата данни работят добре и на MySQL и PostgreSQL .
  1. От командния ред създайте таблица, наречена BinaryExample както е показано по-долу:

     CREATE TABLE BinaryExample (
       BinaryCol BINARY (10),
       VarBinaryCol VARBINARY (10)
     );
    
  2. Вмъкнете ред в BinaryExample таблица:

     INSERT INTO BinaryExample (BinaryCol, VarBinaryCol)
     VALUES (0x4D7953514C, 0x39274D);
    
  3. Изберете данните от BinaryExample таблица:

     SELECT BinaryCol, VarBinaryCol FROM BinaryExample;
    

    Резултатът изглежда по следния начин:

    +------------------------+----------------------------+
    | BinaryCol              | VarBinaryCol               |
    +------------------------+----------------------------+
    | 0x4D7953514C0000000000 | 0x39274D                   |
    +------------------------+----------------------------+

Както можете да видите, BinaryCol данните се допълват до максималния размер на колоната с крайни нули, но VarBinaryCol колоната с данни не е. Това е така, защото колоните на VarBinaryCol се дефинират като променлива дължина.

Забележка Максималният размер (дължина) на типовете данни Binary и VarBinary варира в зависимост от реализацията на базата данни. Те обикновено са доста големи (над 8000 байта). Някои реализации на база данни имат двоични разширения към тези основни типове данни, които могат да съхраняват данни в размери от няколко гигабайта.

Числови типове данни на SQL

Наличните типове числови данни могат да бъдат разделени на следните групи:целочислени типове числови данни, точни числови типове данни и приблизителни числови типове данни. Разделите по-долу обсъждат всяка група.

Целочислени типове числови данни

Целочислените типове данни могат да бъдат Unsigned и Signed. Неподписан може да съхранява само нула и положителни числа, докато Подписан позволява нула, положителни и отрицателни числа.

Повечето реализации на SQL поддържат целочислени типове данни INT , SMALLINT и TINYINT за съхранение на положителни и отрицателни цели числа. Избраният от вас целочислен числов тип данни зависи от диапазона от стойности, които трябва да съхраните.

Следващата таблица показва разрешеното съхранение в байтове за целочислените числови типове данни и техните минимални и максимални стойности SIGNED.

Тип Съхранение (байтове) Минимална стойност ПОДПИСАНО Максимална стойност SIGNED
INT 4 минус 2^31 (-2147483648) плюс 2^31 (2147483647)
SMALLINT 2 минус 2^15 (-32768) плюс 2^15 (32767)
TINYINT 1 -128 127

Примерът по-долу демонстрира минималните и максималните стойности със знак за целите числови типове данни с помощта на таблица с име NumericExample .

  1. От командния ред създайте NumericExample таблица.

     CREATE TABLE NumericExample (
       IntColumn INT,
       SmallIntColumn SMALLINT,
       TinyIntColumn TINYINT
     );
    
  2. Вмъкнете следните стойности в NumericExample таблица.

     INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn)
     VALUES (3258594758, 32767, 255);
    

    Когато изпълните горната команда, получавате Out of range грешка, както е показано в изхода по-долу. Не можете да вмъкнете стойностите 3258594758 и 255 към IntColumn и TinyIntColumn съответно. Това е така, защото максималната SIGNED стойност за целочислен тип данни е 2147483647 а този на TinyInt е 127 .

    ERROR 1264 (22003): Out of range value for column 'IntColumn' at row 1
  3. Актуализирайте стойностите на IntColumn и TinyIntColumn колони и изпълнете отново INSERT команда.

     INSERT INTO NumericExample (IntColumn, SmallIntColumn, TinyIntColumn)
     VALUES (2147483647, 32767, 127);
    
  4. Извлечете стойностите на колоните с помощта на SELECT изявление:

     SELECT IntColumn, SmallIntColumn, TinyIntColumn
     FROM NumericExample;
    

    Резултатът прилича на примера по-долу:

    +------------+----------------+---------------+
    | IntColumn  | SmallIntColumn | TinyIntColumn |
    +------------+----------------+---------------+
    | 2147483647 |          32767 |           127 |
    +------------+----------------+---------------+

Десични числови типове данни (точно числови)

Десетичните типове данни, DECIMAL и NUMERIC , съхраняват точни и фиксирани числови стойности. Тези типове данни са известни още като точно число типове данни. Те съхраняват целочислена стойност вляво от десетичната запетая и дробна стойност вдясно от десетичната запетая. Те са функционално еквивалентни със същите изисквания за съхранение. Съхранението, използвано за тези типове, зависи от определената прецизност и диапазони. Те могат да варират от 2 байта до 17 байта, а стойностите им могат да варират от -10^38 +1 до +10^38 -1 .

Тези два типа данни се дефинират с прецизност и скала . Точността обозначава броя на местата вляво и вдясно от десетичната запетая, комбинирани, докато скалата обозначава общия брой цифри вдясно от десетичната запетая. Тези два типа данни се създават с помощта на следния синтаксис:

DECIMAL(precision, scale)

или

NUMERIC(precision,scale)

Примерът по-долу показва как да създадете и използвате десетичния числов тип данни.

  1. От командния ред създайте ExactNumericExample таблица.

     CREATE TABLE ExactNumericExample (
       DecimalCol DECIMAL(5,2),
       NumericCol NUMERIC(7,2)
     );
    
  2. Вмъкнете следните стойности в ExactNumericExample таблица.

     INSERT INTO ExactNumericExample (DecimalCol, NumericCol)
     VALUES (123.45, 12345.67);
    
  3. Извлечете стойностите на колоните с помощта на SELECT изявление:

     SELECT DecimalCol, NumericCol FROM ExactNumericExample;
    

    Резултатът прилича на следното:

    +------------+------------+
    | DecimalCol | NumericCol |
    +------------+------------+
    |     123.45 |   12345.67 |
    +------------+------------+

Числови типове данни с плаваща запетая (приблизителни числови)

Типовете числови данни с плаваща запетая са FLOAT и REAL . Наричат ​​се още приблизителни числови типове данни. Тези типове данни съхраняват приблизителна стойност поради двоичното представяне на данните с плаваща запетая. Синтаксисът за създаване на колона или променлива с плаваща запетая е следният:

Float(N)

Параметърът N показва дали полето трябва да съдържа четири или осем байта. Стойност N повече от седем изисква осем байта; седем или по-малко изисква четири байта. Плаващата точност за този тип данни варира от -1.79E + 308 до 1.79E + 308 .

По същия начин колона и променлива, дефинирани като тип данни REAL заема четири байта място за съхранение и предоставя диапазон от стойности от -3.40E + 38 до 3.40E + 38 .

Типове данни за символи в SQL

Типовете данни CHAR и VARCHAR се използват за съхраняване на символни данни с дължина до 8000 байта. И двата типа данни съхраняват низови стойности в колоните на базата данни, но се различават по начина, по който техните стойности се съхраняват и извличат. Дължината на CHAR типът данни остава фиксиран с определената си дължина, независимо дали това пространство за разпределение се използва или не. Ако пространството не се използва, колоната или променливата се допълват с допълнителни интервали. VARCHAR извежда стойността такава, каквато е, без допълнителни интервали.

Примерът по-долу демонстрира типа данни за символи.

  1. От командния ред създайте Employee таблица.

     CREATE TABLE Employee (
         LastName VARCHAR(25),
         FirstName VARCHAR(20),
         Sex CHAR(1)
     );
    
  2. Вмъкнете следните стойности в Employee таблица.

     INSERT INTO Employee (LastName, FirstName, Sex)
     VALUES ('Jones', 'Mary', 'F');
    
  3. Извлечете стойностите на колоните с помощта на SELECT изявление:

     SELECT LastName, FirstName, Sex FROM Employee;
    

    Резултатът би искал следното:

    +----------+-----------+------+
    | LastName | FirstName | Sex  |
    +----------+-----------+------+
    | Jones    | Mary      | F    |
    +----------+-----------+------+

Колоните LastName и Firstname са декларирани тип Varchar . Това позволява имената да бъдат толкова дълги, колкото дефиницията на типа данни. Но за имена, по-къси от посочения максимум, не се добавят празни интервали към данните в тези колони.

Тип данни за дата и час в SQL

DATETIME типът данни се използва за съхраняване на стойностите за дата и час в базата данни. Стойности за DATETIME типът данни използва четири байта съхранение за частта с дата и четири байта за частта с времето. Времевата част от този тип данни определя времето с детайлност до броя милисекунди след полунощ. Прецизността за този тип данни варира от „1 януари 1753 г.“ до „31 декември 9999 г.“ с точност от 3,33 милисекунди.

Забележка Ако присвоите само стойността на датата на DATETIME колона или променлива тип данни, частта от времето е по подразбиране полунощ.

Примерът по-долу демонстрира DATETIME тип данни.

DELIMITER //
CREATE PROCEDURE Datetimedemo()
BEGIN
DECLARE BirthDate DATETIME
SET BirthDate = '1990-01-01 09:00:00'
SELECT BirthDate
END//
DELIMITER ;
call Datetimedemo;

Резултатът прилича на следното:

+----------+-----------+
| BirthDate            |
+----------+-----------+
| 1990-01-01 09:00:00  |
+----------+-----------+
Забележка Някои реализации на SQL поддържат допълнителни типове данни, които са или подмножество, супернабор или вариант на всички посочени по-горе типове данни.

Съображения за типа данни на SQL

Когато проектирате база данни, е изключително важно внимателно да изберете подходящи типове данни за колоните на таблицата и променливите на съхранените процедури.

Направеният избор може да окаже значително влияние върху ефективността на съхранението и цялостната производителност на базата данни. Прост пример е да дефинирате Age на човек колоната да бъде от Tinyint тип данни, за разлика от Int тип данни. Това се дължи на следните причини:

  1. Както беше отбелязано по-рано, Tinyint типовете данни имат ¼ от изискванията за съхранение на Int типове данни.
  2. Ефективността на извличане на Tinyint колона спрямо Int колоната е много по-голяма.

На пръв поглед това може да не е от голямо безпокойство. Но ако засегнатата таблица има милиони редове в нея, със сигурност може да се постигне както ефективността на съхранението, така и ефективността на производителността. Ако разширите тези критерии за проектиране в цяла база данни, можете да генерирате тази ефективност на порядък.

Прекарването на необходимото време за проектиране при избор на тип данни в базата данни може потенциално да смекчи необходимостта от извършване на скъпи преобразувания на типове в заявки и логика на съхранени процедури, когато се сравняват колони от различни типове данни.

Например, в една таблица съхранявате дата в Varchar(20) колона, а в друга таблица съхранявате дата в Datetime колона. Ако трябва да сравните двете колони, трябва да използвате функция за преобразуване на тип данни в заявка към една от двете колони. Това е скъпа операция.

Заключение

Типовете данни на SQL са атрибутите, свързани с колоните и променливите на базата данни. Тези атрибути могат да бъдат под формата на двоични, числови, символни и дата/час. Необходимо е внимателно време за проектиране, за да се гарантира, че колоните и променливите са дефинирани с правилен тип данни, за да се гарантира ефективност както на съхранение, така и на изпълнение на заявка.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирам pdo драйвер в php docker изображение?

  2. mysql избира динамични стойности на редове като имена на колони, друга колона като стойност

  3. Функция MySQL SQRT() – Връща квадратния корен от число в MySQL

  4. Сортиране по дата и час в низходящ ред?

  5. Множество mysql INSERT изрази в една заявка php