NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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í.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.
Funkce, kterou se snažíš použít je dostupná pouze pro registrované uživatele. Buďto se přihlas nebo si zdarma vytvoř nový účet.

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í:
295 hlasů
OT
Aktivity