Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 18 - MS-SQL - Datové typy podrobněji

V minulé lekci, MS-SQL krok za krokem: Transakce, jsme se věnovali transakcím.

Dnes se v MS-SQL tutoriálu podíváme podrobněji na datové typy. Každý sloupec, lokální proměnná nebo parametr má atribut, který specifikuje datový typ. Datové typy jsou velice důležitá součást návrhu tabulky a je složité je po návrhu měnit, proto je důležité věnovat jim pozornost už v počátcích projektu.

Datové typy můžeme rozdělit do těchto skupin

  • Přesná čísla
  • Přibližná čísla
  • Datum a čas
  • Řetězce
  • Řetězce v unikódu
  • Binární řetězce
  • Ostatní datové typy

Přesná čísla

Datové typy reprezentující celá čísla „bigint“, „int“, „smallint“, „tinyint“.

Datový typ Rozsah Paměť potřebná pro uložení
bigint -263 až 263 8 bajtů
int -231 až 231 4 bajty
smallint -215 až 215 2 bajty
tinyint 0 až 255 1 bajt

Datový tip reprezentující pravdu / nepravdu „bit“.

Datový typ Rozsah Paměť potřebná pro uložení
bit 0 až 1 1 bit

Pro datový typ bit optimalizuje MS-SQL paměť, pokud je v tabulce uloženo 8 nebo méně polí s typem bit použije se paměť 1 bajt. Pro 9-17 polí 2 bajty atd.

Datové typy reprezentující desetinná čísla „decimal“ nebo „numeric“. Funkčně jsou tyto dva typy stejné

Deklarují se takto: decimal (precision,scale )

  • precision je maximální počet desetinných míst vlevo i vpravo od desetinné čárky, může nabývat hodnot od 1 do 38
  • scale je maximální počet desetinných míst vpravo od desetinné čárky
Datový typ Precision Paměť potřebná pro uložení
decimal 1-9 5 bajtů
decimal 10-19 9 bajtů
decimal 20-28 13 bajtů
decimal 29-38 17 bajtů

Datové typy money a smallmoney reprezentují měnu a vyznačují se tím, že mají pouze dvě desetinná místa.

Datový typ Rozsah Paměť potřebná pro uložení
money -922,337,203,6­85,477.58 až 922,337,203,6­85,477.58 8 bajtů
smallmoney - 214,748.3648 to 214,748.3647 4 bajty

Příklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [bigint] NULL,
    [Sloupec2] [int] NULL,
    [Sloupec3] [smallint] NULL,
    [Sloupec4] [tinyint] NULL,
    [Sloupec5] [bit] NULL,
    [Sloupec6] [decimal](8, 3) NULL,
    [Sloupec7] [money] NULL,
    [Sloupec8] [smallmoney] NULL
) ON [PRIMARY]

GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1],[Sloupec2],[Sloupec3],[Sloupec4]
           ,[Sloupec5],[Sloupec6],[Sloupec7],[Sloupec8])
     VALUES
           (
-12345678964125874,
2147483647,
32767,
254,
0,
16.458,
100,
500
)
MS-SQL databáze krok za krokem

Přibližná čísla

Přibližná čísla používají plovoucí desetinnou čárku, proto nemůže byt vždy jejich hodnota vyjádřena přesně.

Float[(n)] kde n je počet bitů, které jsou použity k zápisu mantisy při vědeckém zápisu čísel.

Datový typ n Paměť potřebná pro uložení
float(n) 1-24 4 bajty
float(n) 25-53 9 bajtů

Standardní typy pro přibližná čísla.

Datový typ Rozsah Paměť potřebná pro uložení
float - 1.79E+308 až -2.23E-308, 0 a 2.23E-308 až 1.79E+308 8 bajtů
real - 3.40E + 38 až -1.18E - 38, 0 a 1.18E - 38 až 3.40E + 38 4 bajty

Příklad

CREATE TABLE [dbo].[Priklad2](
    [Sloupec1] [float] NULL,
    [Sloupec2] [real] NULL)

Datum a čas

Datové typy reprezentující datum nebo čas.

Datový typ Rozsah Paměť potřebná pro uložení
date 0001-01-01 až 9999-12-31 3 bajty
Time 00:00:00.000 až 23:59:59.999 5 bajtů
Datetime Rozsah pro datum 01.01.1753 až 31.12.9999 Rozsah pro čas 00:00:00 až 23:59:59.997 8 bajtů
Datetime2(n) Rozsah pro datum 01.01.0001 až 31.12.9999 Rozsah pro čas 00:00:00 až 23:59:59.9999999 Podle přesnosti od 6 bajtů do 8 bajtů
Datetimeoffset Rozsah pro datum 01.01.0001 až 31.12.9999 Rozsah pro čas 00:00:00 až 23:59:59.9999999 Rozsah pro časovou zónu -14:00 až +14:00 10 bajtů
Smalldatetime Rozsah pro datum 01.01.1900 až 06.06.2079 Rozsah pro čas 00:00:00 až 23:59:00 4 bajty
  • Date – používá se pro uložení datumu
  • Time – používá se pro uložení času
  • Datetime – používá se pro uložení kombinace datumu a času
  • Datetime2(n) – používá se pro uložení kombinace datumu a času, je možné použít přesnost n a tím ovlivnit potřebnou paměť
  • Datetimeoffset – používá se pro uložení kombinace datumu a času včetně časové zóny
  • Smalldatetime – používá se pro uložení kombinace data a času dne, sekundy jsou vždy nula, desetiny sekund nejsou použity

Příklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [date] NULL,
    [Sloupec2] [time](7) NULL,
    [Sloupec3] [datetime]NULL,
    [Sloupec4] [datetime2](7) NULL,
    [Sloupec5] [datetimeoffset](7) NULL,
    [Sloupec6] [smalldatetime] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1]
           ,[Sloupec2]
           ,[Sloupec3]
           ,[Sloupec4]
           ,[Sloupec5]
           ,[Sloupec6])
     VALUES
           ('2016-05-14',
           '17:15:21.5',
           '2016-07-15 13:22:42.214',
           '2016-08-22 14:25:13.8856625',
           '2016-05-13 12:22:05.22 +8:00',
           '2016-05-18 12:58' )
MS-SQL databáze krok za krokem

Řetězce

Datový typ Rozsah Paměť potřebná pro uložení
Char(n) Pevná délka, n 1 až 8000 n bajtů (bude rezervováno místo)
Varchar( n/max) Variabilní délka, n 1 až 8000, max indikuje maximální možnou délku n bajtu + 2 max = 231−1 bajtů

Příklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [char](10) NULL,
    [Sloupec2] [varchar](10) NULL,
    [Sloupec3] [varchar] (max) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1]
           ,[Sloupec2]
           ,[Sloupec3]
           )
     VALUES
           ('abcdefghij',
           'abc',
           'abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcde
           fghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghija
           bcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefgh
           ijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij'
)
MS-SQL databáze krok za krokem

Řetězce s podporou unikódu

Datový typ Rozsah Paměť potřebná pro uložení
nchar(n) Pevná délka, n 1 až 4000 n x 2 bajtů (bude rezervováno místo)
nvarchar( n/max) Variabilní délka, n 1 až 4000, max indikuje maximální možnou délku n x 2 bajtu + 2 max = 231−1 bajtů

Používá se pro ukládání řetězců v unikódu, tzn. Na uložení každého znaku budou použity dva bajty. Lze tak ukládat národní znaky, například diakritiku.

Příklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [nchar] (10) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1])
     VALUES
           ('ěščřžýáíé')
MS-SQL databáze krok za krokem

Binární řetězce

Datový typ Rozsah Paměť potřebná pro uložení
Binary (n) Pevná délka, n 1 až 8000 n bajtů (bude rezervováno místo)
varbinary( n/max) Variabilní délka, n 1 až 8000, max indikuje maximální možnou délku n x 2 bajtu + 2 max = 231−1 bajtů

Používá se pro ukládání binárních souboru, například obrázku, přímo do databáze.

Příklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [binary](500) NULL,
    [sloupec2] [varbinary](500) NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec1],[sloupec2])
     VALUES
           (convert(binary, 'sdkaldjwi235486werfsfg3125h3ouršáhkjíěéýřžéščínřvéěínřzcfdgdfhb654'),
            convert(binary, 'sdkaldjwi235486werfsfg3125h3ouršáhkjíěéýřžéščínřvéěínřzcfdgdfhb654')
           )
MS-SQL databáze krok za krokem

Ostatní datové typy

  • Timestamp – je datový typ, který generuje jedinečné binární číslo, které se používá na rozlišení verze řádků „rowversion“. Tento datový typ neukládá datum a čas! Pro uložení data a času používejte datetime2. V paměti zabírá 8 bajtů.
  • Uniqueidentifier – je datový typ, který ve spojení například s funkcí NEWID() vygeneruje unikátní identifikátor. V paměti zabírá 16 bajtů.

Příklad

CREATE TABLE [dbo].[Priklad1](
    [sloupec1] [uniqueidentifier] NULL DEFAULT (newid()),
    [sloupec2] [Timestamp],
    [sloupec3] [char] (3)
) ON [PRIMARY]
GO
INSERT INTO [dbo].[Priklad1]
           ([sloupec3])
     VALUES
           ('abc')
MS-SQL databáze krok za krokem

Pokud máte dotazy, neváhejte se zeptat v komentářích!

V další lekci, MS-SQL krok za krokem: Uživatelé a oprávnění, se naučíme pracovat s uživatelskými účty. Naučíme se je vytvářet, mazat a přidělovat jim oprávnění.


 

Předchozí článek
MS-SQL krok za krokem: Transakce
Všechny články v sekci
MS-SQL databáze krok za krokem
Přeskočit článek
(nedoporučujeme)
MS-SQL krok za krokem: Uživatelé a oprávnění
Článek pro vás napsal Ondřej Trnka
Avatar
Uživatelské hodnocení:
207 hlasů
OT
Aktivity